summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-obj-eu-protractor.tex
blob: 6aa6624611cbc50030f862abc36ae5ce93d3fc0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
% tkz-obj-eu-protractor.tex
% Copyright 2022  Alain Matthes
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
% This work has the LPPL maintenance status “maintained”.
% The Current Maintainer of this work is Alain Matthes.

\def\fileversion{4.25c}
\def\filedate{2022/09/23} 
\typeout{2022/09/23 4.25c tkz-obj-eu-protractor.tex}  
\makeatletter
%<--------------------------------------------------------------------------–>  
%                   !!! 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\FullProtractor{%
\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);
}

\def\FullProtractorReturn{%
\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); 
} 

\pgfkeys{
  protractor/.cd,
  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/.code     = \tkz@RappReturnfalse,
  /protractor/.search also={/tikz},
  lw = 0.4pt,
  scale=1,
  shift={(0,0)},
  rotate=0
  }  

\def\tkzProtractor{\pgfutil@ifnextchar[{\tkz@Protractor}{\tkz@Protractor[]}}
\def\tkz@Protractor[#1](#2,#3){%
\tkz@RappReturnfalse
\pgfqkeys{/protractor}{#1}
  \tkz@@extractxy{#2}
  \global\tkz@ax\pgf@x
  \global\tkz@ay\pgf@y
  \tkzFindSlopeAngle(#2,#3)
  \tkzGetAngle{cmdMO@Rap@rotate}%
  \global\let\tkz@@Protractor\FullProtractor%
  \iftkz@RappReturn
     \global\let\tkz@@Protractor\FullProtractorReturn
     \else
     \global\let\tkz@@Protractor\FullProtractor
 \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}
}
%<--------------------------------------------------------------------------–>
% fin de \tkzProtractor
%<--------------------------------------------------------------------------–>
\makeatother
\endinput