2 %% COPYRIGHT 2008-2010 by Manuel Luque, Arnaud Schmittbuhl,
3 %% Jean-Paul Vignault, Herbert Voss.
5 %% This work may be distributed and/or modified under the
6 %% conditions of the LaTeX Project Public License, either version 1.3
7 %% of this license or (at your option) any later version.
8 %% The latest version of this license is in
9 %% http://www.latex-project.org/lppl.txt
10 %% and version 1.3 or later is part of all distributions of LaTeX
11 %% version 2003/12/01 or later.
13 %% This work has the LPPL maintenance status "maintained".
15 %% This work consists of the file pstricks.tex, PostScript macros
17 %% See the PSTricks User's Guide for description.
19 % etex detection by looking for the \ifcsname macro
20 \expandafter\ifx\csname ifcsname
\endcsname\relax
22 \message{^^J*****************************************
}
23 \message{etex is needed to work with pst-solides3d
}
24 \message{*****************************************
}
26 \Compile With etex Please
28 \csname PSTSOLIDESIIIDLoaded
\endcsname
29 \let\PSTSOLIDESIIIDLoaded\endinput
30 % Requires PSTricks, pst-xkey and pst-node packages
31 \ifx\PSTricksLoaded\endinput\else\input pstricks.tex
\fi
32 \ifx\PSTnodesLoaded\endinput\else\input pst-node
\fi
33 \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey
\fi
34 \ifx\MultidoLoaded\endinput\else \input multido.tex
\fi
36 \def\fileversion{4.24}
37 \def\filedate{2011/
07/
13}
38 \message{`PSTSOLIDESIIID' v
\fileversion,
\filedate}
40 \pstheader{pst-solides3d.pro
}
42 \edef\PstAtCode{\the\catcode`\@
} \catcode`\@=
11\relax
43 \pst@addfams
{pst-solides3d
}
46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 %% Definition des differentes variables pour PSTricks
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 %%%%%%%%%%%%%%%%% variables numeriques %%%%%%%%%%%%%%%%%
52 % point de vue et rotations de l'objet
53 % distance de l'ecran a l'observateur
55 \define@key
[psset
]{pst-solides3d
}{viewpoint
}{\def\pst@solides@viewpoint
{#1}}% position de l'observateur
56 \psset[pst-solides3d
]{viewpoint=
10 10 10}% coordonnees cartesiennes
57 \define@key
[psset
]{pst-solides3d
}{Decran
}{\def\pst@solides@Decran
{#1}}% distance de l'ecran
58 \define@key
[psset
]{pst-solides3d
}{RotX
}{\def\psk@solides@RotX
{#1}}% rotation autour de Ox en degres
59 \define@key
[psset
]{pst-solides3d
}{RotY
}{\def\psk@solides@RotY
{#1}}% rotation autour de Oy en degres
60 \define@key
[psset
]{pst-solides3d
}{RotZ
}{\def\psk@solides@RotZ
{#1}}% rotation autour de Oz en degres
61 \psset[pst-solides3d
]{RotZ=
0,RotX=
0,RotY=
0,Decran=
50}% valeurs par defaut
62 % parametres propres a chaque objet
63 \define@key
[psset
]{pst-solides3d
}{resolution
}{\def\pst@solides@resolution
{#1}} % nb points par courbe
64 \define@key
[psset
]{pst-solides3d
}{no
}{\def\pst@solides@no
{#1}} % numero face du solide
65 \define@key
[psset
]{pst-solides3d
}{phi
}{\def\pst@solides@phi
{#1}} % angle calotte sphere
66 \define@key
[psset
]{pst-solides3d
}{theta
}{\def\pst@solides@theta
{#1}} % angle calotte sphere
67 \define@key
[psset
]{pst-solides3d
}{r0
}{\def\pst@solides@rO
{#1}} % rayon interieur tore
68 \define@key
[psset
]{pst-solides3d
}{r1
}{\def\pst@solides@rI
{#1}} % rayon moyen tore
69 \define@key
[psset
]{pst-solides3d
}{R
}{\def\pst@solides@R
{#1}} % rayon moyen tore
70 \define@key
[psset
]{pst-solides3d
}{r
}{\def\pst@solides@r
{#1}} % rayon de la sphere circonscrite
71 \define@key
[psset
]{pst-solides3d
}{a
}{\def\pst@solides@a
{#1}} % arete du cube (1 du parallelepipede)
72 \define@key
[psset
]{pst-solides3d
}{b
}{\def\pst@solides@b
{#1}} % arete 2 du parallelepipede
73 \define@key
[psset
]{pst-solides3d
}{c
}{\def\pst@solides@c
{#1}} % arete 3 du parallelepipede
74 \define@key
[psset
]{pst-solides3d
}{h
}{\def\pst@solides@h
{#1}} % hauteur du cylindre, du cone, du prisme
75 \define@key
[psset
]{pst-solides3d
}{chanfreincoeff
}{\def\pst@solides@chanfreincoeff
{#1}} % coeff de chanfreinage
76 \define@key
[psset
]{pst-solides3d
}{trunccoeff
}{\def\pst@solides@trunccoeff
{#1}} % coeff de troncature
77 \define@key
[psset
]{pst-solides3d
}{affinagecoeff
}{\def\pst@solides@affinagecoeff
{#1}} % coeff de affinage
78 \define@key
[psset
]{pst-solides3d
}{dualregcoeff
}{\def\pst@solides@dualregcoeff
{#1}} % coeff de dual
79 \define@key
[psset
]{pst-solides3d
}{intersectiontype
}{\def\pst@solides@intersectiontype
{#1}} %
81 %% les affectations par defaut
82 \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,
%
83 trunccoeff=
.25,chanfreincoeff=
.8,affinagecoeff=
.8,dualregcoeff=
1,intersectiontype=-
1}
85 %%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%%
87 \define@key
[psset
]{pst-solides3d
}{base
}{\def\pst@solides@base
{#1}} % base du prisme
88 \psset[pst-solides3d
]{base=-
1 -
1 1 -
1 0 1}% coordonnees d'un triangle, base triangulaire par defaut
89 \define@key
[psset
]{pst-solides3d
}{axe
}{\def\pst@solides@axe
{#1}} % axe du prisme
90 \psset[pst-solides3d
]{axe=
0 0 1}% vecteur definissant la direction de l'axe du prisme
91 \define@key
[psset
]{pst-solides3d
}{plansection
}{\def\pst@solides@plansection
{#1}} % le plan de section
92 \psset[pst-solides3d
]{plansection=
}% pas de section par defaut
93 \define@key
[psset
]{pst-solides3d
}{plansepare
}{\def\pst@solides@plansepare
{#1}} % le plan de separation
94 \psset[pst-solides3d
]{plansepare=
}% pas de separation par defaut
95 \define@key
[psset
]{pst-solides3d
}{intersectionlinewidth
}{\def\pst@solides@intersectionlinewidth
{#1}}%
96 \psset[pst-solides3d
]{intersectionlinewidth=
1}%
97 \define@key
[psset
]{pst-solides3d
}{intersectioncolor
}{\def\pst@solides@intersectioncolor
{#1}}%
98 \psset[pst-solides3d
]{intersectioncolor=(rouge)
}%
99 \define@key
[psset
]{pst-solides3d
}{intersectionplan
}{\def\pst@solides@intersectionplan
{#1}}%
100 \psset[pst-solides3d
]{intersectionplan=
[0 0 1 0]}%
101 \define@key
[psset
]{pst-solides3d
}{definition
}{\def\pst@solides@definition
{#1}} %
102 \psset[pst-solides3d
]{definition=
}%
103 \define@key
[psset
]{pst-solides3d
}{args
}{\def\pst@solides@args
{#1}} %
104 \psset[pst-solides3d
]{args=
}%
105 \define@key
[psset
]{pst-solides3d
}{transform
}{\def\pst@solides@transform
{#1}} %
106 \psset[pst-solides3d
]{transform=
}%
107 \define@key
[psset
]{pst-solides3d
}{zcolor
}{\def\pst@solides@zcolor
{#1}} %
108 \psset[pst-solides3d
]{zcolor=
}%
109 \define@key
[psset
]{pst-solides3d
}{tablez
}{\def\pst@solides@tablez
{#1}} %
110 \psset[pst-solides3d
]{tablez=
}%
113 R h
2 div neg
% sommet 1
116 r h
2 div neg
% sommet 4
118 \define@key
[psset
]{pst-solides3d
}{section
}{\def\pst@solides@section
{#1}} % section de l'objet de revolution
119 \psset[pst-solides3d
]{section=
\Sol@Section
}% coordonnees des sommets de la section
121 %% decalage pourle prisme
122 \define@key
[psset
]{pst-solides3d
}{decal
}{\def\pst@solides@decal
{#1}}
123 \psset[pst-solides3d
]{decal=-
2}% decalage par defaut
125 % teinte des faces exterieures de l'objet a partir de PSTricks
126 % donnee par filcollor
127 % teinte des faces interieures de l'objet a partir de PSTricks
128 \define@key
[psset
]{pst-solides3d
}{incolor
}{\pst@getcolor
{#1}\psincolor}
129 \psset[pst-solides3d
]{incolor=green
}
131 %% couleurs definies par l'utilisateur
132 \define@key
[psset
]{pst-solides3d
}{color1
}{\pst@getcolor
{#1}\pscolora}
133 \psset[pst-solides3d
]{color1=cyan
}
135 \define@key
[psset
]{pst-solides3d
}{color2
}{\pst@getcolor
{#1}\pscolorb}
136 \psset[pst-solides3d
]{color2=magenta
}
138 \define@key
[psset
]{pst-solides3d
}{color3
}{\pst@getcolor
{#1}\pscolorc}
139 \psset[pst-solides3d
]{color3=blue
}
141 \define@key
[psset
]{pst-solides3d
}{color4
}{\pst@getcolor
{#1}\pscolord}
142 \psset[pst-solides3d
]{color4=red
}
144 % resolution du trace
146 \define@key
[psset
]{pst-solides3d
}{mode
}{% resolution : mode=0,1,2, 3,4 ou 5
149 \typeout{mode must be
0,
1,
2,
3 or
4 and not `
\the\test@mode'. Value
4 forced.
}\test@mode=
4%
151 \edef\pst@solides@mode
{\the\test@mode
}}%
152 \psset[pst-solides3d
]{mode=
2}%
154 %%%%%%%%%%%%%%%%% variables booleennes %%%%%%%%%%%%%%%%%
156 %\define@boolkey[psset]{pst-solides3d}[Pst@]{SphericalCoor}[true]{%
157 % \ifPst@SphericalCoor
158 % \def\pst@solides@viewpoint{ 17.320509 45 35.264389 }%
160 %\psset{SphericalCoor=false}
162 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{isolatin
}[false
]{}
163 \psset{isolatin=true
}
164 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{affinagerm
}[false
]{}
165 \psset{affinagerm=true
}
166 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{chanfrein
}[true
]{}
167 \psset{chanfrein=false
}
168 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{grid
}[false
]{}
170 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{dualreg
}[true
]{}
171 \psset{dualreg=false
}
172 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{geode
}[true
]{}
174 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{hollow
}[true
]{}
176 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{biface
}[true
]{}
178 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{axesboxed
}[true
]{}
179 \psset{axesboxed=false
}%
180 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{showAxes
}[true
]{}
181 \psset{showAxes=true
}%
182 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{planmarks
}[true
]{}
183 \psset{planmarks=false
}%
184 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{plangrid
}[true
]{}
185 \psset{plangrid=false
}%
186 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{showbase
}[true
]{}
187 \psset{showbase=false
}%
188 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{showBase
}[true
]{}
189 \psset{showBase=false
}%
190 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{deactivatecolor
}[true
]{}
191 \psset{deactivatecolor=false
}%
194 \define@key
[psset
]{pst-solides3d
}{rm
}{\def\pst@solides@CoordinatesRm
{#1}}
195 \psset[pst-solides3d
]{rm=
}% pas de faces par defaut
196 %% nom de la variable de sauvegarde du solide considere
197 \define@key
[psset
]{pst-solides3d
}{name
}{\def\pst@solides@name
{#1}}
198 \psset[pst-solides3d
]{name=
}% pas de nom par defaut
199 %% nom de la variable de sauvegarde du solide sur lequel on doit projeter
200 \define@key
[psset
]{pst-solides3d
}{solidname
}{\def\pst@solides@solidname
{#1}}
201 \psset[pst-solides3d
]{solidname=
}% pas de nom par defaut
202 %% nom du fichier externe
203 \define@key
[psset
]{pst-solides3d
}{file
}{\def\pst@solides@file
{#1}}
204 \psset[pst-solides3d
]{file=
}% pas de fichier par defaut
205 %% nom de l'objet de type plan
206 \define@key
[psset
]{pst-solides3d
}{planname
}{\def\pst@solides@planname
{#1}}
207 \psset[pst-solides3d
]{planname=
}% pas de nom par defaut
208 %% nom de l'objet a charger (load)
209 \define@key
[psset
]{pst-solides3d
}{load
}{\def\pst@solides@load
{#1}}
210 \psset[pst-solides3d
]{load=
}% pas de load par defaut
211 %% couleur face pour affinage
212 \define@key
[psset
]{pst-solides3d
}{fcolor
}{\def\pst@solides@fcolor
{#1}}
213 \psset[pst-solides3d
]{fcolor=
}% pas de couleur par defaut
214 %% couleurs de faces isolees
215 \define@key
[psset
]{pst-solides3d
}{fcol
}{\def\pst@solides@fcol
{#1}}
216 \psset[pst-solides3d
]{fcol=
}% pas de faces par defaut
217 %% les degrades ``hue''
218 \define@key
[psset
]{pst-solides3d
}{hue
}{\def\pst@solides@hue
{#1}}
219 \psset[pst-solides3d
]{hue=
}% pas de degrade externe par defaut
220 \define@key
[psset
]{pst-solides3d
}{inhue
}{\def\pst@solides@inhue
{#1}}
221 \psset[pst-solides3d
]{inhue=
}% pas de degrade interne par defaut
222 \define@key
[psset
]{pst-solides3d
}{inouthue
}{\def\pst@solides@inouthue
{#1}}
223 \psset[pst-solides3d
]{inouthue=
}% pas de degrade total par defaut
224 %% definition des faces et des sommets d'un nouveau solide
225 \define@key
[psset
]{pst-solides3d
}{sommets
}{\def\pst@solides@sommets
{#1}}
226 \psset[pst-solides3d
]{sommets=
}% pas de sommet par defaut
227 %% \define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}}
228 %% \psset[pst-solides3d]{faces=}% pas de face par defaut
229 \define@key
[psset
]{pst-solides3d
}{faces
}{\def\pst@solides@faces
{#1}}
230 \psset[pst-solides3d
]{faces=
{}}% valeurs par defaut
231 %% numerotation des faces
232 \define@key
[psset
]{pst-solides3d
}{numfaces
}{\def\pst@solides@numfaces
{#1}}
233 \define@key
[psset
]{pst-solides3d
}{numsep
}{\pst@getlength
{#1}\pst@solides@numsep
}
234 \psset[pst-solides3d
]{numfaces=,numsep=
15pt
}% pas de numerotation par defaut
235 %% troncature des sommets
236 \define@key
[psset
]{pst-solides3d
}{trunc
}{\def\pst@solides@trunc
{#1}}
237 \psset[pst-solides3d
]{trunc=
}% pas de troncature par defaut
238 %% affinage des faces
239 \define@key
[psset
]{pst-solides3d
}{affinage
}{\def\pst@solides@affinage
{#1}}
240 \psset[pst-solides3d
]{affinage=
}% pas de affinage par defaut
241 %% numerotation des sommets
242 \define@key
[psset
]{pst-solides3d
}{num
}{\def\pst@solides@num
{#1}}
243 \psset[pst-solides3d
]{num=
}% pas de numerotation defaut
244 %% pointage des sommets
245 \define@key
[psset
]{pst-solides3d
}{show
}{\def\pst@solides@show
{#1}}
246 \psset[pst-solides3d
]{show=
}% pas de pointage par defaut
247 %% maillage de l'utilisateur
248 \define@key
[psset
]{pst-solides3d
}{ngrid
}{\def\pst@solides@ngrid
{#1}}
249 \psset[pst-solides3d
]{ngrid=
}% pas de faces par defaut
250 %\psset[pst-solides3d]{ngrid=20 20}% pas de faces par defaut
252 % source de la lumiere :
253 \define@key
[psset
]{pst-solides3d
}{lightsrc
}{\def\pst@solides@CoordinatesLight
{#1}}
254 \psset[pst-solides3d
]{lightsrc=
}% pas de coordonnees par defaut
255 % intensite de la lumiere
256 \define@key
[psset
]{pst-solides3d
}{lightintensity
}{\def\pst@solides@lightintensity
{#1}}
257 \psset[pst-solides3d
]{lightintensity=
2}
259 %% Reservation des noms de macros
260 % #1=type de reservation (action, object...) associee a une liste qui
261 % doit forcement etre du type pst@solides@list@#1
262 \def\pst@solides@reservednames
#1{%
263 \edef\@tempa
{\csname pst@solides@list@
#1\endcsname}
264 \@for
\name:=\@tempa
\do{%
265 \expandafter\def\csname pst@solides@
#1@
\name\endcsname{}%
268 \def\pst@solides@list@action
{none,draw,draw*,draw**,writeobj,writesolid,writeoff
}
269 %% Reservation de macros correspondants aux actions
270 \pst@solides@reservednames
{action
}
271 \define@key
[psset
]{pst-solides3d
}{action
}{%
272 \ifcsname pst@solides@action@
#1\endcsname
273 \def\pst@solides@action
{#1}%
275 \@pstrickserr
{This action is not authorized, the procedure draw** is
276 chosen by default
}{}%
278 % type par defaut = faces vues remplies
279 \psset[pst-solides3d
]{action=draw**
}%
281 % choix de la police et de la taille des caracteres en cm !!
282 \define@key
[psset
]{pst-solides3d
}{PSfont
}{\def\pst@solides@PSfont
{/
#1 }}
283 \define@key
[psset
]{pst-solides3d
}{fontsize
}{\def\pst@solides@fontsize
{#1 }}
284 \psset[pst-solides3d
]{PSfont=Times-Roman,fontsize=
10}
287 \def\pst@solides@list@object
{%
288 tore,cube,tetrahedron,octahedron,icosahedron,dodecahedron,sphere,
%
289 cylindre,cylindrecreux,cone,conecreux,tronccone,troncconecreux,
%
290 grille,prisme,anneau,parallelepiped,prismecreux,ruban,calottesphere,face,
%
291 Surface,Surface*,surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,
%
292 surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,
%
293 plan,offfile,geode,load,plantype,point,pie,droite,polygone,cercle,rightangle
}
295 %% Reservation de macros correspondants aux objects
296 \pst@solides@reservednames
{object
}
297 \define@key
[psset
]{pst-solides3d
}{object
}{%
298 \ifcsname pst@solides@object@
#1\endcsname
299 \def\psk@solides@object
{pst-
#1}%
301 \@pstrickserr
{The solid
#1 is not defined, the solid by default is
304 %% Ajout de solides la liste des objets
305 \def\addtosolideslistobject#1{%
306 % ajouter les nouveaux objets la liste
307 \expandafter\def\expandafter\pst@solides@list@object
\expandafter%
308 {\pst@solides@list@object,
#1}%
309 % Reserver le nom des nouveaux objets
311 \@for
\name:=\@tempa
\do{%
312 \expandafter\def\csname pst@solides@object@
\name\endcsname{}%
315 \psset[pst-solides3d
]{object=tore
}%
316 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
318 % pour le quadrillage 3d
319 \define@key
[psset
]{pst-solides3d
}{spotX
}{\def\pst@solides@@spotX
{#1}}%
320 \define@key
[psset
]{pst-solides3d
}{spotY
}{\def\pst@solides@@spotY
{#1}}%
321 \define@key
[psset
]{pst-solides3d
}{spotZ
}{\def\pst@solides@@spotZ
{#1}}%
322 \define@key
[psset
]{pst-solides3d
}{QZ
}{\def\pst@solides@@QZ
{#1}}%
323 \define@key
[psset
]{pst-solides3d
}{Zmin
}{\def\pst@solides@@Zmin
{#1 }}%
324 \define@key
[psset
]{pst-solides3d
}{Zmax
}{\def\pst@solides@@Zmax
{#1 }}%
325 \psset[pst-solides3d
]{spotX=dr,spotY=dl,spotZ=l,QZ=
0,Zmin=-
4,Zmax=
4}
326 % spotX, Y, Z vaut de 0 a 360 degres pour placer les valeurs correctement
327 % QZ translation du quadrillage suivant l'axe Oz
329 \define@key
[psset
]{pst-solides3d
}{stepX
}{\pst@getint
{#1}\psk@solides@stepX
}
330 \define@key
[psset
]{pst-solides3d
}{stepY
}{\pst@getint
{#1}\psk@solides@stepY
}
331 \define@key
[psset
]{pst-solides3d
}{stepZ
}{\pst@getint
{#1}\psk@solides@stepZ
}
332 \define@key
[psset
]{pst-solides3d
}{ticklength
}{\pst@checknum
{#1}\psk@solides@ticklength
}
333 %\define@key[psset]{pst-solides3d}{Dx}{\pst@checknum{#1}\psk@solides@Dx }
334 %\define@key[psset]{pst-solides3d}{Dy}{\pst@checknum{#1}\psk@solides@Dy }
335 %\define@key[psset]{pst-solides3d}{Dz}{\pst@checknum{#1}\psk@solides@Dz }
336 \psset[pst-solides3d
]{stepX=
1,stepY=
1,stepZ=
1,ticklength=
0.2}% the step for the axes labels
338 \def\gridIIID{\pst@object
{gridIIID
}}
339 %% usage : \gridIIID[options](x_min,x_max)(y_min,y_max)
340 \def\gridIIID@i(
#1,
#2)(
#3,
#4)
{%
341 \@ifnextchar
[{\gridIIID@ii(
#1,
#2)(
#3,
#4)
}{\gridIIID@ii(
#1,
#2)(
#3,
#4)
[2,
2,
3]}}
342 \def\gridIIID@ii(
#1,
#2)(
#3,
#4)
[#5,
#6,
#7]{%
344 \addbefore@par
{planmarks
}%
347 \psSolid[object=parallelepiped,
349 a=
{#2 #1 sub
},b=
{#4 #3 sub
},
350 c=
{\pst@solides@@Zmax
\space \pst@solides@@Zmin
\space sub
},
351 action=draw
](
#1 #2 add
2 div,
#3 #4 add
2 div,
\pst@solides@@Zmax
\pst@solides@@Zmin add
2 div )
%
353 \ifnum#1<
0 \pst@cnta=-
#1 \def\pst@minus
{-
}\else\pst@cnta=
#1 \def\pst@minus
{}\fi
354 \divide\pst@cnta by
\psk@solides@stepX
355 \multido{\ix=
\psk@solides@stepX+
\psk@solides@stepX
}{\pst@cnta
}{%
356 \psPoint(
\pst@minus
\ix,
#4,
\pst@solides@@Zmin)
{X1
}%
357 \psPoint(
\pst@minus
\ix,
#4 \psk@solides@ticklength
\space add,
\pst@solides@@Zmin)
{X2
}%
359 \uput[\pst@solides@@spotX
](X1)
{\pst@solides@axesIIID@emph
\pst@minus
\ix}}%
360 \ifnum#2<
0 \pst@cnta=-
#2 \def\pst@minus
{-
}\else\pst@cnta=
#2 \def\pst@minus
{}\fi
361 \divide\pst@cnta by
\psk@solides@stepX
%
362 \advance\pst@cnta by \@ne
363 \multido{\ix=
0+
\psk@solides@stepX
}{\the\pst@cnta
}{%
364 \psPoint(
\pst@minus
\ix,
#4,
\pst@solides@@Zmin)
{X1
}
365 \psPoint(
\pst@minus
\ix,
#4 \psk@solides@ticklength
\space add,
\pst@solides@@Zmin)
{X2
}
367 \uput[\pst@solides@@spotX
](X1)
{\pst@solides@axesIIID@emph
\pst@minus
\ix}}
369 \ifnum#3<
0 \pst@cnta=-
#3 \def\pst@minus
{-
}\else\pst@cnta=
#3 \def\pst@minus
{}\fi
370 \divide\pst@cnta by
\psk@solides@stepY
371 \multido{\iy=
\psk@solides@stepY+
\psk@solides@stepY
}{\pst@cnta
}{%
372 \psPoint(
#2,
\pst@minus
\iy,
\pst@solides@@Zmin)
{Y1
}
373 \psPoint(
#2 \psk@solides@ticklength
\space add,
\pst@minus
\iy,
\pst@solides@@Zmin)
{Y2
}
375 \uput[\pst@solides@@spotY
](Y1)
{\pst@solides@axesIIID@emph
\pst@minus
\iy}}
376 \ifnum#4<
0 \pst@cnta=-
#4 \def\pst@minus
{-
}\else\pst@cnta=
#4 \def\pst@minus
{}\fi
377 \divide\pst@cnta by
\psk@solides@stepY
378 \advance\pst@cnta by \@ne
379 \multido{\iy=
0+
\psk@solides@stepY
}{\pst@cnta
}{%
380 \psPoint(
#2,
\pst@minus
\iy,
\pst@solides@@Zmin)
{Y1
}
381 \psPoint(
#2 \psk@solides@ticklength
\space add,
\pst@minus
\iy,
\pst@solides@@Zmin)
{Y2
}
383 \uput[\pst@solides@@spotY
](Y1)
{\pst@solides@axesIIID@emph
\pst@minus
\iy}}
385 \pst@cnta=
\pst@solides@@Zmin
\pst@cntb=
\pst@solides@@Zmax
386 \ifnum\pst@cnta=
\pst@cntb
\else% same z values?
387 \pst@cnta=
\pst@solides@@Zmin
388 \ifnum\pst@cnta<
0 \pst@cnta=-
\pst@cnta
\def\pst@minus
{-
}
389 \else\def\pst@minus
{}\fi%
390 \divide\pst@cnta by
\psk@solides@stepZ
391 \multido{\iz=
\psk@solides@stepZ+
\psk@solides@stepZ
}{\pst@cnta
}{%
392 \psPoint(
#2,
#3,
\pst@minus
\iz)
{Z1
}
393 \psPoint(
#2,
#3 \psk@solides@ticklength
\space sub,
\pst@minus
\iz)
{Z2
}
395 \uput[\pst@solides@@spotZ
](Z1)
{\pst@solides@axesIIID@emph
\pst@minus
\iz}}
396 \pst@cnta=
\pst@solides@@Zmax
%
397 \ifnum\pst@cnta<
0 \pst@cnta=-
\pst@pst@cnta
\def\pst@minus
{-
}
398 \else\def\pst@minus
{}\fi%
399 \divide\pst@cnta by
\psk@solides@stepZ
400 \advance\pst@cnta by \@ne
401 \multido{\iz=
0+
\psk@solides@stepZ
}{\pst@cnta
}{%
402 \psPoint(
#2,
#3,
\pst@minus
\iz)
{Z1
}
403 \psPoint(
#2,
#3 \psk@solides@ticklength
\space sub,
\pst@minus
\iz)
{Z2
}
405 \uput[\pst@solides@@spotZ
](Z1)
{\pst@solides@axesIIID@emph
\pst@minus
\iz}}
407 \fi% \ifPst@planmarks
410 \psPoint(
0,
0,
\pst@solides@@Zmax
#7 add)
{Z'
}
411 \psPoint(
#2 #5 add,
0,
0)
{X'
}
412 \psPoint(
0,
#4 #6 add,
0)
{Y'
}
413 \psPoint(
0,
0,
\pst@solides@@Zmax)
{Z
}
417 \uput[\pst@solides@@spotY
](X')
{$x$
}
418 \uput[\pst@solides@@spotX
](Y')
{$y$
}
421 \psline[linestyle=dashed
](O)(X)
422 \psline[linestyle=dashed
](O)(Y)
423 \psline[linestyle=dashed
](O)(Z)
425 %\psset{linewidth=2\pslinewidth}
426 \psline{->
}(Z)(Z')
\psline{->
}(Y)(Y')
\psline{->
}(X)(X')
432 \@ifundefined
{pst@linetype
}{\def\pst@linetype
{0}}{}% preventing errors hv 2009-07-03
434 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
435 %% code insere dans le .ps
436 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
438 \pst@def
{optionssolides
}<
439 /PSfont
{\pst@solides@PSfont
} def
440 /pst@fill
{ \psk@opacityalpha .setopacityalpha fill
} def
441 /strokeopacity
\psk@opacityalpha def
442 /fillopacity
\psk@opacityalpha def
443 /xunit
{\pst@number
\psunit } def
444 %% /cm {\pst@number\psunit mul} def
445 %% /cm_1 {\pst@number\psunit div} def
446 /decal
\pst@solides@decal
\space def
% decalage
447 /viewpointXYZ
{ \pst@solides@viewpoint
} def
448 /Decran
\pst@solides@Decran
\space def
% distance de l'ecran
450 /RotX
\psk@solides@RotX
\space def
451 /RotY
\psk@solides@RotY
\space def
452 /RotZ
\psk@solides@RotZ
\space def
454 /fontsize
{\pst@solides@fontsize
\space \pst@number
\psunit mul
28.45 div
} bind def
456 /projectionsifacevisible
\ifPst@visibility true
\else false
\fi def
458 /R
\pst@solides@R
\space def
% pour le tore
459 /r1
\pst@solides@rI
\space def
% pour le tore
460 /r0
\pst@solides@rO
\space def
% pour le tore
461 %/resolution \pst@solides@resolution\space def % pour le nb de points par courbe
462 \pst@solides@resolution
\space setresolution
% ------ hv 20110713
463 /phi
\pst@solides@phi
\space def
% pour la calotte spherique
464 /theta
\pst@solides@theta
\space def
% pour la calotte spherique
465 /r
\pst@solides@r
\space def
% rayon sphere circonscrite
466 /a
\pst@solides@a
\space def
% arete du cube (1 du parallelepipede)
467 /b
\pst@solides@b
\space def
% arete 2 du parallelepipede
468 /c
\pst@solides@c
\space def
% arete 3 du parallelepipede
469 /h
\pst@solides@h
\space def
% hauteur du cylindre, du cone, du prisme
470 /trunccoeff
\pst@solides@trunccoeff
\space def
% coeff de troncature
471 /chanfreincoeff
\pst@solides@chanfreincoeff
\space def
% coeff de chanfreinage
472 /affinagecoeff
\pst@solides@affinagecoeff
\space def
% coeff de affinage
473 /dualregcoeff
\pst@solides@dualregcoeff
\space def
% coeff de dual
474 /solidintersectiontype
\pst@solides@intersectiontype
\space def
% type d'intersection
475 /section
{\pst@solides@section
} def
% section de l'objet de revolution
476 /base
[ \pst@solides@base
] def
477 /solidintersectionlinewidth
[ \pst@solides@intersectionlinewidth
] def
478 /solidintersectioncolor
[ \pst@solides@intersectioncolor
] def
479 /solidintersectionplan
[ \pst@solides@intersectionplan
] def
480 /axe
{ \pst@solides@axe
} def
481 /plansection
[ \pst@solides@plansection
] def
482 \ifx\pst@solides@function\@empty
\else /function (
\pst@solides@function) def
\fi
484 /definition (
\pst@solides@definition) def
485 /args
{ \pst@solides@args
} def
486 /Mode
\pst@solides@mode
\space def
% resolution du trace
487 /lightintensity
\pst@solides@lightintensity
\space def
% intensite de la lumiere
488 /tablez
[\pst@solides@tablez
] def
489 /zcolor
[\pst@solides@zcolor
] def
491 /solidlinewidth
{\pst@number
\pslinewidth} def
492 /linecolor
{\pst@usecolor
\pslinecolor} def
493 /linestyle
{\pslinestyle} def
494 /fillcolor
{\pst@usecolor
\psfillcolor currentrgbcolor
} def
495 /fillincolor
{\pst@usecolor
\psincolor currentrgbcolor
} def
497 /color1
{\pst@usecolor
\pscolora } def
498 /color2
{\pst@usecolor
\pscolorb } def
499 /color3
{\pst@usecolor
\pscolorc } def
500 /color4
{\pst@usecolor
\pscolord } def
502 /range
[ \pst@solides@range
] def
503 /action (
\pst@solides@action) def
504 /texte (
\pst@solides@text) def
505 /pos (
\pst@solides@pos) def
506 /proj-fontsize
{\pst@solides@fontsize
\space \pst@number
\psunit mul
28.45 div
} bind def
508 \ifx\pst@solides@CoordinatesLight\@empty
\else /lightsrc
{\pst@solides@CoordinatesLight
} def
\fi
510 /rmfaces
[\pst@solides@CoordinatesRm
] def
511 \ifx\pst@solides@plansepare\@empty
\else/plansepare
{\pst@solides@plansepare
} def
\fi
512 \ifx\pst@solides@transform\@empty
\else/pst-transformoption
{ \pst@solides@transform
} def
\fi
513 \ifx\pst@solides@name\@empty
\else/solidname (
\pst@solides@name) def
\fi
514 \ifx\pst@solides@file\@empty
\else/solidfilename (
\pst@solides@file) def
\fi
515 \ifx\pst@solides@planname\@empty
\else/solidplanname (
\pst@solides@planname) def
\fi
516 \ifx\pst@solides@load\@empty
\else/solidloadname
{\pst@solides@load
} def
\fi
517 \ifx\pst@solides@fcolor\@empty
\else/solidfcolor (
\pst@solides@fcolor) def
\fi
519 /fcol
[\pst@solides@fcol
] def
520 /solidhue
[\pst@solides@hue
] def
521 /solidinouthue
[\pst@solides@inouthue
] def
522 /solidinhue
[\pst@solides@inhue
] def
523 /origin
{\pst@solides@origin
} def
525 %% /solidhue \ifPst@hue true \else false \fi def
527 /sommets
[\pst@solides@sommets
] def
528 /faces
[\pst@solides@faces
] def
529 /solidshow
[\pst@solides@show
] def
530 /solidnum
[\pst@solides@num
] def
531 SolidesDict begin /solidnumsep
\pst@solides@numsep
\space def end
532 /solidnumf
[\pst@solides@numfaces
] def
533 /solidtrunc
[\pst@solides@trunc
] def
534 /solidaffinage
[\pst@solides@affinage
] def
535 /ngrid
[\pst@solides@ngrid
] def
537 /isolatin
\ifPst@isolatin true
\else false
\fi def
538 /affinagerm
\ifPst@affinagerm true
\else false
\fi def
539 /chanfrein
\ifPst@chanfrein true
\else false
\fi def
540 /solidgrid
\ifPst@grid true
\else false
\fi def
541 /solidplanmarks
\ifPst@planmarks true
\else false
\fi def
542 /solidplangrid
\ifPst@plangrid true
\else false
\fi def
543 /solidshowbase3d
\ifPst@showBase true
\else false
\fi def
544 /activationgestioncouleurs
\ifPst@deactivatecolor false
\else true
\fi def
545 /solidshowbase
\ifPst@showbase true
\else false
\fi def
546 /soliddualreg
\ifPst@dualreg true
\else false
\fi def
547 /solidgeode
\ifPst@geode true
\else false
\fi def
548 /solidhollow
\ifPst@hollow true
\else false
\fi def
549 /solidbiface
\ifPst@biface true
\else false
\fi def
551 %% /solidnum \ifPst@num true \else false \fi def
553 viewpointXYZ /ZpointVue ED /YpointVue ED /XpointVue ED
554 /THETA
{YpointVue XpointVue atan
} bind def
555 /PHI
{ZpointVue XpointVue dup mul YpointVue dup mul add sqrt atan
} bind def
556 /Dobs
{XpointVue dup mul YpointVue dup mul add ZpointVue dup mul add sqrt
} bind def
558 XpointVue YpointVue ZpointVue /viewpoint defpoint3d
561 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
563 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
565 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{solidmemory
}[true
]{}
566 \psset{solidmemory=false
}
568 \let\composeSolid\use@pscode
569 \let\endpspictureS@lid
\endpspicture% redefine \endpspicture (hv)
570 \def\endpspicture{\ifPst@solidmemory
\use@pscode
\fi\endpspictureS@lid
\global\Pst@solidmemoryfalse
}
572 \def\psSolid{\pst@object
{psSolid
}}
573 \def\psSolid@i
{\@ifnextchar(
{\psSolid@ii
}{\psSolid@iv
{ 0.
0.
0.
}}}
574 \def\psSolid@ii(
#1)
{\expandafter\psSolid@iii
#1,,,\@nil
}
575 \def\psSolid@iii
#1,
#2,
#3,
#4\@nil
{%
576 \ifx\relax#2\relax\psSolid@iv
{#1}\else\psSolid@iv
{#1 #2 #3}\fi}
579 \ifPst@solidmemory
\begingroup\use@par
\else\begin@ClosedObj
\fi%
590 \psk@solides@object
\space
593 \ifPst@solidmemory
\endgroup\else\end@ClosedObj
\fi%
597 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
599 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
601 \define@key
[psset
]{pst-solides3d
}{object
}{\def\psk@solides@object
{#1}}%
602 \psSolid[object=
{#1} exec
](
0,
0,
0)
}}%
604 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
605 %% la macro \psTransformPoint
606 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
607 % transformation d'un point
608 % \pstransformIIID[RotX=,...](x y z)(CX,CY,CZ)
609 % Rotation d'un point(x y z)
610 % autour des axes Ox, Oy et Oz
612 % de la translation au point (CX,CY,CZ)
613 \def\psTransformPoint{\def\pst@par
{}\pst@object
{psTransformPoint
}}
614 \def\psTransformPoint@i(
#1)(
#2,
#3,
#4)
#5{{% coordonnees cartesiennes
619 #1 RotX RotY RotZ rotateOpoint3d
620 #2 #3 #4 translatepoint3d
621 3dto2d cm_1 exch cm_1 exch
626 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
628 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
629 % placer un point en particulier
630 % \psPoint[options du point de vue](x y z)
631 \def\psPoint{\def\pst@par
{}\pst@object
{psPoint
}}
632 \def\psPoint@i(
#1,
#2,
#3)
#4{{% coordonnees cartesiennes
638 3dto2d cm_1 exch cm_1 exch
644 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
645 %% Vecteur normal a un plan
646 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
647 \def\Normale{\pst@object
{Normale
}}
648 \def\Normale@i(
#1,
#2,
#3)
{%
655 \pstVerb{/latitude
#3 def
658 /xP Rayon
#2 cos
#3 cos mul mul def
659 /yP Rayon
#2 sin
#3 cos mul mul def
660 /zP Rayon
#3 sin mul def
}%
661 \psSolid[object=vecteur,RotZ=
#2,RotY=-
#3,
662 args=
1.7 0 0](xP,yP,zP)
666 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
668 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
671 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{showOrigin
}[true
]{}
672 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{mathLabel
}[true
]{}
673 \psset[pst-solides3d
]{showOrigin,mathLabel
}%
675 \def\pst@solides@axisnames@i
#1,
#2,
#3,
#4\@nil
{%
676 \def\pst@solides@axesIIID@xname
{#1}
677 \def\pst@solides@axesIIID@yname
{#2}
678 \def\pst@solides@axesIIID@zname
{#3}}
680 \define@key
[psset
]{pst-solides3d
}{axisnames
}{\expandafter\pst@solides@axisnames@i
#1,,,\@nil
}%
681 \psset[pst-solides3d
]{axisnames=
{x,y,z
}}
683 \define@key
[psset
]{pst-solides3d
}{axisemph
}{\def\pst@solides@axesIIID@emph
{#1}}
684 \psset[pst-solides3d
]{axisemph=
}
686 \def\axesIIID{\pst@object
{axesIIID
}}
687 \def\axesIIID@i(
#1,
#2,
#3)
{%
688 \@ifnextchar(
{\axesIIID@ii(
#1,
#2,
#3)
}{\axesIIID@ii(
0,
0,
0)(
#1,
#2,
#3)
}}
689 \def\axesIIID@ii(
#1,
#2,
#3)(
#4,
#5,
#6)
{% axes 3d
692 \addbefore@par
{arrows=->
}%
701 \psPoint(
#4 \pst@number
\pslabelsep \pst@number
\psunit div add,
0,
0)
703 \psPoint(
0,
#5 \pst@number
\pslabelsep \pst@number
\psunit div add,
0)
705 \psPoint(
0,
0,
#6 \pst@number
\pslabelsep \pst@number
\psunit div add)
708 \psline[linestyle=dashed,arrows=-
](O)(X)
709 \psline[linestyle=dashed,arrows=-
](O)(Y)
710 \psline[linestyle=dashed,arrows=-
](O)(Z)
715 \rput(Xname)
{\ifPst@mathLabel$
\fi\pst@solides@axesIIID@emph
\pst@solides@axesIIID@xname
\ifPst@mathLabel$
\fi}
716 \rput(Yname)
{\ifPst@mathLabel$
\fi\pst@solides@axesIIID@emph
\pst@solides@axesIIID@yname
\ifPst@mathLabel$
\fi}
717 \rput(Zname)
{\ifPst@mathLabel$
\fi\pst@solides@axesIIID@emph
\pst@solides@axesIIID@zname
\ifPst@mathLabel$
\fi}
722 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
723 %% la macro \psSurface
724 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
725 \def\psSurface{\@ifnextchar*
{\@startrue
\psSurface@i
}{\@starfalse
\psSurface@i*
}}
726 \def\psSurface@i*
{\@ifnextchar
[{\psSurface@ii
}{\psSurface@ii
[]}}
727 \def\psSurface@ii
[#1](
#2,
#3)(
#4,
#5)
#6{%
728 %% \def\hue{0 1 #4 #2 sub \pst@solides@dx\space div
729 %% #5 #3 sub \pst@solides@dy\space div mul
730 %% {/iF ED iF [1 iF #4 #2 sub \pst@solides@dx\space div
731 %% #5 #3 sub \pst@solides@dy\space div
732 %% mul div sub 0.75 1] (sethsbcolor) astr2str} for}
735 \psset{axisemph=
\small,planmarks,
#1}%
741 /CX
0 def /CY
0 def /CZ
0 def
742 /base
[ #2 #4 #3 #5 ] def
744 /fonction (
#6) tx@AlgToPs begin AlgToPs end cvx def
753 \if@star pst-Surface*
\else pst-Surface
\fi
757 \ifPst@axesboxed
\gridIIID(
#2,
#4)(
#3,
#5)
\fi
758 \ifPst@solidmemory
\else%
759 \ifpsshadow \pst@closedshadow
\fi
760 \ifdim\psk@border
\p@>
\z@
\pst@addborder
\fi
763 \ifpsdoubleline \pst@doublestroke
\fi
764 \ifshowpoints\pst@OpenShowPoints
\fi
770 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
771 %% la macro \defFunction
772 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
773 \def\defFunction{\pst@object
{defFunction
}}%
774 \def\defFunction@i
#1(
#2)
#3#4#5{%
776 \global\Pst@solidmemorytrue
779 \defFunction@ii
{#2}\edef\@tempa
{\the\toks@
}%
782 \def\@tempb
{#3}\ifx\@tempb\@empty
\else\store@toks@after\@tempb
\fi
783 \def\@tempb
{#4}\ifx\@tempb\@empty
\else\store@toks@after\@tempb
\fi
784 \def\@tempb
{#5}\ifx\@tempb\@empty
\else\store@toks@after\@tempb
\fi
786 /
#1 { 3 dict begin \@tempa
\the\toks@
787 gere_pst-deffunction end
} def
}% 20080625
790 /
#1 { 3 dict begin
\the\toks@
#3 #4 #5
791 gere_pst-deffunction end
} def
}% 20080625
795 \def\defFunction@ii
#1{\defFunction@iii
#1,,,
\end}%
796 \def\defFunction@iii
#1,
#2,
#3,
#4\end{%
798 \def\arg@ii
{#1}\ifx\arg@ii\@empty
\else\store@toks@before
\arg@ii
\fi
799 \def\arg@ii
{#2}\ifx\arg@ii\@empty
\else\store@toks@before
\arg@ii
\fi
800 \def\arg@ii
{#3}\ifx\arg@ii\@empty
\else\store@toks@before
\arg@ii
\fi
801 \edef\@tmpPSDefns
{\the\toks@ mark
}% 20080625
802 \global\toks@=
\expandafter{\@tmpPSDefns
}}% 20080625
803 \def\store@toks@before
#1{%
804 \edef\@tmpPSDefns
{/
#1 exch def
\the\toks@
}%
805 \global\toks@=
\expandafter{\@tmpPSDefns
}%
807 \def\store@toks@after
#1{%
808 \edef\@tmpPSDefns
{\the\toks@ (
#1) tx@AlgToPs begin AlgToPs end cvx
}%
809 \global\toks@=
\expandafter{\@tmpPSDefns
}%
812 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
813 %% la macro de projection
814 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
816 %% creation des variables pour PSTricks
817 \define@boolkey
[psset
]{pst-solides3d
}[Pst@
]{visibility
}[false
]{}
818 \psset{visibility=true
}
819 \define@key
[psset
]{pst-solides3d
}{normal
}{\def\pst@solides@normal
{#1}}
820 \psset[pst-solides3d
]{normal=
0 0 1}
822 \define@key
[psset
]{pst-solides3d
}{origine
}{\def\pst@solides@origin
{#1}} % origine du plan
823 \psset[pst-solides3d
]{origine=
0 0 0 }%
824 %% le range pour les fonctions numeriques
825 \define@key
[psset
]{pst-solides3d
}{range
}{\def\pst@solides@range
{#1}}
826 \psset[pst-solides3d
]{range=-
5 5}% le range par defaut
827 %% le chemin a projeter
828 \define@key
[psset
]{pst-solides3d
}{path
}{\def\pst@solides@path
{#1}}%
829 \psset[pst-solides3d
]{path=newpath
0 0 moveto
}% valeur par defaut
830 %% fonctions utilisees
831 \define@key
[psset
]{pst-solides3d
}{function
}{\def\pst@solides@function
{#1}}%
832 \psset[pst-solides3d
]{function=
}% pas de valeur par defaut
833 % rotation du texte dans son plan
834 \define@key
[psset
]{pst-solides3d
}{RotationAngleText
}{\def\pst@solides@RotationAngleText
{#1}} % origine du plan
835 \psset[pst-solides3d
]{RotationAngleText=
0 }%
837 \define@key
[psset
]{pst-solides3d
}{text
}{\def\pst@solides@text
{#1}}
838 \psset[pst-solides3d
]{text=
}% pas de texte par defaut
840 \define@key
[psset
]{pst-solides3d
}{plan
}{\def\pst@solides@plan
{#1}}
841 \psset[pst-solides3d
]{plan=
}% pas de plan par defaut
842 % position du texte a projeter
843 \define@key
[psset
]{pst-solides3d
}{pos
}{\def\pst@solides@pos
{#1}}
844 \psset[pst-solides3d
]{pos=cc
}% centre par defaut
846 %% transcription et inclusion des variables dans le fichier postscript
847 \pst@def
{psProjection
}<
%
848 /projectionsifacevisible
\ifPst@visibility true
\else false
\fi def
849 /isolatin
\ifPst@isolatin true
\else false
\fi def
850 /solidlinewidth
{\pst@number
\pslinewidth} def
851 /PSfont
{\pst@solides@PSfont
} def
852 /normale
{\pst@solides@normal
} bind def
853 /fontsize
{\pst@solides@fontsize
\space \pst@number
\psunit mul
28.45 div
} bind def
854 /origin
{\pst@solides@origin
} def
855 /RotationAngleText
{\pst@solides@RotationAngleText
} def
856 /range
[ \pst@solides@range
] def
857 /path
{ \pst@solides@path
} def
858 /function
{ \pst@solides@function
} def
859 /texte (
\pst@solides@text) def
860 /pos (
\pst@solides@pos) def
861 /proj-definition (
\pst@solides@definition) def
862 /proj-args
{ \pst@solides@args
} def
863 /proj-action (
\pst@solides@action) def
864 \ifx\pst@solides@name\@empty
\else/projname (
\pst@solides@name) def
\fi
865 \ifx\pst@solides@plan\@empty
\else/planprojpst
\pst@solides@plan
\space def
\fi
866 \ifx\pst@solides@solidname\@empty
\else/solidprojname
{\pst@solides@solidname
\space} def
\fi
867 /noface
\pst@solides@no
\space def
% no de la face du solide
868 %/resolution \pst@solides@resolution\space def % pour le nb de points par courbe
869 \pst@solides@resolution
\space setresolution
% ------ hv 20110713
873 %% la macro de projection
874 \def\psProjection{\def\pst@par
{}\pst@object
{psProjection
}}
875 \def\psProjection@i
{\@ifnextchar(
{\psProjection@ii
}{\psProjection@ii(
0,
0)
}}
876 \def\psProjection@ii(
#1)
{\expandafter\psProjection@iii
#1,,\@nil
}
877 \def\psProjection@iii
#1,
#2,
#3\@nil
{{%
878 \addbefore@par
{pos=cc,range=
0 360}%
880 \ifPst@solidmemory
\use@par
\else\begin@ClosedObj
\fi%
889 \ifx\pst@tempA\@empty
890 /yorigine xorigine def
891 /xorigine exch def
\space\else
892 \pst@tempA
\space /yorigine exch def
894 % nature du solide : texte, chemin, courbe
895 gsave proj-
\psk@solides@object
\space
900 \addto@pscode
{grestore newpath
}%
901 \ifPst@solidmemory
\else\end@ClosedObj
\fi
905 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
907 %% adapt de la macro \pstThreeDLine du package pst-3dplot (H.Voss)
908 %% http://tug.ctan.org/tex-archive/graphics/pstricks/contrib/pst-3dplot
909 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
911 \def\cartesianIIID@coor
#1,
#2,
#3,
#4\@nil
{\edef\pst@coor
{#1 #2 #3 }}
912 \def\NormalIIID@Coor
{%
913 \def\pst@@getcoor#
#1{\pst@expandafter
\cartesianIIID@coor
{#
#1}, ,\@nil
}%
914 \def\psput@#
#1{\pst@@getcoor
{#
#1}\leavevmode\psput@cartesian
}}%
916 \def\psLineIIID{\NormalIIID@Coor
\pst@object
{lineIIID
}}
921 \pst@getcoors
[\lineIIID@ii
%
929 /n exch def /n3 n
3 div cvi def
933 xunit mul exch xunit mul exch
937 \pst@cp
\space \psline@iii
\space \tx@Line
944 \def\psPolygonIIID{\NormalIIID@Coor
\pst@object
{polygonIIID
}}
949 \pst@getcoors
[\polygonIIID@ii
%
952 \def\polygonIIID@ii
{%
957 /n exch def /n3 n
3 div cvi def
961 xunit mul exch xunit mul exch
965 \pst@cp
\space \psline@iii
\space \tx@Polygon
972 \def\psResetSolidKeys{%
973 \psset[pst-solides3d
]{%
975 affinage=,
% pas de affinage par defaut
978 axe=
0 0 1,
% vecteur definissant la direction de l'axe du prisme
982 base=-
1 -
1 1 -
1 0 1,
% coordonnees d'un triangle, base triangulaire par defaut
989 deactivatecolor=false,
%
990 decal=-
2,
% decalage par defaut
993 faces=
{},
% valeurs par defaut
994 fcolor=,
% pas de couleur par defaut
995 fcol=,
% pas de faces par defaut
996 file=,
% pas de fichier par defaut
997 function=,
% pas de valeur par defaut
1001 hue=,
% pas de degrade externe par defaut
1003 inhue=,
% pas de degrade interne par defaut
1004 inouthue=,
% pas de degrade total par defaut
1005 intersectioncolor=(rouge),
%
1006 intersectionlinewidth=
1,
%
1007 intersectionplan=
[0 0 1 0],
%
1010 lightsrc=,
% pas de coordonnees par defaut
1011 load=,
% pas de load par defaut
1014 name=,
% pas de nom par defaut
1015 ngrid=,
% pas de faces par defaut
1018 numsep=
15pt,
% pas de numerotation par defaut
1019 num=,
% pas de numerotation defaut
1022 path=newpath
0 0 moveto,
% valeur par defaut
1025 planname=,
% pas de nom par defaut
1026 plan=,
% pas de plan par defaut
1027 plansection=,
% pas de section par defaut
1028 plansepare=,
% pas de separation par defaut
1029 pos=cc,
% centre par defaut
1030 PSfont=Times-Roman,fontsize=
10,
1031 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,
%
1032 range=-
5 5,
% le range par defaut
1033 rm=,
% pas de faces par defaut
1034 RotationAngleText=
0,
%
1035 RotZ=
0,RotX=
0,RotY=
0,Decran=
50,
% valeurs par defaut
1036 section=
\Sol@Section,
% coordonnees des sommets de la section
1041 show=,
% pas de pointage par defaut
1043 solidname=,
% pas de nom par defaut
1044 sommets=,
% pas de sommet par defaut
1054 ticklength=
0.2,
% the step for the axes labels
1056 text=,
% pas de texte par defaut
1058 trunc=,
% pas de troncature par defaut
1059 viewpoint=
10 10 10,
% coordonnees cartesiennes
1063 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1064 \catcode`\@=
\PstAtCode\relax