% Copyright 2011 by Alain Matthes % % This file may be distributed and/or modified % % 1. under the LaTeX Project Public License and/or % 2. under the GNU Public License. \def\fileversion{1.16 c} \def\filedate{2011/06/01} %<--------------------------------------------------------------------------–> % !!! idea from Y. Combe !!! %<--------------------------------------------------------------------------–> % % \tkzProtractor Protractor % % Rapporteur ajustable et positionable % % Par défaut: % centre en (0,0) % rayon de 5 cm % ligne de base horizontale. % épaisseur de ligne 0.4 pt % % Paramètres (optionnels, gérés par xkeyval) % shift : coordonées (n'importe quelle forme % acceptée par tikz). % scale : facteur d'échelle % rotate : rotation % lw : line width (épaisseur des lignes) % ce paramètre subit le facteur d'échelle. %<--------------------------------------------------------------------------–> \def\HalfProtractor{% \tkzActivOff \draw [fill=black!50!blue!20!,even odd rule,semitransparent](-160:5cm) -- (-20:5cm) arc (-20:200:5cm) -- cycle % (-180:3.5cm) -- (0:3.5cm) arc (0:180:3.5cm) -- cycle;% \draw (-90:0.3cm) -- (0,0) (-135:0.3cm) -- (0,0) (-45:0.3cm) -- (0,0); \foreach \MO@i in {0,1,...,180} \pgfmathparse{ 4.8 * (mod(\MO@i ,5)==0) + 4.9 * (mod(\MO@i ,5)>0) } \draw (\MO@i:\pgfmathresult cm)--(\MO@i:5cm); \foreach \d in {0,1,...,180} \pgfmathparse{3.7 * (mod(\d,5)==0) + 3.6 * (mod(\d,5)>0)} \draw (\d:\pgfmathresult cm)--(\d:3.5cm); \draw (0: 4.6cm) node[font=\small] {0} (0: 4cm) node[font=\small] {180}; \foreach \d in {10,20,...,80} \pgfmathtruncatemacro{\rang}{180 - \d } \draw (\d:3.9 cm) node[font=\tiny] {\rang} (\d:4.6 cm) node[font=\tiny] {\d}; \draw (90: 4.25cm) node[font=\small] {90}; \draw (90: 4.6 cm) -- (90:5cm) (90: 3.9 cm) -- (90:3.5cm) ; \foreach \d in {100,110,...,170} \pgfmathtruncatemacro{\rang}{180 - \d } \draw (\d:3.9 cm) node[font=\tiny] {\rang} (\d:4.6 cm) node[font=\tiny] {\d}; \draw (180: 4.5cm) node[font=\small] {180} (180: 3.9cm) node[font=\small] {0}; \tkzActivOn } \def\FullProtractor{% \tkzActivOff \draw[fill=black!50!yellow!20!,even odd rule,semitransparent]% (0,0) circle (4cm); \draw (0,0) circle (3.3cm);\draw (0,0) circle (4cm); \draw[fill=black] (0,0) circle (.08mm); \node[draw, circle, inner sep=.2mm] (a) at (0,0) {}; \foreach \x in {0, 90, ..., 360}{% \draw[very thin, gray!40] (a) -- (\x:4cm);} \foreach \x in {0,...,359} {\draw (\x:3.8cm) -- (\x:4cm);} \foreach \x in {0,5,...,355} {\draw (\x:3.725cm) -- (\x:4cm);} \foreach \x in {0,10,...,350}{% \node[rotate=(\x-90)] at (\x:3.6cm) {\tiny\x}; } \draw [>=stealth',->, thick,black] (0:2.5) arc(0:32:2.5); \draw [>=stealth',->, thick,black] (0:2) arc(0:32:2); \draw [>=stealth',->, thick,black] (0:1.5) arc(0:32:1.5); \tkzActivOn } \def\FullProtractorReturn{% \tkzActivOff \draw[fill=black!50!yellow!20!,even odd rule,semitransparent]% (0,0) circle (4cm); \draw (0,0) circle (3.3cm);\draw (0,0) circle (4cm); \draw[fill=black] (0,0) circle (.08mm); \node[draw, circle, inner sep=.2mm] (a) at (0,0) {}; \foreach \x in {0, 90, ..., 360}{% \draw[very thin, gray!40] (a) -- (\x:4cm);} \foreach \x in {0,...,359} {\draw (\x:3.8cm) -- (\x:4cm);} \foreach \x in {0,5,...,355} {\draw (\x:3.725cm) -- (\x:4cm);} \begin{scope} \foreach \x in {0,10,...,350}{% \node[rotate=(-\x-90)] at (-\x:3.6cm) {\tiny\x}; } \end{scope} \draw [>=stealth',->, thick,black] (0:2.5) arc(0:-32:2.5); \draw [>=stealth',->, thick,black] (0:2) arc(0:-32:2); \draw [>=stealth',->, thick,black] (0:1.5) arc(0:-32:1.5); \tkzActivOn } \newif\iftkz@RappReturn \newif\iftkz@RappFull \pgfkeys{ protractor/.cd, with/.is choice, with/full/.code = {\global\let\tkz@@Protractor\FullProtractor \tkz@RappFulltrue}, with/half/.code = {\global\let\tkz@@Protractor\HalfProtractor \tkz@RappFullfalse}, with/.default = full, lw/.code = {\def\cmdMO@Rap@lw{#1}}, shift/.code = {\def\cmdMO@Rap@shift{#1}}, rotate/.code = {\def\cmdMO@Rap@rotate{#1}}, scale/.code = {\def\cmdMO@Rap@scale{#1}}, return/.is if = tkz@RappReturn, return/.default = true } \def\tkzOriProtractor{\pgfutil@ifnextchar[{\tkz@OriProtractor}{% \tkz@OriProtractor[]}} \def\tkz@OriProtractor[#1]{ \pgfkeys{/protractor/.cd, with=full, shift={(0,0)}, rotate=0, lw=0.4pt, scale =1, return=false } \pgfqkeys{/protractor}{#1} \pgfmathsetlengthmacro{\MO@lw}{\cmdMO@Rap@lw * \cmdMO@Rap@scale} \begin{scope}[shift = \cmdMO@Rap@shift,% scale = \cmdMO@Rap@scale,% rotate = \cmdMO@Rap@rotate,% every node/.style = {scale =\cmdMO@Rap@scale, rotate =\cmdMO@Rap@rotate},% line width=\MO@lw ]% \tkz@@Protractor \end{scope} } \def\tkzProtractor{\pgfutil@ifnextchar[{\tkz@Protractor}{\tkz@Protractor[]}} \def\tkz@Protractor[#1](#2,#3){ \pgfkeys{/protractor/.cd, with=full, shift={(0,0)}, rotate=0, lw=0.4pt, scale =1, return=false } \pgfqkeys{/protractor}{#1} \tkz@@extractxy{#2} \global\tkz@ax\pgf@x \global\tkz@ay\pgf@y \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{cmdMO@Rap@rotate}% \iftkz@RappFull \iftkz@RappReturn \global\let\tkz@@Protractor\FullProtractorReturn \fi \pgfmathsetlengthmacro{\MO@lw}{\cmdMO@Rap@lw * \cmdMO@Rap@scale} \begin{scope}[shift = {(\tkz@ax,\tkz@ay)},% scale = \cmdMO@Rap@scale,% rotate = \cmdMO@Rap@rotate,% every node/.style = {scale =\cmdMO@Rap@scale, rotate =\cmdMO@Rap@rotate},% line width=\MO@lw]% \tkz@@Protractor \end{scope} \else \iftkz@RappReturn% \pgfmathsubtract{\cmdMO@Rap@rotate}{180} \let\cmdMO@Rap@rotate\pgfmathresult \fi \pgfmathsetlengthmacro{\MO@lw}{\cmdMO@Rap@lw * \cmdMO@Rap@scale} \begin{scope}[shift = {(\tkz@ax,\tkz@ay)},% scale = \cmdMO@Rap@scale,% rotate = \cmdMO@Rap@rotate,% every node/.style = {scale =\cmdMO@Rap@scale, rotate =\cmdMO@Rap@rotate},% line width=\MO@lw]% \tkz@@Protractor \end{scope} \fi } %<--------------------------------------------------------------------------–> % fin de \tkzProtractor %<--------------------------------------------------------------------------–> \endinput