%%%
% Représenter un entier
%%%
\setKVdefault[ClesREntier]{Echelle=1,Unite=false,Compact=false,Impression=false,ListeCouleurs={Tomato,LightSteelBlue,LightGreen,Cornsilk}}%

\newcommand\RepresenterEntier[2][]{%
  \useKVdefault[ClesREntier]%
  \setKV[ClesREntier]{#1}%
  \ifboolKV[ClesREntier]{Unite}{%
    \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)}]
      Echelle=\useKV[ClesREntier]{Echelle};
      Initialisation(5,30,15,50*Echelle);
      color A,B,C,D,E,F,G,H;
      pointilles:="non";
      trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1);
    \end{Geometrie}
  }{%
    % On décompose le nombre
    \StrLen{#2}[\LongueurNombreEntier]%
    \xdef\FooListeEntier{}
    \xintFor* ##1 in{\xintSeq{1}{\LongueurNombreEntier}}\do{%
      \StrChar{#2}{##1}[\ChiffreAAjouter]
      \xdef\FooListeEntier{\FooListeEntier \ChiffreAAjouter,}
    }
    \setsepchar{,}\ignoreemptyitems
    \readlist*\ListeDesChiffres{\FooListeEntier}%
    \xdef\ListeAvantCouleurs{\useKV[ClesREntier]{ListeCouleurs}}%
    \readlist*\ListeCouleurEntier{\ListeAvantCouleurs}%
    \xintifboolexpr{\LongueurNombreEntier==4}{%
      \xdef\NombreMilliers{\ListeDesChiffres[1]}%
      \xdef\NombreCentaines{\ListeDesChiffres[2]}%
      \xdef\NombreDizaines{\ListeDesChiffres[3]}%
      \xdef\NombreUnites{\ListeDesChiffres[4]}%
    }{%
      \xintifboolexpr{\LongueurNombreEntier==3}{%
        \xdef\NombreMilliers{0}%
        \xdef\NombreCentaines{\ListeDesChiffres[1]}%
        \xdef\NombreDizaines{\ListeDesChiffres[2]}%
        \xdef\NombreUnites{\ListeDesChiffres[3]}%
      }{%
        \xintifboolexpr{\LongueurNombreEntier==2}{%
          \xdef\NombreMilliers{0}%
          \xdef\NombreCentaines{0}%
          \xdef\NombreDizaines{\ListeDesChiffres[1]}%
          \xdef\NombreUnites{\ListeDesChiffres[2]}%
        }{%
          \xdef\NombreMilliers{0}%
          \xdef\NombreCentaines{0}%
          \xdef\NombreDizaines{0}%
          \xdef\NombreUnites{\ListeDesChiffres[1]}%
        }%
      }%
    }%
    \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-10,-10)},CoinHD={u*(20,20)}]
      Echelle=\useKV[ClesREntier]{Echelle};
      NM=\NombreMilliers;
      NC=\NombreCentaines;
      ND=\NombreDizaines;
      NU=\NombreUnites;
      color ColorEntier[];
      ColorEntier1=\ListeCouleurEntier[1];
      ColorEntier2=\ListeCouleurEntier[2];
      ColorEntier3=\ListeCouleurEntier[3];
      ColorEntier4=\ListeCouleurEntier[4];
      boolean Compact,Print;
      Compact=\useKV[ClesREntier]{Compact};
      Print=\useKV[ClesREntier]{Impression};
      Initialisation(5,30,15,50*Echelle);
      color A,B,C,D,E,F,G,H;
      picture TypePave[];
      TypePave0=image(
      trace Pave(A,B,C,D,E,F,G,H)(1,1,1);
      currentpicture:=nullpicture;
      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier1 fi;
      for k=0 upto 10:
      trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]);
      endfor;
      for k=0 upto 10:
      trace chemin((k/10)[B,C],(k/10)[G,H],(k/10)[F,E]);
      endfor;
      for k=0 upto 10:
      trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]);
      endfor;
      );
      color A,B,C,D,E,F,G,H;
      TypePave1=image(
      trace Pave(A,B,C,D,E,F,G,H)(0.1,1,1);
      currentpicture:=nullpicture;
      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier2 fi;
      trace chemin(C,H,E);
      for k=0 upto 10:
      trace chemin((k/10)[A,B],(k/10)[F,G],(k/10)[E,H]);
      endfor;
      for k=0 upto 10:
      trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]);
      endfor;
      );
      color A,B,C,D,E,F,G,H;
      TypePave2=image(
      trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,1);
      currentpicture:=nullpicture;
      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier3 fi;
      trace chemin(C,H,E);
      trace chemin(A,F,E);
      trace chemin(B,G,F);
      for k=0 upto 10:
      trace chemin((k/10)[A,F],(k/10)[B,G],(k/10)[C,H]);
      endfor;
      );
      color A,B,C,D,E,F,G,H;
      TypePave3=image(
      trace Pave(A,B,C,D,E,F,G,H)(0.1,0.1,0.1);
      currentpicture:=nullpicture;
      remplis polygone(A,B,C,H,E,F) withcolor if Print : blanc else: ColorEntier4 fi;
      trace chemin(C,H,E);
      trace chemin(A,F,E);
      trace chemin(A,B,C);
      trace chemin(F,G,H);
      trace chemin(B,G);
      );
      if Compact:
      for k=0 upto (\NombreMilliers-1):
      trace TypePave0 shifted ((Projette((k,0,0))-Projette((0,0,0))));
      endfor;
      for k=0 upto (\NombreCentaines-1):
      trace TypePave1 shifted ((Projette((0.1*k,1.5,0))-Projette((0,0,0))));
      endfor;
      for k=0 upto (\NombreDizaines-1):
      trace TypePave2 shifted ((Projette((0.1*k,3,0))-Projette((0,0,0))));
      endfor;
      for k=0 upto (\NombreUnites-1):
      trace TypePave3 shifted ((Projette((0,3.6,0.1*k))-Projette((0,0,0))));
      endfor;
      else:
      for k=0 upto (\NombreMilliers-1):
      trace TypePave0 shifted ((Projette((0,1.1*(k-1),0))-Projette((0,0,0))));
      endfor;
      for k=0 upto (\NombreCentaines-1):
      trace TypePave1 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(k-1),0))-Projette((0,0,0))));
      endfor;
      for k=0 upto (\NombreDizaines-1):
      trace TypePave2 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(k-1),0))-Projette((0,0,0))));
      endfor;
      for k=0 upto (\NombreUnites-1):
      trace TypePave3 shifted ((Projette((0,1.1*\NombreMilliers+1.1*(\NombreCentaines-1)+0.2+0.2*(\NombreDizaines-1),0.2*(k)))-Projette((0,0,0))));
      endfor;
      fi;
    \end{Geometrie}
  }
}