diff options
Diffstat (limited to 'macros/latex/contrib/profcollege/latex/PfCPixelArt.tex')
-rw-r--r-- | macros/latex/contrib/profcollege/latex/PfCPixelArt.tex | 118 |
1 files changed, 114 insertions, 4 deletions
diff --git a/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex b/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex index 06d0cfe95a..77eecfcb42 100644 --- a/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex +++ b/macros/latex/contrib/profcollege/latex/PfCPixelArt.tex @@ -4,8 +4,8 @@ \newtoks\toklistePANombre% \def\UpdatetoksPANombre#1\nil{\addtotok\toklistePANombre{"#1",}}% -\setKVdefault[ClesPixelArt]{Largeur=29,Hauteur=29,Solution=false,Lettres=ABCDEFGHIJK,Nombres=false,ListeCouleurs={Orange,Red,LightGray,Maroon,Purple,black,black,Plum,Orange,White,White},Unite=5mm} -\defKV[ClesPixelArt]{ListeNombres=\setKV[ClesPixelArt]{Nombres}} +\setKVdefault[ClesPixelArt]{Largeur=29,Hauteur=29,Solution=false,Lettres=ABCDEFGHIJK,Nombres=false,ListeCouleurs={Orange,Red,LightGray,Maroon,Purple,black,black,Plum,Orange,White,White},Unite=5mm,Geant=false,HauteurD=1,LargeurD=1,Complet=false,Numero=1,Separations=false}% +\defKV[ClesPixelArt]{ListeNombres=\setKV[ClesPixelArt]{Nombres}}% \NewDocumentCommand\PixelArt{o m}{% \toklistePANombre{}% @@ -16,7 +16,24 @@ \setsepchar{,}% \readlist*\ListePANombre{\ListeAvantNombres}% \foreachitem\compteur\in\ListePANombre{\expandafter\UpdatetoksPANombre\compteur\nil}% - \BuildPixelArt{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}% + \ifboolKV[ClesPixelArt]{Geant}{% + % Découpe en hauteur : \fpeval{\useKV[ClesPixelArt]{Hauteur}/\useKV[ClesPixelArt]{HauteurD}}\\ + % Découpe en largeur : \fpeval{\useKV[ClesPixelArt]{Largeur}/\useKV[ClesPixelArt]{LargeurD}-1}}\par + \ifboolKV[ClesPixelArt]{Complet}{% + \xintFor* ##1 in{\xintSeq{0}{\fpeval{\useKV[ClesPixelArt]{Hauteur}/\useKV[ClesPixelArt]{HauteurD}-1}}}\do{% + \xintFor* ##2 in{\xintSeq{0}{\fpeval{\useKV[ClesPixelArt]{Largeur}/\useKV[ClesPixelArt]{LargeurD}-1}}}\do{% + \fpeval{##1*\useKV[ClesPixelArt]{Hauteur}/\useKV[ClesPixelArt]{HauteurD}+##2} : \BuildPixelArtGeant{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}{##1}{##2}\\% + }% + }% + }{% + \quotient{\fpeval{\useKV[ClesPixelArt]{Numero}-1}}{\fpeval{\useKV[ClesPixelArt]{Hauteur}/\useKV[ClesPixelArt]{HauteurD}}}% + \modulo{\fpeval{\useKV[ClesPixelArt]{Numero}-1}}{\fpeval{\useKV[ClesPixelArt]{Hauteur}/\useKV[ClesPixelArt]{HauteurD}}}% +% quotient = \the\intquotient -- remainder = \the\remainder : + \BuildPixelArtGeant{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}{\the\intquotient}{\the\remainder}% + }% + }{% + \BuildPixelArt{#2}{\useKV[ClesPixelArt]{Lettres}}{\ListeAvantCouleurs}{\the\toklistePANombre}% + }% }% \NewDocumentCommand\BuildPixelArt{m m m m}{% @@ -25,10 +42,15 @@ \begin{mplibcode} largeur:=\useKV[ClesPixelArt]{Largeur}; hauteur:=\useKV[ClesPixelArt]{Hauteur}; + largeurd:=\useKV[ClesPixelArt]{LargeurD}; + hauteurd:=\useKV[ClesPixelArt]{HauteurD}; Unite:=\useKV[ClesPixelArt]{Unite}; - boolean Solution,Nombres; + + boolean Solution,Nombres,Separations; Solution:=\useKV[ClesPixelArt]{Solution}; Nombres:=\useKV[ClesPixelArt]{Nombres}; + Separations:=\useKV[ClesPixelArt]{Separations}; + string BaseLettres; BaseLettres=str #2; numeric EchelleScale; @@ -84,6 +106,16 @@ enddef; Lecturecsv("#1"); + if Separations: + drawoptions(withcolor Purple); + for k=hauteur step -hauteurd until 0: + draw (Unite*(-1,k-0.5)--Unite*(largeur,k-0.5)) withpen pencircle scaled 1.25; + endfor; + for k=0 step largeurd until largeur: + draw (Unite*(k-0.5,hauteur+0.125)--Unite*(k-0.5,-0.875)) withpen pencircle scaled 1.25; + endfor; + drawoptions(); + fi; \end{mplibcode} \else \begin{mpost}[mpsettings={largeur:=\useKV[ClesPixelArt]{Largeur}; hauteur:=\useKV[ClesPixelArt]{Hauteur}; Unite:=\useKV[ClesPixelArt]{Unite}; boolean Solution,Nombres; Solution:=\useKV[ClesPixelArt]{Solution}; Nombres:=\useKV[ClesPixelArt]{Nombres};}] @@ -142,4 +174,82 @@ Lecturecsv("#1"); \end{mpost} \fi +} + +\NewDocumentCommand\BuildPixelArtGeant{m m m m m m}{% + \ifluatex + \mplibforcehmode + \begin{mplibcode} + largeur:=\useKV[ClesPixelArt]{Largeur}; + hauteur:=\useKV[ClesPixelArt]{Hauteur}; + largeurd:=\useKV[ClesPixelArt]{LargeurD}; + hauteurd:=\useKV[ClesPixelArt]{HauteurD}; + + Unite:=\useKV[ClesPixelArt]{Unite}; + + boolean Solution,Nombres; + Solution:=\useKV[ClesPixelArt]{Solution}; + Nombres:=\useKV[ClesPixelArt]{Nombres}; + + string BaseLettres; + BaseLettres=str #2; + + numeric EchelleScale; + EchelleScale=Unite/5mm; + + color ColorEntier[],ColFond; + n:=0; + for p_=#3: + n:=n+1; + ColorEntier[n]:=p_; + endfor; + + string RetiensNombres[]; + if Nombres: + n:=0; + for p_=#4: + n:=n+1; + RetiensNombres[n]=p_; + endfor; + fi; + + vardef Lecturecsv(expr nomfichier)= + % for h=hauteur-#5*hauteurd downto hauteur-(#5+1)*hauteurd: + for h=hauteur downto 1: + string p_; + p_=readfrom nomfichier; + l:=0; + if (h>hauteur-(#5+1)*hauteurd) and (h<hauteur-#5*hauteurd+1): + for p=2*#6*largeurd step 2 until 2*(#6+1)*largeurd-2: + l:=l+1; + if (substring(p,p+1) of p_)="-": + else: + if Nombres: + for m=0 upto (length BaseLettres-1): + if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres: + label(TEX(RetiensNombres[m+1]) scaled EchelleScale,((l-1)*Unite,(h-1)*Unite)); + fi; + endfor; + else: + label(TEX(substring(p,p+1) of p_) scaled EchelleScale,((l-1)*Unite,(h-1)*Unite)); + fi; + if Solution: + for m=0 upto (length BaseLettres-1): + if (substring(p,p+1) of p_)=substring(m,m+1) of BaseLettres: + ColFond:=ColorEntier[m+1]; + fi; + endfor; + if unknown ColFond: else: fill (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite) withcolor ColFond fi; + fi; + trace (unitsquare scaled Unite) shifted ((l-1)*Unite-0.5*Unite,(h-1)*Unite-0.5*Unite); + fi; + endfor; + fi; + endfor; + closefrom nomfichier; + enddef; + + Lecturecsv("#1"); + \end{mplibcode} + \fi }
\ No newline at end of file |