\clearpage
\section{Assemblages de solides}\label{DocAssemblageSolide}\PfCMAJ{0.99-A-c}
\index{Solides}\index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+}
\begin{tcolorbox}[tikzRemarque]
  Cette commande est uniquement disponible en compilant avec \hologo{LuaLaTeX}.\\
  De plus, elle reste expérimentale\dots
\end{tcolorbox}
La commande \lstinline!\AssemblageSolides! permet de tracer une représentation de
certaines associations de solides. Elle a la forme suivante :
\begin{lstlisting}[escapechar=!,aboveskip=1em,belowskip=0.5em]
  \AssemblagesSolides[!\sffamily\textlangle clés\textrangle!]
\end{lstlisting}
où \textlangle\lstinline!clés!\textrangle{} constituent un ensemble
d'options pour paramétrer l'environnement.

\begin{center}
  \AssemblageSolides[Phi=45,Theta=40,Anglex=30,Type=CylindreBoule]\qquad\AssemblageSolides[Phi=45,Theta=-20,Anglex=-160,Type=PrismePyramide,Cotes=7]
\end{center}

\begin{tcolorbox}[tikzcle]
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Phi|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Theta|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Distance|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Longueur|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Largeur|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Profondeur|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Hauteur|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Cotes|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!HauteurPrisme|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!HauteurCylindre|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!HauteurConeA|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!HauteurConeB|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!HauteurPyramideA|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!HauteurPyramideB|mygobble}
%  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!RayonBoule|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!RayonCone|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!RayonCylindre|mygobble}
  \index[cle]{AssemblageSolides@\lstinline+\AssemblageSolides+!Traces|mygobble}
  \begin{KEYSl}{\Cle{Phi}/\Cle{Theta}/\Cle{Distance}}{30/20/50}
    modifient respectivement la première coordonnée du point de vue utilisé; la deuxième coordonnée du point de vue utilisé et la distance entre le point de vue et le plan de projection.
  \end{KEYSl}
  \begin{KEYSl}{\Cle{Largeur}/\Cle{Hauteur}/\Cle{Profondeur}}{1/1.5/0.75} modifient respectivement la largeur, la hauteur et la profondeur du pavé droit affiché.
  \end{KEYSl}
  \begin{KEYSl}{\Cle{Cotes}/\Cle{HauteurPyramideA}/\Cle{HauteurPyramideB}}{3/1/1} modifient respectivement le nombre de côtés des pyramides, la hauteur de la première pyramide et la hauteur de la deuxième pyramide.    
  \end{KEYSl}
  \begin{KEYSl}{\Cle{RayonCylindre}/\Cle{HauteurCylindre}}{1/1} modifient respectivement le rayon et la hauteur du cylindre utilisé.
  \end{KEYSl}
  \begin{KEYSl}{\Cle{RayonCone}/\Cle{HauteurConeA}/\Cle{HauteurConeB}}{1/1/1} modifient respectivement le rayon des cônes, la hauteur du premier cône et la hauteur du deuxième cône.
  \end{KEYSl}
  \begin{Key}{HauteurPrisme}{1}
    modifie la hauteur du prisme utilisé.
  \end{Key}
  \begin{Key}{Anglex}{0}
    permet de faire une rotation de l'assemblage du solide autour de l'axe $[Ox)$.
  \end{Key}
  \begin{Key}{Type}{Pyramides}
    modifie le type d'assemblage à afficher. Les types d'assemblage disponibles sont : {\ttfamily
      Pyramides}, {\ttfamily PavePyramide}, {\ttfamily PavePyramides}, {\ttfamily PrismePyramide}, {\ttfamily CylindreCone}, {\ttfamily CylindreCones}, {\ttfamily CylindreBoule}, {\ttfamily CylindreBoules}, {\ttfamily ConeBoule}, {\ttfamily CylindreConeBoule}.
  \end{Key}
  \begin{Key}{Traces}{-}
    permet d'ajouter des tracés aux assemblages.
  \end{Key}
\end{tcolorbox}
\begin{Exemple}[]{}
\AssemblageSolides[Phi=45,Theta=40,Anglex=30,Type=CylindreBoule]\qquad\AssemblageSolides[Phi=45,Theta=-20,Anglex=-160,Type=PrismePyramide,Cotes=7]  
\end{Exemple}
\begin{Codes}[listing side text]{0.5}{}
\AssemblageSolides[%
Type=PavePyramides,
Profondeur=2,
Hauteur=0.5
]
\end{Codes}
\begin{Codes}[listing side text]{0.5}{}
\AssemblageSolides[%
Cotes=9,
HauteurPyramideB=2
]
\end{Codes}
\begin{Codes}[listing side text]{0.35}{\footnotesize}
\AssemblageSolides[
Theta=10,Phi=0,Type=CylindreCone,RayonCylindre=0.75,
HauteurCylindre=2,HauteurConeA=1,Traces={
  color S,A,B,D,O,C,O';
  O=(0,0,0);
  C=(0,0.75,0);
  D=(0,-0.75,0);
  B-C=(0,0,2);
  A-D=(0,0,2);
  O'-O=(0,0,2);
  S-O'=(0,0,1);
  trace chemin(S,S+A-O') dashed evenly;
  trace cotation(Projette(C),Projette(B),-1cm,-5mm,TEX("\Lg{8}") rotated -90);
  trace cotation(Projette(O),Projette(C),-1cm,-5mm,TEX("\Lg{3}"));
  trace cotation(Projette(S+A-O'),Projette(A),-1cm,5mm,TEX("\Lg{4}") rotated 90);
  trace chemin(D,C) dashed evenly;
  trace chemin(O,S) dashed evenly;
  trace chemin(A,B) dashed evenly;
  Label.llft(TEX("D"),D);
  Label.lrt(TEX("C"),C);
  Label.ulft(TEX("O"),O);
  Label.llft(TEX("A"),A);
  Label.urt(TEX("B"),B);
  Label.ulft(TEX("$O'$"),O');
  Label.top(TEX("S"),S);
}
]
\end{Codes}