\clearpage
\section{Empilements de cubes}\label{DocEmpilement}\PfCMAJ{0.99-z-b}
\index{Espace}\index{Cubes}\index[cle]{VueCubes@\lstinline+\VueCubes+}
\begin{tcolorbox}[tikzRemarque]
  Cette commande est {\em uniquement} disponible en compilant avec \hologo{LuaLaTeX}.
\end{tcolorbox}
La commande \lstinline!\VueCubes! permet d'obtenir une représentation d'un empilement de cubes :
\begin{center}
  \VueCubes{}
\end{center}
Elle a la forme suivante :
\begin{lstlisting}[escapechar=!,belowskip=0pt]
  \VueCubes[!\sffamily\textlangle clés\textrangle!]{!\sffamily\textlangle Liste de hauteurs\textrangle!}
\end{lstlisting}
où
\begin{itemize}
\item\textlangle\lstinline!clés!\textrangle{} constituent un ensemble
  d'options pour paramétrer la commande (paramètres optionnels);
\item\textlangle\lstinline[classoffset=1,deletekeywords={Liste},classoffset=0]!Liste de hauteurs!\textrangle{} se donnée sous la forme \lstinline!h1,h2...! uniquement dans le cas d'une création particulière.
\end{itemize}
\begin{Codes}[listing side text]{0.4}{}
% Le choix des différentes
% hauteurs est aléatoire.
\VueCubes{}
\end{Codes}
\begin{minipage}{0.6\linewidth}
  \begin{tcolorbox}[tikzcle]
    \index[cle]{VueCubes@\lstinline+\VueCubes+!Largeur|mygobble}
    \index[cle]{VueCubes@\lstinline+\VueCubes+!Profondeur|mygobble}
    \index[cle]{VueCubes@\lstinline+\VueCubes+!Hauteur|mygobble}
  \begin{Key}{Largeur}{3}
  modifie la largeur de l'assemblage de cubes.
\end{Key}
\begin{Key}{Profondeur}{4}
  modifie la profondeur de l'assemblage de cubes.
\end{Key}
\begin{Key}{Hauteur}{5}
  modifie la hauteur de l'assemblage de cubes.
\end{Key}
\end{tcolorbox}
\end{minipage}
\hfill
\begin{minipage}{0.35\linewidth}
  \begin{Geometrie}[TypeTrace="Espace",CoinBG={u*(-5,-5)},CoinHD={u*(5,5)}]
    Initialisation(1500,30,20,200);
    color A,B,C,D,E,F,G,H;
    trace Pave(A,B,C,D,E,F,G,H)(0.4,0.3,0.5);
    trace appelation(A,B,-3mm,btex largeur etex);
    trace appelation(B,C,-3mm,btex profondeur etex);
    label.rt(btex hauteur etex,1/2[Projette(C),Projette(H)]);
  \end{Geometrie}
\end{minipage}
\begin{Codes}[]{0.5}{}
\VueCubes[%
Largeur=3,%
Profondeur=6,%
Hauteur=4]{}
\end{Codes}
\clearpage
\begin{tcolorbox}[tikzcle]
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Echelle|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!CouleurCube|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!TroisCouleurs|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Angle|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Trou|mygobble}
\begin{Key}{Echelle}{0.25}
  modifie la taille de l'arête d'un cube de base.
\end{Key}
\begin{Key}{CouleurCube}{LightSteelBlue}
  modifie la couleur des cubes.
\end{Key}
\begin{Key}{TroisCouleurs}{-}\PfCMAJ{0.99-A-k}
  utilise trois couleurs pour afficher les faces parallèles aux plans de base.
\end{Key}
\begin{Key}{Angle}{60}
  modifie l'angle de vision du premier assemblage.\\L'angle du deuxième assemblage est égal à $\text{\Cle{Angle}}+\ang{90}$.
\end{Key}
\begin{Key}{Trou}{false}
  autorise, lorsqu'elle est positionnée à \lstinline!true!, des hauteurs nulles.
\end{Key}
\begin{Key}{Seul}{false}
  n'affiche, lorsqu'elle est positionnée à \lstinline!true!, que le premier assemblage.
\end{Key}
\end{tcolorbox}
\begin{Codes}[listing side text]{0.6}{}
\VueCubes[Echelle=0.35]{}
\end{Codes}
\begin{multicols}{2}
\begin{Exemple}[]{}
\VueCubes[CouleurCube=Cornsilk]{}
\end{Exemple}
\begin{Exemple}[]{}
\VueCubes[Angle=-45]{}
\end{Exemple}
\end{multicols}
\begin{Codes}[listing side text]{0.4}{}
\VueCubes[
Echelle=0.25,
TroisCouleurs={Salmon,LightSteelBlue,LightGreen}]{}
\end{Codes}
\begin{Codes}[listing side text]{0.4}{}
\VueCubes[Trou]{}
\end{Codes}
\begin{Codes}[listing side text]{0.4}{}
\VueCubes[Seul]{}
\end{Codes}
\clearpage
Enfin, on peut créer soi-même des assemblages de cubes avec la clé suivante.
\begin{tcolorbox}[tikzcle]
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Creation|mygobble}
\begin{Key}{Creation}{false}
  utilise la \textlangle\lstinline[classoffset=1,deletekeywords={Liste},classoffset=0]!Liste de hauteurs!\textrangle{} pour construire l'assemblage.
\end{Key}
\end{tcolorbox}
Voici une grille permettant d'anticiper la création de l'assemblage :
\begin{center}
  \begin{Geometrie}[CoinBG={u*0.6*(-5,-5)}]
    u:=6mm;
    pair A[],B[];
    A0=(0,0);
    A1-A0=u*(4,-2);
    A2-A1=u*(5,3);
    A3-A2=A0-A1;
    for k=0 upto 5:
    B0:=(k/5)[A0,A3];
    B1:=(k/5)[A1,A2];
    draw 1.05[B0,B1]--1.05[B1,B0];
    endfor;
    for k=0 upto 4:
    B2:=(k/4)[A0,A1];
    B3:=(k/4)[A3,A2];
    draw 1.05[B2,B3]--1.05[B3,B2];
    endfor;

    vardef Text(text t)=
    n:=0;
    for p_=t:
    label(TEX(decimal(p_)),1/8*(A1-A0)+1/10*(A3-A0)+(n div 5)*1/4*(A1-A0)+(n mod 5)*1/5*(A3-A0));
    n:=n+1;
    endfor;
    enddef;

    Text(1,2,3,4,5,0,2,1,1,3,0,2,1,1,2,1,1,1,1,1);
  \end{Geometrie}
\end{center}
\begin{Codes}[listing side text]{0.6}{}
\VueCubes[%
Creation,%
Profondeur=5,Largeur=4]{%
  1,2,3,4,5,%
  0,2,1,1,3,%
  0,2,1,1,2,%
  1,1,1,1,1}
\end{Codes}
Conçue initialement pour travailler sur la vision dans l'espace et les vues de face, de dessus\dots{}, les commandes suivantes permettent d'aider l'élève ou de donner une solution sous la forme d'une vue de face, vue de dessus et vue de gauche.
\begin{tcolorbox}[tikzcle]
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Grilles|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Face|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Face!CouleurFleche|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Solution|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Solution!Nom|mygobble}
  \begin{Key}{Grilles}{false}
    affiche trois grilles permettant à l'élève de dessiner directement les vues de face, de dessus et de gauche.
  \end{Key}
  \begin{Key}{Face}{false}
    affiche une flèche indiquant la direction d'observation de l'assemblage pour définir la vue de face.
    \begin{SousDescription}
    \item[La clé \Cle{CouleurFleche}]\DefautR{LightGray}
      modifie la couleur de remplissage de la flèche.
    \end{SousDescription}
  \end{Key}
  \begin{Key}{Solution}{false}
    affiche, lorsqu'elle est positionnée à \lstinline!true!, les vues de face, de dessus et de gauche du solide associé.
    \begin{SousDescription}
    \item[La clé \Cle{Nom}]\DefautR{Ex1}
      modifie le nom donné à l'assemblage de cubes afin de permettre une solution correcte.
    \end{SousDescription}
  \end{Key}
\end{tcolorbox}
\begin{Codes}[listing side text]{0.4}{}
\VueCubes[Grilles]{}
\end{Codes}
\begin{Codes}[listing side text]{0.5}{}
  \VueCubes[Face,Nom=Testa]{}
\end{Codes}
% \begin{Codes}[listing side text]{0.6}{}
\begin{Exemple}{}
\VueCubes[Face,CouleurFleche=Cornsilk]{}
\end{Exemple}
%\end{Codes}
\begin{Codes}[listing side text]{0.4}{}
\VueCubes[Nom=Testa,Solution]{}
\end{Codes}
On peut même aller plus loin avec la clé \Cle{Perso}.
\begin{tcolorbox}[tikzcle]\PfCMAJ{0.99-A-f}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso!EclateX|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso!EclateY|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso!EclateZ|mygobble}
\begin{Key}{Perso}{false}
  permet de construire un empilement de cubes bien particulier. L'empilement de cubes est décrit par les symboles {\ttfamily x} pour afficher un cube et {\ttfamily o} pour ne pas en afficher. La description de l'empilement se fait en commençant par la couche supérieure et en avançant ligne par ligne.
  \begin{SousDescription}
  \item[Les clés \Cle{EclateX}, \Cle{EclateY} et \Cle{EclateZ}]\DefautsR{false/false/false}
    permet \og d'éclater\fg{} l'empilement construit afin de mieux permettre une visualisation par \og couches\fg.
  \end{SousDescription}
\end{Key}
\end{tcolorbox}
\begin{Codes}[listing side text]{0.4}{}
\VueCubes[Perso]{%
  xxx/xox/xxx,%couche supérieure
  xox/ooo/xox,%couche intermédiaire
  xxx/xox/xxx%couche inférieure.
}
\end{Codes}
\begin{multicols}{2}
  \begin{Codes}[]{}{}
\VueCubes[%
Perso,
CouleurCube=Cornsilk,
Angle=120]{%
  xxxxxx/xxxxxx/xxxxxx/xxxxxx/xxxxxx,%
  xxxxxx/oooooo/oooooo/oooooo/xxxxxx,%
  xxxxxx/oooooo/oooooo/oooooo/xxxxxx,%
  xxxxxx/xxxxxx/xxxxxx/xxxxxx/xxxxxx%
}
\end{Codes}

  \begin{Codes}[]{}{}
\VueCubes[%
Perso,
CouleurCube=Cornsilk,
Angle=120,EclateZ=2]{%
  xxxxxx/xxxxxx/xxxxxx/xxxxxx/xxxxxx,%
  xxxxxx/oooooo/oooooo/oooooo/xxxxxx,%
  xxxxxx/oooooo/oooooo/oooooo/xxxxxx,%
  xxxxxx/xxxxxx/xxxxxx/xxxxxx/xxxxxx%
}
\end{Codes}
\end{multicols}
\begin{comment}
  \begin{multicols}{2}
  \begin{Codes}[]{0.2}{}
\VueCubes[Perso,CouleurCube=Cornsilk,Angle=120]{
  ooooooo/ooooooo/ooooooo/oooxooo/ooooooo/ooooooo/ooooooo,%
  ooooooo/ooooooo/oooxooo/ooxxxoo/oooxooo/ooooooo/ooooooo,%
  ooooooo/oooxooo/ooxxxoo/oxxxxxo/ooxxxoo/oooxooo/ooooooo,%
  oooxooo/ooxxxoo/oxxxxxo/xxxxxxx/oxxxxxo/ooxxxoo/oooxooo,%
}
\end{Codes}
\begin{Codes}[]{0.2}{}
\VueCubes[Perso,CouleurCube=Cornsilk,Angle=120,EclateZ=1]{
  ooooooo/ooooooo/ooooooo/oooxooo/ooooooo/ooooooo/ooooooo,%
  ooooooo/ooooooo/oooxooo/ooxxxoo/oooxooo/ooooooo/ooooooo,%
  ooooooo/oooxooo/ooxxxoo/oxxxxxo/ooxxxoo/oooxooo/ooooooo,%
  oooxooo/ooxxxoo/oxxxxxo/xxxxxxx/oxxxxxo/ooxxxoo/oooxooo,%
}
\end{Codes}
\end{multicols}
\end{comment}
On peut également obtenir une version où chaque cube est coloré {\em au détriment} d'un changement de description de l'empilement :
\begin{center}
  \VueCubes[Perso,ListeCouleurs={Crimson,Yellow,Purple,LightSteelBlue,LightGreen}]{%
    11o/12o/ooo,%
    222/122/3oo,%
    445/555/444%
  }%
\end{center}
\begin{tcolorbox}[tikzcle]
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso!ListeCouleurs|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso!Theta|mygobble}
  \index[cle]{VueCubes@\lstinline+\VueCubes+!Perso!Visualisation|mygobble}
\begin{Key}{Perso}{false}\PfCMAJ{0.99-A-l}%
  permet de construire un empilement de cubes bien particulier. L'empilement de cubes est décrit par les symboles {\ttfamily x} pour afficher un cube et {\ttfamily o} pour ne pas en afficher. La description de l'empilement se fait en commençant par la couche supérieure et en avançant ligne par ligne.
  \begin{SousDescription}
  \item[La clé \Cle{ListeCouleurs}]\DefautsR{-}
  permet, lorqu'elle est définie, de colorer chaque cube de l'assemblage. Pour cela, la description de l'assemblage se fera avec les chiffres de 1 à 9 associés respectivement à la couleur 1, la couleur 2\dots{} définies par la clé.
\item[La clé \Cle{Theta}]\DefautR{20}
  permet de modifier la latitude de « l'\oe il ».
\item[La clé \Cle{Visualisation}]\DefautR{false}
  affiche, lorsqu'elle est positionnée à {\ttfamily true}, 5 flèches d'orientation de visualisation.
  \end{SousDescription}
\end{Key}
\end{tcolorbox}
\begin{Codes}[listing side text]{0.3}{}
\VueCubes[Perso,ListeCouleurs={%
  Crimson,%
  Yellow,%
  Purple,%
  LightSteelBlue,%
  LightGreen}]{%
  11o/12o/ooo,%
  222/122/3oo,%
  445/555/444%
}%  
\end{Codes}
\begin{Codes}[listing side text]{0.3}{}
%Vue de dessus
\VueCubes[Perso,Theta=90,ListeCouleurs={%
  Crimson,%
  Yellow,%
  Purple,%
  LightSteelBlue,%
  LightGreen}]{%
  11o/12o/ooo,%
  222/122/3oo,%
  445/555/444%
}%  
\end{Codes}
\begin{Codes}[listing side text]{0.3}{}
\VueCubes[Perso,ListeCouleurs={%
  Crimson,%
  Yellow,%
  Purple,%
  LightSteelBlue,%
  LightGreen},
  Visualisation]{%
  11o/12o/ooo,%
  222/122/3oo,%
  445/555/444%
}%  
\end{Codes}