diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex b/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex new file mode 100644 index 00000000000..17846d9d548 --- /dev/null +++ b/Master/texmf-dist/tex/latex/profcollege/PfCEngrenagesBase.tex @@ -0,0 +1,135 @@ +%%% +% Engrenages +%%% +\newtoks\tokPfCEngrenages% +\def\UpdatetoksEngrenages#1/#2\nil{\addtotok\tokPfCEngrenages{#1,#2,}}% + +\setKVdefault[Engrenages]{Couleur=LightSteelBlue,Unite=3mm} + +\NewDocumentCommand\Engrenages{o m}{% + \tokPfCEngrenages{} + \useKVdefault[Engrenages]% + \setKV[Engrenages]{#1}% + \setsepchar[*]{,*/}% + \ignoreemptyitems + \readlist*\ListePfCEngrenages{#2}% + \setsepchar{,} + \xdef\PfCFooEngrenages{} + % \foreachitem\compteur\in\ListePfCEngrenages{\expandafter\UpdatetoksEngrenages\compteur\nil}% + \foreachitem\compteur\in\ListePfCEngrenages{% + \xdef\PfCFooEngrenages{\PfCFooEngrenages \ListePfCEngrenages[\compteurcnt,1],\ListePfCEngrenages[\compteurcnt,2],}% + }% + \BuildEngrenages{\PfCFooEngrenages}% +}% + +\NewDocumentCommand\BuildEngrenages{m}{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + input PfCEngrenages; + + u:=\useKV[Engrenages]{Unite}; + CouleurEngrenage=\useKV[Engrenages]{Couleur}; + + vardef LectureDonnees(text t)= + n:=0;k=0;l=0; + for p_=t: + n:=n+1; + if (n mod 2)=0: + l:=l+1; + Zz[l]=p_; + else: + k:=k+1; + Mm[k]=p_; + fi; + endfor; + enddef; + + LectureDonnees(#1); + + pair K; + K=(0,0); + + trace Engrenage(Mm[1],Zz[1],(0,0)); + + Signe=1; + + for w=2 upto (n div 2): + K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0); + AngleRot[w]:=360/(2*Zz[w]); + if w=2: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + if (Zz[w] mod 2)=0: + Signe:=Signe*(-1); + fi; + else: + if (Zz[w] mod 2)=1: + if Signe=-1: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); + else: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + fi; + else: + Signe:=Signe*(-1); + if Signe=1: +trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); + else: +trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + fi; + fi; + fi; + endfor; + \end{mplibcode} + \else + \begin{mpost}[mpsettings={input PfCEngrenages;u:=\useKV[Engrenages]{Unite};CouleurEngrenage=\useKV[Engrenages]{Couleur};}] + vardef LectureDonnees(text t)= + n:=0;k=0;l=0; + for p_=t: + n:=n+1; + if (n mod 2)=0: + l:=l+1; + Zz[l]=p_; + else: + k:=k+1; + Mm[k]=p_; + fi; + endfor; + enddef; + + LectureDonnees(#1); + + pair K; + K=(0,0); + + trace Engrenage(Mm[1],Zz[1],(0,0)); + + Signe=1; + + for w=2 upto (n div 2): + K:=K+pointarc(cercles((0,0),u*Mm[w]*(Zz[w-1]+Zz[w])*0.5+0.04*u),0); + AngleRot[w]:=360/(2*Zz[w]); + if w=2: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + if (Zz[w] mod 2)=0: + Signe:=Signe*(-1); + fi; + else: + if (Zz[w] mod 2)=1: + if Signe=-1: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); + else: + trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + fi; + else: + Signe:=Signe*(-1); + if Signe=1: +trace rotation(Engrenage(Mm[w],Zz[w],K),K,180); + else: +trace rotation(Engrenage(Mm[w],Zz[w],K),K,180-AngleRot[w]); + fi; + fi; + fi; + endfor; + \end{mpost} + \fi +}
\ No newline at end of file |