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
|