1 \section {Construire à partir du scratch}
3 L'objet \verb+new+ permet de construire son propre solide. Deux
4 paramètres sont utilisés~: \verb+sommets+ qui indique la liste des
5 coordonnées des différents sommets, et \verb+faces+ qui donne la liste
6 de toutes les faces du solide, une face de solide étant caractérisée
7 par la liste des indices des sommets la constituant, ceux-ci étant
8 \textbf {rangés dans le sens trigonométrique lorsque l'on regarde la
9 face du coté extérieur}.
11 \subsection {Exemple 1 : une maison}
16 \psset{lightsrc=10 -20 50,viewpoint=50 -20 30 rtp2xyz,Decran=50}
17 \begin{pspicture*}(-7,-4)(7,7)
53 num=all,show=all,action=draw]
57 Il est à remarquer que le solide \verb+new+ accepte les mêmes options
58 que les autres solides. Par exemple, on a représenté ci-dessous le
59 solide précédent en utilisant les paramètres \verb+hollow+,
60 \verb+incolor+, \verb+fillcolor+ et \verb+rm+.
68 \psset{lightsrc=10 -20 50,viewpoint=50 -20 30 rtp2xyz,Decran=50}
69 \begin{pspicture*}(-7,-3.5)(7,7.5)
70 \psframe(-7,-3.5)(7,7.5)
71 \psSolid[object=new,fillcolor=red!50,incolor=yellow,
105 \psSolid[object=new,fillcolor=red!50,
114 \subsection {Exemple 2 : Hyperboloïde de rayon fixe}
116 %\psset{lightsrc=10 20 30,viewpoint=50 20 30 rtp2xyz}
117 %\psset{viewpoint=50 20 30 rtp2xyz}
121 Comme à chaque fois, les options de la macro \verb+\psSolid+ peuvent
122 embarquer du code postscript, voire du code jps.
124 Ci-contre un exemple en pur postscript, où on utilise les variables
125 $a$, $b$ et $h$ qui sont transmises par les options de PSTricks. On
126 obtient ainsi un solide variable construit à partir du scratch.
128 Remarque~: le code utilisé provient d'un source jps pratiquement
131 \noindent\url{http://melusine.eu.org/lab/bjps/solide/tour.jps}
137 \psset{lightsrc=10 -20 20,viewpoint=50 -20 30 rtp2xyz,Decran=50}
138 \begin{pspicture*}(-5,-5)(3,5)
140 \psSolid[object=new,fillcolor=red!50,incolor=yellow,
143 b=20, %% diviseur de 360, nb de meridiens
152 /r z0 h a div k mul add dup mul 4 div 1 add sqrt def
153 360 b idiv i mul cos r mul
154 360 b idiv i mul sin r mul
161 k b mul 1 add 1 k 1 add b mul 1 sub {
163 [i i 1 sub b i add 1 sub b i add]
165 [k b mul k 1 add b mul 1 sub k 2 add b mul 1 sub k 1 add b mul]
174 Le code utilisé est le suivant~:
176 \psSolid[object=new,fillcolor=red!50,incolor=yellow,
179 b=20, %% diviseur de 360, nb de meridiens
188 /r z0 h a div k mul add dup mul 4 div 1 add sqrt def
189 360 b idiv i mul cos r mul
190 360 b idiv i mul sin r mul
197 k b mul 1 add 1 k 1 add b mul 1 sub {
199 [i i 1 sub b i add 1 sub b i add]
201 [k b mul k 1 add b mul 1 sub k 2 add b mul 1 sub k 1 add b mul]
206 \subsection {Exemple 3~: Import de fichiers externes}
208 \`A partir d'un fichier de description de solide dans un format
209 particulier (notamment autre que obj ou off), on peut fabriquer
210 soit-même un fichier .dat contenant les coordonnées des sommets, et
211 un autre fichier .dat contenant les tableaux des indices des sommets
212 de chaque facette. Ces fichiers peuvent alors être utilisés en entrée
213 pour les paramètres \verb+sommets+ et \verb+faces+ en utilisant
214 l'instruction postscript \verb+run+.
216 Dans l'exemple ci-dessous, les fichiers \verb+sommets_nefer.dat+
217 et \verb+faces_nefer.dat+ ont été placés dans le répertoire de
223 \definecolor{AntiqueWhite}{rgb}{0.98,0.92,0.84}
224 \begin{pspicture}(-7,-7)(7,8)
225 \psset{lightsrc=30 -40 10}
226 \psset{viewpoint=50 -50 20 rtp2xyz,Decran=50}
228 \psset{RotX=90,sommets= (sommets_nefer.dat) run}
229 \psSolid[object=new,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,
230 faces={(faces_nefer.dat) run}]%
231 \psSolid[object=new,fillcolor=red,linewidth=0.5\pslinewidth,
232 faces={(faces_nefer_levres.dat) run}]%
233 \psSolid[object=new,fillcolor=black,
234 faces={(faces_nefer_sourcils.dat) run}]%
237 \begin{pspicture}(-7,-7)(7,8)
238 \psset{lightsrc=-10 -40 -5,lightintensity=.5}
239 \psset{viewpoint=50 -80 10 rtp2xyz,Decran=50}
241 \psset{RotX=90,RotZ=30,sommets= (sommets_nefer.dat) run}
242 \psSolid[object=new,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,
244 faces={(faces_nefer.dat) run}]%
245 \psSolid[object=new,fillcolor=red,linewidth=0.5\pslinewidth,grid,
246 faces={(faces_nefer_levres.dat) run}]%
247 \psSolid[object=new,fillcolor=black,
248 faces={(faces_nefer_sourcils.dat) run}]%
254 \definecolor{AntiqueWhite}{rgb}{0.98,0.92,0.84}
255 \psset{lightsrc=30 -40 10}
256 \psset{viewpoint=50 -50 20 rtp2xyz,Decran=50}
258 \psSolid[object=new,RotX=90,fillcolor=AntiqueWhite,linewidth=0.5\pslinewidth,
259 sommets= (sommets_nefer.dat) run,
260 faces={(faces_nefer.dat) run}]%