% tkz-obj-eu-protractor.tex
% Copyright 2023  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{5.02c}
\def\filedate{2023/02/03} 
\typeout{2023/02/03 5.02c 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