root/trunk/pst-solides3d.tex

Revision 109, 40.8 kB (checked in by herbert, 2 months ago)

M trunk/doc/par-courbeR3.tex
M trunk/doc/par-changements.tex
M trunk/doc/par-section.tex
M trunk/doc/pst-solides3d-doc.pdf
A trunk/doc-en
A trunk/doc-en/par-colorierfacettes_en_corr.tex
A trunk/doc-en/par-poems_en.tex
A trunk/doc-en/par-tube_en_corr.tex
A trunk/doc-en/par-affinage_en_corr.tex
A trunk/doc-en/Pyramid-faces.dat
A trunk/doc-en/tore1860-couleurs.dat
A trunk/doc-en/par-solidescreux_en_corr.tex
A trunk/doc-en/par-surfaces_en_corr.tex
A trunk/doc-en/geodedual44-couleurs.dat
A trunk/doc-en/par-courbeR3_en_corr.tex
A trunk/doc-en/fusee62-sommets.dat
A trunk/doc-en/horoptere-couleurs.dat
A trunk/doc-en/par-axes3D_en_corr.tex
A trunk/doc-en/tore1860ovales-io.dat
A trunk/doc-en/par-point_en_corr.tex
A trunk/doc-en/tore1836-faces.dat
A trunk/doc-en/Pyramid-io.dat
A trunk/doc-en/paraboloid-couleurs.dat
A trunk/doc-en/tore1860part-couleurs.dat
A trunk/doc-en/par-couleurs_en_corr.tex
A trunk/doc-en/par-surfacesparametrees_en_corr.tex
A trunk/doc-en/fusee62-io.dat
A trunk/doc-en/par-projpresentation_en_corr.tex
A trunk/doc-en/geodedual44-sommets.dat
A trunk/doc-en/horoptere-faces.dat
A trunk/doc-en/par-modes_en_corr.tex
A trunk/doc-en/par-transform_en_corr.tex
A trunk/doc-en/par-projectioncourbe_en_corr.tex
A trunk/doc-en/tore1860part-faces.dat
A trunk/doc-en/par-fusionjps_en_corr.tex
A trunk/doc-en/Pyramid-couleurs.dat
A trunk/doc-en/par-commandestrace_en_corr.tex
A trunk/doc-en/par-codejps_en_corr.tex
A trunk/doc-en/par-transformpointconnu_en_corr.tex
A trunk/doc-en/par-projectionpolygone_en_corr.tex
A trunk/doc-en/par-tronque_en_corr.tex
A trunk/doc-en/par-face_en_corr.tex
A trunk/doc-en/tore1860-sommets.dat
A trunk/doc-en/par-parametres_en_corr.tex
A trunk/doc-en/par-section_en_corr.tex
A trunk/doc-en/par-acknowledgements_en.tex
A trunk/doc-en/par-datfile_en_corr.tex
A trunk/doc-en/par-solidespredefinis_en_corr.tex
A trunk/doc-en/paraboloid-faces.dat
A trunk/doc-en/tintin.tex
A trunk/doc-en/faces_nefer.dat
A trunk/doc-en/cubecolor-sommets.dat
A trunk/doc-en/chapter_1_en_corr.tex
A trunk/doc-en/par-eclairageponctuel_en_corr.tex
A trunk/doc-en/geodedual44-faces.dat
A trunk/doc-en/tore1836-sommets.dat
A trunk/doc-en/par-fusion_en_corr.tex
A trunk/doc-en/cubeHexagone-sommets.dat
A trunk/doc-en/pst-solides3d-doc.bib
A trunk/doc-en/par-opacity_en_corr.tex
A trunk/doc-en/rocket.obj
A trunk/doc-en/horoptere-sommets.dat
A trunk/doc-en/tore1860part-sommets.dat
A trunk/doc-en/par-projectioncercle_en_corr.tex
A trunk/doc-en/par-projectionligne_en_corr.tex
A trunk/doc-en/slicePyramid-sommets.dat
A trunk/doc-en/par-nommersolide_en_corr.tex
A trunk/doc-en/horoptere-io.dat
A trunk/doc-en/par-numeroterfacettes_en_corr.tex
A trunk/doc-en/par-anneaux_en_corr.tex
A trunk/doc-en/tore1860lemniscate-sommets.dat
A trunk/doc-en/tore1860part-io.dat
A trunk/doc-en/pst-solides3d-doc-EN.tex
A trunk/doc-en/tore1836-couleurs.dat
A trunk/doc-en/cubecolor-faces.dat
A trunk/doc-en/par-grille_en_corr.tex
A trunk/doc-en/par-pointagesommets_en_corr.tex
A trunk/doc-en/par-enleverfacettes_en_corr.tex
A trunk/doc-en/par-definirfonction_en_corr.tex
A trunk/doc-en/par-projectiondroite_en_corr.tex
A trunk/doc-en/par-projectionvisibility_en_corr.tex
A trunk/doc-en/par-projectiontexte_en_corr.tex
A trunk/doc-en/Makefile
A trunk/doc-en/par-plan_en_corr.tex
A trunk/doc-en/cubeHexagone-faces.dat
A trunk/doc-en/par-chanfrein_en_corr.tex
A trunk/doc-en/par-prisme_en_corr.tex
A trunk/doc-en/par-extensions_en_corr.tex
A trunk/doc-en/par-cylindres-cones_en_corr.tex
A trunk/doc-en/cubecolor-io.dat
A trunk/doc-en/faces_nefer_sourcils.dat
A trunk/doc-en/tore1860-io.dat
A trunk/doc-en/par-lignedeniveau_en_corr.tex
A trunk/doc-en/cubeHexagone-io.dat
A trunk/doc-en/slicePyramid-faces.dat
A trunk/doc-en/tore1860-faces.dat
A trunk/doc-en/par-new_en_corr.tex
A trunk/doc-en/tore1860lemniscate-faces.dat
A trunk/doc-en/cubecolor-couleurs.dat
A trunk/doc-en/fusee62-couleurs.dat
A trunk/doc-en/faces_nefer_levres.dat
A trunk/doc-en/paraboloid-io.dat
A trunk/doc-en/par-projectionvecteur_en_corr.tex
A trunk/doc-en/slicePyramid-io.dat
A trunk/doc-en/Pyramid-sommets.dat
A trunk/doc-en/cubeHexagone-couleurs.dat
A trunk/doc-en/par-vecteur_en_corr.tex
A trunk/doc-en/fusee62-faces.dat
A trunk/doc-en/paraboloid-sommets.dat
A trunk/doc-en/tore1860lemniscate-io.dat
A trunk/doc-en/par-ligne3D_en_corr.tex
A trunk/doc-en/par-projectionangledroit_en_corr.tex
A trunk/doc-en/par-positionnerpointconnu_en_corr.tex
A trunk/doc-en/par-projectionpoint_en_corr.tex
A trunk/doc-en/sommets_nefer.dat
A trunk/doc-en/chapter_2_en_corr.tex
A trunk/doc-en/faces_nefer_yeux.dat
A trunk/doc-en/par-tracerpolygone_en_corr.tex
A trunk/doc-en/par-definirplanquelconque_en_corr.tex
A trunk/doc-en/tore1860ovales-faces.dat
A trunk/doc-en/slicePyramid-couleurs.dat
A trunk/doc-en/sommets_nefer0.dat
A trunk/doc-en/par-keywords_en_corr.tex
A trunk/doc-en/par-ruban_en_corr.tex
A trunk/doc-en/tore1860ovales-sommets.dat
A trunk/doc-en/par-positionnersolide_en_corr.tex
A trunk/doc-en/tore1860lemniscate-couleurs.dat
A trunk/doc-en/tore1836-io.dat
A trunk/doc-en/tore1860ovales-couleurs.dat
A trunk/doc-en/par-geode_en_corr.tex
A trunk/doc-en/par-definitionmaillage_en_corr.tex
A trunk/doc-en/par-annoterschema_en_corr.tex
A trunk/doc-en/geodedual44-io.dat
M trunk/pst-solides3d.sty
M trunk/pst-solides3d.tex

Line 
1 %% COPYRIGHT 2008 by Manuel Luque, Arnaud Schmittbuhl,
2 %% Jean-Paul Vignault, Herbert Voss.
3 %% This program can be redistributed and/or modified under the terms
4 %% of the LaTeX Project Public License Distributed from CTAN
5 %% archives in directory macros/latex/base/lppl.txt.
6 %% etex detection by looking for the \ifcsname macro
7 \expandafter\ifx\csname ifcsname\endcsname\relax
8  \newlinechar`\^^J
9  \message{^^J*****************************************}
10  \message{etex is needed to work with pst-solides3d}
11  \message{*****************************************}
12  \catcode`\ =11\relax
13  \Compile With etex Please
14 \fi
15 \csname PSTSOLIDESIIIDLoaded\endcsname
16 \let\PSTSOLIDESIIIDLoaded\endinput
17 % Requires PSTricks, pst-xkey and pst-node packages
18 \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
19 \ifx\PSTnodesLoaded\endinput\else\input pst-node \fi
20 \ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi
21 \ifx\MultidoLoaded\endinput\else\input multido.tex \fi
22 % JPV & ML & AS & HV
23 \def\fileversion{4.10}
24 \def\filedate{2008/07/24}
25 \message{`PSTSOLIDESIIID' v\fileversion, \filedate}
26 %
27 \pstheader{solides.pro}
28
29 \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
30 \pst@addfams{pst-solides3d}
31 \SpecialCoor
32 %
33 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
34 %% Definition des differentes variables pour PSTricks
35 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36 %
37 %%%%%%%%%%%%%%%%% variables numeriques %%%%%%%%%%%%%%%%%
38 %
39 % point de vue et rotations de l'objet
40 % distance de l'ecran a l'observateur
41 %
42 \define@key[psset]{pst-solides3d}{viewpoint}{\def\pst@solides@viewpoint{#1}}% position de l'observateur
43 \psset[pst-solides3d]{viewpoint=10 10 10}% coordonnees cartesiennes
44 \define@key[psset]{pst-solides3d}{Decran}{\def\pst@solides@Decran{#1}}% distance de l'ecran
45 \define@key[psset]{pst-solides3d}{RotX}{\def\psk@solides@RotX{#1}}% rotation autour de Ox en degres
46 \define@key[psset]{pst-solides3d}{RotY}{\def\psk@solides@RotY{#1}}% rotation autour de Oy en degres
47 \define@key[psset]{pst-solides3d}{RotZ}{\def\psk@solides@RotZ{#1}}% rotation autour de Oz en degres
48 \psset[pst-solides3d]{RotZ=0,RotX=0,RotY=0,Decran=50}% valeurs par defaut
49 % parametres propres a chaque objet
50 \define@key[psset]{pst-solides3d}{resolution}{\def\pst@solides@resolution{#1}} % nb points par courbe
51 \define@key[psset]{pst-solides3d}{no}{\def\pst@solides@no{#1}} % numero face du solide
52 \define@key[psset]{pst-solides3d}{phi}{\def\pst@solides@phi{#1}} % angle calotte sphere
53 \define@key[psset]{pst-solides3d}{theta}{\def\pst@solides@theta{#1}} % angle calotte sphere
54 \define@key[psset]{pst-solides3d}{r0}{\def\pst@solides@rO{#1}} % rayon interieur tore
55 \define@key[psset]{pst-solides3d}{r1}{\def\pst@solides@rI{#1}} % rayon moyen tore
56 \define@key[psset]{pst-solides3d}{R}{\def\pst@solides@R{#1}} % rayon moyen tore
57 \define@key[psset]{pst-solides3d}{r}{\def\pst@solides@r{#1}} % rayon de la sphere circonscrite
58 \define@key[psset]{pst-solides3d}{a}{\def\pst@solides@a{#1}} % arete du cube (1 du parallelepipede)
59 \define@key[psset]{pst-solides3d}{b}{\def\pst@solides@b{#1}} % arete 2 du parallelepipede
60 \define@key[psset]{pst-solides3d}{c}{\def\pst@solides@c{#1}} % arete 3 du parallelepipede
61 \define@key[psset]{pst-solides3d}{h}{\def\pst@solides@h{#1}} % hauteur du cylindre, du cone, du prisme
62 \define@key[psset]{pst-solides3d}{chanfreincoeff}{\def\pst@solides@chanfreincoeff{#1}} % coeff de chanfreinage
63 \define@key[psset]{pst-solides3d}{trunccoeff}{\def\pst@solides@trunccoeff{#1}} % coeff de troncature
64 \define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage
65 \define@key[psset]{pst-solides3d}{dualregcoeff}{\def\pst@solides@dualregcoeff{#1}} % coeff de dual
66 \define@key[psset]{pst-solides3d}{intersectiontype}{\def\pst@solides@intersectiontype{#1}} %
67 %
68 %% les affectations par defaut
69 \psset[pst-solides3d]{R=4,r1=4,r0=1.5,r=2,no=0,a=4,b=a,c=a,h=6,phi=0,theta=90,resolution=36,%
70 trunccoeff=.25,chanfreincoeff=.8,affinagecoeff=.8,dualregcoeff=1,intersectiontype=-1}
71 %
72 %%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%%
73 %
74 \define@key[psset]{pst-solides3d}{base}{\def\pst@solides@base{#1}} % base du prisme
75 \psset[pst-solides3d]{base=-1 -1 1 -1 0 1}% coordonnees d'un triangle, base triangulaire par defaut
76 \define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme
77 \psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme
78 \define@key[psset]{pst-solides3d}{plansection}{\def\pst@solides@plansection{#1}} % le plan de section
79 \psset[pst-solides3d]{plansection=}% pas de section par defaut
80 \define@key[psset]{pst-solides3d}{plansepare}{\def\pst@solides@plansepare{#1}} % le plan de separation
81 \psset[pst-solides3d]{plansepare=}% pas de separation par defaut
82 \define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}%
83 \psset[pst-solides3d]{intersectionlinewidth=1}%
84 \define@key[psset]{pst-solides3d}{intersectioncolor}{\def\pst@solides@intersectioncolor{#1}}%
85 \psset[pst-solides3d]{intersectioncolor=(rouge)}%
86 \define@key[psset]{pst-solides3d}{intersectionplan}{\def\pst@solides@intersectionplan{#1}}%
87 \psset[pst-solides3d]{intersectionplan=[0 0 1 0]}%
88 \define@key[psset]{pst-solides3d}{definition}{\def\pst@solides@definition{#1}} %
89 \psset[pst-solides3d]{definition=}%
90 \define@key[psset]{pst-solides3d}{args}{\def\pst@solides@args{#1}} %
91 \psset[pst-solides3d]{args=}%
92 \define@key[psset]{pst-solides3d}{transform}{\def\pst@solides@transform{#1}} %
93 \psset[pst-solides3d]{transform=}%
94
95 \def\Section{%
96          R h 2 div neg % sommet 1
97          R h 2 div % sommet 2
98          r h 2 div % sommet 3
99          r h 2 div neg % sommet 4
100             }
101 \define@key[psset]{pst-solides3d}{section}{\def\pst@solides@section{#1}} % section de l'objet de revolution
102 \psset[pst-solides3d]{section=\Section}% coordonnees des sommets de la section
103
104 %% decalage pourle prisme
105 \define@key[psset]{pst-solides3d}{decal}{\def\pst@solides@decal{#1}}
106 \psset[pst-solides3d]{decal=-2}% decalage par defaut
107
108 % teinte des faces exterieures de l'objet a partir de PSTricks
109 % donnee par filcollor
110 % teinte des faces interieures de l'objet a partir de PSTricks
111 \define@key[psset]{pst-solides3d}{incolor}{\pst@getcolor{#1}\psincolor}
112 \psset[pst-solides3d]{incolor=green}
113 %
114 %% couleurs definies par l'utilisateur
115 \define@key[psset]{pst-solides3d}{color1}{\pst@getcolor{#1}\pscolora}
116 \psset[pst-solides3d]{color1=cyan}
117 %
118 \define@key[psset]{pst-solides3d}{color2}{\pst@getcolor{#1}\pscolorb}
119 \psset[pst-solides3d]{color2=magenta}
120 %
121 \define@key[psset]{pst-solides3d}{color3}{\pst@getcolor{#1}\pscolorc}
122 \psset[pst-solides3d]{color3=blue}
123 %
124 \define@key[psset]{pst-solides3d}{color4}{\pst@getcolor{#1}\pscolord}
125 \psset[pst-solides3d]{color4=red}
126 %
127 % resolution du trace
128 \newcount\test@mode
129 \define@key[psset]{pst-solides3d}{mode}{% resolution : mode=0,1,2, 3,4 ou 5
130   \test@mode=#1\relax%
131   \ifnum\test@mode>4%
132     \typeout{mode must be 0,1,2,3 or 4 and not `\the\test@mode'. Value 4 forced.}\test@mode=4%
133   \fi%
134 \edef\pst@solides@mode{\the\test@mode}}%
135 \psset[pst-solides3d]{mode=2}%
136 %
137 %%%%%%%%%%%%%%%%% variables booleennes %%%%%%%%%%%%%%%%%
138 %
139 %\define@boolkey[psset]{pst-solides3d}[Pst@]{SphericalCoor}[true]{%
140 %  \ifPst@SphericalCoor
141 %  \def\pst@solides@viewpoint{ 17.320509 45 35.264389 }%
142 %  \fi}
143 %\psset{SphericalCoor=false}
144 %
145 \define@boolkey[psset]{pst-solides3d}[Pst@]{isolatin}[false]{}
146 \psset{isolatin=true}
147 \define@boolkey[psset]{pst-solides3d}[Pst@]{affinagerm}[false]{}
148 \psset{affinagerm=true}
149 \define@boolkey[psset]{pst-solides3d}[Pst@]{chanfrein}[true]{}
150 \psset{chanfrein=false}
151 \define@boolkey[psset]{pst-solides3d}[Pst@]{grid}[false]{}
152 \psset{grid=true}
153 \define@boolkey[psset]{pst-solides3d}[Pst@]{dualreg}[true]{}
154 \psset{dualreg=false}
155 \define@boolkey[psset]{pst-solides3d}[Pst@]{geode}[true]{}
156 \psset{geode=false}
157 \define@boolkey[psset]{pst-solides3d}[Pst@]{hollow}[true]{}
158 \psset{hollow=false}
159 \define@boolkey[psset]{pst-solides3d}[Pst@]{biface}[true]{}
160 \psset{biface=true}%
161 \define@boolkey[psset]{pst-solides3d}[Pst@]{axesboxed}[true]{}
162 \psset{axesboxed=false}%
163 \define@boolkey[psset]{pst-solides3d}[Pst@]{planmarks}[true]{}
164 \psset{planmarks=false}%
165 \define@boolkey[psset]{pst-solides3d}[Pst@]{plangrid}[true]{}
166 \psset{plangrid=false}%
167 \define@boolkey[psset]{pst-solides3d}[Pst@]{showbase}[true]{}
168 \psset{showbase=false}%
169 \define@boolkey[psset]{pst-solides3d}[Pst@]{showBase}[true]{}
170 \psset{showBase=false}%
171 \define@boolkey[psset]{pst-solides3d}[Pst@]{deactivatecolor}[true]{}
172 \psset{deactivatecolor=false}%
173
174 %% faces a enlever
175 \define@key[psset]{pst-solides3d}{rm}{\def\pst@solides@CoordinatesRm{#1}}
176 \psset[pst-solides3d]{rm=}% pas de faces par defaut
177 %% nom de la variable de sauvegarde du solide considere
178 \define@key[psset]{pst-solides3d}{name}{\def\pst@solides@name{#1}}
179 \psset[pst-solides3d]{name=}% pas de nom par defaut
180 %% nom de la variable de sauvegarde du solide sur lequel on doit projeter
181 \define@key[psset]{pst-solides3d}{solidname}{\def\pst@solides@solidname{#1}}
182 \psset[pst-solides3d]{solidname=}% pas de nom par defaut
183 %% nom du fichier externe
184 \define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}}
185 \psset[pst-solides3d]{file=}% pas de fichier par defaut
186 %% nom de l'objet de type plan
187 \define@key[psset]{pst-solides3d}{planname}{\def\pst@solides@planname{#1}}
188 \psset[pst-solides3d]{planname=}% pas de nom par defaut
189 %% nom de l'objet a charger (load)
190 \define@key[psset]{pst-solides3d}{load}{\def\pst@solides@load{#1}}
191 \psset[pst-solides3d]{load=}% pas de load par defaut
192 %% couleur face pour affinage
193 \define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}}
194 \psset[pst-solides3d]{fcolor=}% pas de couleur par defaut
195 %% couleurs de faces isolees
196 \define@key[psset]{pst-solides3d}{fcol}{\def\pst@solides@fcol{#1}}
197 \psset[pst-solides3d]{fcol=}% pas de faces par defaut
198 %% les degrades ``hue''
199 \define@key[psset]{pst-solides3d}{hue}{\def\pst@solides@hue{#1}}
200 \psset[pst-solides3d]{hue=}% pas de degrade externe par defaut
201 \define@key[psset]{pst-solides3d}{inhue}{\def\pst@solides@inhue{#1}}
202 \psset[pst-solides3d]{inhue=}% pas de degrade interne par defaut
203 \define@key[psset]{pst-solides3d}{inouthue}{\def\pst@solides@inouthue{#1}}
204 \psset[pst-solides3d]{inouthue=}% pas de degrade total par defaut
205 %% definition des faces et des sommets d'un nouveau solide
206 \define@key[psset]{pst-solides3d}{sommets}{\def\pst@solides@sommets{#1}}
207 \psset[pst-solides3d]{sommets=}% pas de sommet par defaut
208 %% \define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}}
209 %% \psset[pst-solides3d]{faces=}% pas de face par defaut
210 \define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}}
211 \psset[pst-solides3d]{faces={}}% valeurs par defaut
212 %% numerotation des faces
213 \define@key[psset]{pst-solides3d}{numfaces}{\def\pst@solides@numfaces{#1}}
214 \psset[pst-solides3d]{numfaces=}% pas de numerotation par defaut
215 %% troncature des sommets
216 \define@key[psset]{pst-solides3d}{trunc}{\def\pst@solides@trunc{#1}}
217 \psset[pst-solides3d]{trunc=}% pas de troncature par defaut
218 %% affinage des faces
219 \define@key[psset]{pst-solides3d}{affinage}{\def\pst@solides@affinage{#1}}
220 \psset[pst-solides3d]{affinage=}% pas de affinage par defaut
221 %% numerotation des sommets
222 \define@key[psset]{pst-solides3d}{num}{\def\pst@solides@num{#1}}
223 \psset[pst-solides3d]{num=}% pas de numerotation defaut
224 %% pointage des sommets
225 \define@key[psset]{pst-solides3d}{show}{\def\pst@solides@show{#1}}
226 \psset[pst-solides3d]{show=}% pas de pointage par defaut
227 %% maillage de l'utilisateur
228 \define@key[psset]{pst-solides3d}{ngrid}{\def\pst@solides@ngrid{#1}}
229 \psset[pst-solides3d]{ngrid=}% pas de faces par defaut
230
231 % source de la lumiere :
232 \define@key[psset]{pst-solides3d}{lightsrc}{\def\pst@solides@CoordinatesLight{#1}}
233 \psset[pst-solides3d]{lightsrc=}% pas de coordonnees par defaut
234 % intensite de la lumiere
235 \define@key[psset]{pst-solides3d}{lightintensity}{\def\pst@solides@lightintensity{#1}}
236 \psset[pst-solides3d]{lightintensity=2}
237
238 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
239 %% Code \@for (Stolen from LaTeX file: latex.ltx)
240 %% thanks to Herbert Voss
241 \expandafter\ifx\csname @latexerr\endcsname\relax%      do we have LaTeX?
242   \immediate\write17{We are running tex and have to define some LaTeX commands ...}
243   \def\@fornoop#1\@@#2#3{}
244   \long\def\@for#1:=#2\do#3{%
245     \expandafter\def\expandafter\@fortmp\expandafter{#2}%
246     \ifx\@fortmp\@empty \else
247       \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
248   \long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
249       #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}
250   \long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
251     \expandafter\@fornoop \else
252       #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}%
253 \fi
254 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
255 %% Reservation des noms de macros
256 % #1=type de reservation (action, object...) associee a une liste qui
257 % doit forcement etre du type pst@solides@list@#1
258 \def\pst@solides@reservednames#1{%
259 \edef\@tempa{\csname pst@solides@list@#1\endcsname}
260 \@for \name:=\@tempa\do{%
261   \expandafter\def\csname pst@solides@#1@\name\endcsname{}%
262 }}
263 % type de dessin
264 \def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid,writeoff}
265 %% Reservation de macros correspondants aux actions
266 \pst@solides@reservednames{action}
267 \define@key[psset]{pst-solides3d}{action}{%
268   \ifcsname pst@solides@action@#1\endcsname
269     \def\pst@solides@action{#1}%
270   \else
271     \@pstrickserr{This action is not authorized, the procedure draw** is
272     chosen by default}{}%
273   \fi}
274 % type par defaut = faces vues remplies
275 \psset[pst-solides3d]{action=draw**}%
276 %
277 % choix de la police et de la taille des caracteres en cm !!
278 \define@key[psset]{pst-solides3d}{PSfont}{\def\pst@solides@PSfont{/#1 }}
279 \define@key[psset]{pst-solides3d}{fontsize}{\def\pst@solides@fontsize{#1 }}
280 \psset[pst-solides3d]{PSfont=Times-Roman,fontsize=10}
281
282 % nature de l'objet
283 \def\pst@solides@list@object{%
284 tore,cube,tetrahedron,octahedron,icosahedron,dodecahedron,sphere,%
285 cylindre,cylindrecreux,cone,conecreux,tronccone,troncconecreux,%
286 grille,prisme,anneau,parallelepiped,prismecreux,ruban,calottesphere,face,%
287 Surface,surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,%
288 surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,%
289 plan,offfile,geode,load,plantype,point,pie,droite,polygone,cercle,rightangle}
290 %
291 %% Reservation de macros correspondants aux objects
292 \pst@solides@reservednames{object}
293 \define@key[psset]{pst-solides3d}{object}{%
294  \ifcsname pst@solides@object@#1\endcsname
295    \def\psk@solides@object{pst-#1}%
296  \else
297     \@pstrickserr{The solid #1 is not defined, the solid by default is
298     drawn}{}%
299  \fi}
300 %% Ajout de solides  la liste des objets
301 \def\addtosolideslistobject#1{%
302 % ajouter les nouveaux objets  la liste
303 \expandafter\def\expandafter\pst@solides@list@object\expandafter%
304  {\pst@solides@list@object,#1}%
305 % Reserver le nom des nouveaux objets
306  \edef\@tempa{#1}%
307  \@for \name:=\@tempa\do{%
308   \expandafter\def\csname pst@solides@object@\name\endcsname{}%
309  }}
310 % solide par defaut
311 \psset[pst-solides3d]{object=tore}%
312 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
313 %
314 % pour le quadrillage 3d
315 \define@key[psset]{pst-solides3d}{spotX}{\def\pst@solides@@spotX{#1}}%
316 \define@key[psset]{pst-solides3d}{spotY}{\def\pst@solides@@spotY{#1}}%
317 \define@key[psset]{pst-solides3d}{spotZ}{\def\pst@solides@@spotZ{#1}}%
318 \define@key[psset]{pst-solides3d}{QZ}{\def\pst@solides@@QZ{#1}}%
319 \define@key[psset]{pst-solides3d}{Zmin}{\def\pst@solides@@Zmin{#1 }}%
320 \define@key[psset]{pst-solides3d}{Zmax}{\def\pst@solides@@Zmax{#1 }}%
321 \psset[pst-solides3d]{spotX=dr,spotY=dl,spotZ=l,QZ=0,Zmin=-4,Zmax=4}
322 % spotX, Y, Z vaut de 0 a 360 degres pour placer les valeurs correctement
323 % QZ translation du quadrillage suivant l'axe Oz
324
325 \define@key[psset]{pst-solides3d}{stepX}{\pst@getint{#1}\psk@solides@stepX}
326 \define@key[psset]{pst-solides3d}{stepY}{\pst@getint{#1}\psk@solides@stepY}
327 \define@key[psset]{pst-solides3d}{stepZ}{\pst@getint{#1}\psk@solides@stepZ}
328 \define@key[psset]{pst-solides3d}{ticklength}{\pst@checknum{#1}\psk@solides@ticklength}
329 %\define@key[psset]{pst-solides3d}{Dx}{\pst@checknum{#1}\psk@solides@Dx }
330 %\define@key[psset]{pst-solides3d}{Dy}{\pst@checknum{#1}\psk@solides@Dy }
331 %\define@key[psset]{pst-solides3d}{Dz}{\pst@checknum{#1}\psk@solides@Dz }
332 \psset[pst-solides3d]{stepX=1,stepY=1,stepZ=1,ticklength=0.2}% the step for the axes labels
333
334 \def\gridIIID{\pst@object{gridIIID}}
335 %% usage : \gridIIID[options](x_min,x_max)(y_min,y_max)
336 \def\gridIIID@i(#1,#2)(#3,#4){%
337   \@ifnextchar[{\gridIIID@ii(#1,#2)(#3,#4)}{\gridIIID@ii(#1,#2)(#3,#4)[2,2,3]}}
338 \def\gridIIID@ii(#1,#2)(#3,#4)[#5,#6,#7]{%
339   \pst@killglue%
340   \begingroup%
341   \use@par%
342   \psSolid[object=parallelepiped,
343     intersectiontype=-1,
344     a={#2 #1 sub},b={#4 #3 sub},
345     c={\pst@solides@@Zmax \pst@solides@@Zmin sub},
346     action=draw](0,0,\pst@solides@@Zmax \pst@solides@@Zmin add 2 div )%
347   \ifnum#1<0 \pst@cnta=-#1 \def\pst@minus{-}\else\pst@cnta=#1 \def\pst@minus{}\fi
348   \divide\pst@cnta by \psk@solides@stepX
349   \multido{\ix=\psk@solides@stepX+\psk@solides@stepX}{\pst@cnta}{%
350     \psPoint(\pst@minus\ix,#4,\pst@solides@@Zmin){X1}%
351     \psPoint(\pst@minus\ix,#4 \psk@solides@ticklength\space add,\pst@solides@@Zmin){X2}%
352     \psline(X1)(X2)%
353     \uput[\pst@solides@@spotX](X1){\small\pst@minus\ix}}%
354   \ifnum#2<0 \pst@cnta=-#2 \def\pst@minus{-}\else\pst@cnta=#2 \def\pst@minus{}\fi
355   \divide\pst@cnta by \psk@solides@stepX%
356   \advance\pst@cnta by \@ne
357   \multido{\ix=0+\psk@solides@stepX}{\the\pst@cnta}{%
358     \psPoint(\pst@minus\ix,#4,\pst@solides@@Zmin){X1}
359     \psPoint(\pst@minus\ix,#4 \psk@solides@ticklength\space add,\pst@solides@@Zmin){X2}
360     \psline(X1)(X2)
361     \uput[\pst@solides@@spotX](X1){\small\pst@minus\ix}}
362 %
363   \ifnum#3<0 \pst@cnta=-#3 \def\pst@minus{-}\else\pst@cnta=#3 \def\pst@minus{}\fi
364   \divide\pst@cnta by \psk@solides@stepY
365   \multido{\iy=\psk@solides@stepY+\psk@solides@stepY}{\pst@cnta}{%
366     \psPoint(#2,\pst@minus\iy,\pst@solides@@Zmin){Y1}
367     \psPoint(#2 \psk@solides@ticklength\space add,\pst@minus\iy,\pst@solides@@Zmin){Y2}
368     \psline(Y1)(Y2)
369     \uput[\pst@solides@@spotY](Y1){\small\pst@minus\iy}}
370   \ifnum#4<0 \pst@cnta=-#4 \def\pst@minus{-}\else\pst@cnta=#4 \def\pst@minus{}\fi
371   \divide\pst@cnta by \psk@solides@stepY
372   \advance\pst@cnta by \@ne
373   \multido{\iy=0+\psk@solides@stepY}{\pst@cnta}{%
374     \psPoint(#2,\pst@minus\iy,\pst@solides@@Zmin){Y1}
375     \psPoint(#2 \psk@solides@ticklength\space add,\pst@minus\iy,\pst@solides@@Zmin){Y2}
376     \psline(Y1)(Y2)
377     \uput[\pst@solides@@spotY](Y1){\small\pst@minus\iy}}
378 %
379   \pst@cnta=\pst@solides@@Zmin \pst@cntb=\pst@solides@@Zmax
380   \ifnum\pst@cnta=\pst@cntb\else% same z values?
381     \pst@cnta=\pst@solides@@Zmin
382     \ifnum\pst@cnta<0 \pst@cnta=-\pst@cnta \def\pst@minus{-}
383     \else\def\pst@minus{}\fi%
384     \divide\pst@cnta by \psk@solides@stepZ
385     \multido{\iz=\psk@solides@stepZ+\psk@solides@stepZ}{\pst@cnta}{%
386       \psPoint(#2,#3,\pst@minus\iz){Z1}
387       \psPoint(#2,#3 \psk@solides@ticklength\space sub,\pst@minus\iz){Z2}
388       \psline(Z1)(Z2)
389       \uput[\pst@solides@@spotZ](Z1){\small\pst@minus\iz}}
390     \pst@cnta=\pst@solides@@Zmax %
391     \ifnum\pst@cnta<0 \pst@cnta=-\pst@pst@cnta \def\pst@minus{-}
392     \else\def\pst@minus{}\fi%
393     \divide\pst@cnta by \psk@solides@stepZ
394     \advance\pst@cnta by \@ne
395     \multido{\iz=0+\psk@solides@stepZ}{\pst@cnta}{%
396       \psPoint(#2,#3,\pst@minus\iz){Z1}
397       \psPoint(#2,#3 \psk@solides@ticklength\space sub,\pst@minus\iz){Z2}
398       \psline(Z1)(Z2)
399       \uput[\pst@solides@@spotZ](Z1){\small\pst@minus\iz}}
400   \fi
401 %
402   \psPoint(0,0,\pst@solides@@Zmax #7 add){Z'}
403   \psPoint(#2 #5 add,0,0){X'}
404   \psPoint(0,#4 #6 add, 0){Y'}
405   \psPoint(0,0,\pst@solides@@Zmax){Z}
406   \psPoint(#2,0,0){X}
407   \psPoint(0,#4,0){Y}
408   \psPoint(0,0,0){O}
409   \uput[\pst@solides@@spotY](X'){$x$}
410   \uput[\pst@solides@@spotX](Y'){$y$}
411   \uput[u](Z'){$z$}
412   \ifPst@showOrigin
413     \psline[linestyle=dashed](O)(X)
414     \psline[linestyle=dashed](O)(Y)
415     \psline[linestyle=dashed](O)(Z)
416   \fi
417 %\psset{linewidth=2\pslinewidth}
418   \psline{->}(Z)(Z')\psline{->}(Y)(Y')\psline{->}(X)(X')
419   \endgroup%
420   \ignorespaces%
421 }
422
423 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
424 %% code insere dans le .ps
425 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
426 %%
427 \pst@def{optionssolides}<%
428 /PSfont {\pst@solides@PSfont} def
429 /pst@fill { \psk@opacityalpha .setopacityalpha fill } def
430 /strokeopacity \psk@opacityalpha def
431 /fillopacity \psk@opacityalpha def
432 /xunit {\pst@number\psunit } def
433 %% /cm {\pst@number\psunit mul} def
434 %% /cm_1 {\pst@number\psunit div} def
435 /decal \pst@solides@decal\space def % decalage
436 /viewpointXYZ {\pst@solides@viewpoint} def
437 /Decran \pst@solides@Decran\space def % distance de l'ecran
438 %
439 /RotX \psk@solides@RotX\space def
440 /RotY \psk@solides@RotY\space def
441 /RotZ \psk@solides@RotZ\space def
442 %
443 /fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def
444 %
445 /projectionsifacevisible \ifPst@visibility true \else false \fi def
446 %
447 /R \pst@solides@R\space def % pour le tore
448 /r1 \pst@solides@rI\space def % pour le tore
449 /r0 \pst@solides@rO\space def % pour le tore
450 /resolution \pst@solides@resolution\space def % pour le nb de points par courbe
451 /phi \pst@solides@phi\space def % pour la calotte spherique
452 /theta \pst@solides@theta\space def % pour la calotte spherique
453 /r \pst@solides@r\space def % rayon sphere circonscrite
454 /a \pst@solides@a\space def % arete du cube (1 du parallelepipede)
455 /b \pst@solides@b\space def % arete 2 du parallelepipede
456 /c \pst@solides@c\space def % arete 3 du parallelepipede
457 /h \pst@solides@h\space def % hauteur du cylindre, du cone, du prisme
458 /trunccoeff \pst@solides@trunccoeff\space def % coeff de troncature
459 /chanfreincoeff \pst@solides@chanfreincoeff\space def % coeff de chanfreinage
460 /affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage
461 /dualregcoeff \pst@solides@dualregcoeff\space def % coeff de dual
462 /solidintersectiontype \pst@solides@intersectiontype\space def % type d'intersection
463 /section {\pst@solides@section} def % section de l'objet de revolution
464 /base [ \pst@solides@base ] def
465 /solidintersectionlinewidth [ \pst@solides@intersectionlinewidth ] def
466 /solidintersectioncolor [ \pst@solides@intersectioncolor ] def
467 /solidintersectionplan [ \pst@solides@intersectionplan ] def
468 /axe  { \pst@solides@axe } def
469 /plansection  [ \pst@solides@plansection ] def
470 \ifx\pst@solides@function\@empty\else
471   /function  (\pst@solides@function) def
472 \fi
473 %
474 /definition  (\pst@solides@definition) def
475 /args  { \pst@solides@args} def
476 /Mode \pst@solides@mode\space def % resolution du trace
477 /lightintensity \pst@solides@lightintensity\space def % intensite de la lumiere
478 %
479 /solidlinewidth {\pst@number\pslinewidth} def
480 /linecolor  {\pst@usecolor\pslinecolor} def
481 /linestyle  {\pslinestyle} def
482 /fillcolor  {\pst@usecolor\psfillcolor currentrgbcolor} def
483 /fillincolor  {\pst@usecolor\psincolor currentrgbcolor} def
484 %
485 /color1 {\pst@usecolor\pscolora } def
486 /color2 {\pst@usecolor\pscolorb } def
487 /color3 {\pst@usecolor\pscolorc } def
488 /color4 {\pst@usecolor\pscolord } def
489 %
490 /range [ \pst@solides@range ] def
491 /action (\pst@solides@action) def
492 /texte (\pst@solides@text) def
493 /pos (\pst@solides@pos) def
494 /proj-fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def
495 %
496 \ifx\pst@solides@CoordinatesLight\@empty\else
497   /lightsrc {\pst@solides@CoordinatesLight} def
498 \fi
499 %
500 /rmfaces [\pst@solides@CoordinatesRm] def
501 %
502 \ifx\pst@solides@plansepare\@empty\else
503   /plansepare {\pst@solides@plansepare} def
504 \fi
505 %
506 \ifx\pst@solides@transform\@empty\else
507   /pst-transformoption { \pst@solides@transform} def
508 \fi
509 %
510 \ifx\pst@solides@name\@empty\else
511   /solidname (\pst@solides@name) def
512 \fi
513 \ifx\pst@solides@file\@empty\else
514   /solidfilename (\pst@solides@file) def
515 \fi
516 %
517 \ifx\pst@solides@planname\@empty\else
518   /solidplanname (\pst@solides@planname) def
519 \fi
520 %
521 \ifx\pst@solides@load\@empty\else
522   /solidloadname {\pst@solides@load} def
523 \fi
524 %
525 \ifx\pst@solides@fcolor\@empty\else
526   /solidfcolor (\pst@solides@fcolor) def
527 \fi
528 %
529 /fcol [\pst@solides@fcol] def
530 /solidhue [\pst@solides@hue] def
531 /solidinouthue [\pst@solides@inouthue] def
532 /solidinhue [\pst@solides@inhue] def
533 /origin {\pst@solides@origin} def
534 %
535 %%
536 %% /solidhue \ifPst@hue true \else false \fi def
537 %
538 /sommets [\pst@solides@sommets] def
539 /faces [\pst@solides@faces] def
540 /solidshow [\pst@solides@show] def
541 /solidnum [\pst@solides@num] def
542 /solidnumf [\pst@solides@numfaces] def
543 /solidtrunc [\pst@solides@trunc] def
544 /solidaffinage [\pst@solides@affinage] def
545 /ngrid [\pst@solides@ngrid] def
546 %
547 /isolatin \ifPst@isolatin true \else false \fi def
548 /affinagerm \ifPst@affinagerm true \else false \fi def
549 /chanfrein \ifPst@chanfrein true \else false \fi def
550 /solidgrid \ifPst@grid true \else false \fi def
551 /solidplanmarks \ifPst@planmarks true \else false \fi def
552 /solidplangrid \ifPst@plangrid true \else false \fi def
553 /solidshowbase3d \ifPst@showBase true \else false \fi def
554 /activationgestioncouleurs \ifPst@deactivatecolor false \else true \fi def
555 /solidshowbase \ifPst@showbase true \else false \fi def
556 /soliddualreg \ifPst@dualreg true \else false \fi def
557 /solidgeode \ifPst@geode true \else false \fi def
558 /solidhollow \ifPst@hollow true \else</