Initialisation du projet pst-solides3d.git (SVN revision 142)
[pst-solides3d.git] / pst-solides3d.tex
1 %%
2 %% COPYRIGHT 2008-2010 by Manuel Luque, Arnaud Schmittbuhl,
3 %% Jean-Paul Vignault, Herbert Voss.
4 %%
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.
12 %%
13 %% This work has the LPPL maintenance status "maintained".
14 %
15 %% This work consists of the file pstricks.tex, PostScript macros
16 %% for Generic TeX.
17 %% See the PSTricks User's Guide for description.
18 %
19 % etex detection by looking for the \ifcsname macro
20 \expandafter\ifx\csname ifcsname\endcsname\relax
21 \newlinechar`\^^J
22 \message{^^J*****************************************}
23 \message{etex is needed to work with pst-solides3d}
24 \message{*****************************************}
25 \catcode`\ =11\relax
26 \Compile With etex Please
27 \fi
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
35 % JPV & ML & AS & HV
36 \def\fileversion{4.24}
37 \def\filedate{2011/07/13}
38 \message{`PSTSOLIDESIIID' v\fileversion, \filedate}
39 %
40 \pstheader{pst-solides3d.pro}
41
42 \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
43 \pst@addfams{pst-solides3d}
44 \SpecialCoor
45 %
46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
47 %% Definition des differentes variables pour PSTricks
48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
49 %
50 %%%%%%%%%%%%%%%%% variables numeriques %%%%%%%%%%%%%%%%%
51 %
52 % point de vue et rotations de l'objet
53 % distance de l'ecran a l'observateur
54 %
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}} %
80 %
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}
84 %
85 %%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%%
86 %
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=}%
111
112 \def\Sol@Section{%
113 R h 2 div neg % sommet 1
114 R h 2 div % sommet 2
115 r h 2 div % sommet 3
116 r h 2 div neg % sommet 4
117 }
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
120
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
124
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}
130 %
131 %% couleurs definies par l'utilisateur
132 \define@key[psset]{pst-solides3d}{color1}{\pst@getcolor{#1}\pscolora}
133 \psset[pst-solides3d]{color1=cyan}
134 %
135 \define@key[psset]{pst-solides3d}{color2}{\pst@getcolor{#1}\pscolorb}
136 \psset[pst-solides3d]{color2=magenta}
137 %
138 \define@key[psset]{pst-solides3d}{color3}{\pst@getcolor{#1}\pscolorc}
139 \psset[pst-solides3d]{color3=blue}
140 %
141 \define@key[psset]{pst-solides3d}{color4}{\pst@getcolor{#1}\pscolord}
142 \psset[pst-solides3d]{color4=red}
143 %
144 % resolution du trace
145 \newcount\test@mode
146 \define@key[psset]{pst-solides3d}{mode}{% resolution : mode=0,1,2, 3,4 ou 5
147 \test@mode=#1\relax%
148 \ifnum\test@mode>4%
149 \typeout{mode must be 0,1,2,3 or 4 and not `\the\test@mode'. Value 4 forced.}\test@mode=4%
150 \fi%
151 \edef\pst@solides@mode{\the\test@mode}}%
152 \psset[pst-solides3d]{mode=2}%
153 %
154 %%%%%%%%%%%%%%%%% variables booleennes %%%%%%%%%%%%%%%%%
155 %
156 %\define@boolkey[psset]{pst-solides3d}[Pst@]{SphericalCoor}[true]{%
157 % \ifPst@SphericalCoor
158 % \def\pst@solides@viewpoint{ 17.320509 45 35.264389 }%
159 % \fi}
160 %\psset{SphericalCoor=false}
161 %
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]{}
169 \psset{grid=true}
170 \define@boolkey[psset]{pst-solides3d}[Pst@]{dualreg}[true]{}
171 \psset{dualreg=false}
172 \define@boolkey[psset]{pst-solides3d}[Pst@]{geode}[true]{}
173 \psset{geode=false}
174 \define@boolkey[psset]{pst-solides3d}[Pst@]{hollow}[true]{}
175 \psset{hollow=false}
176 \define@boolkey[psset]{pst-solides3d}[Pst@]{biface}[true]{}
177 \psset{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}%
192
193 %% faces a enlever
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
251
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}
258
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{}%
266 }}
267 % type de dessin
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}%
274 \else
275 \@pstrickserr{This action is not authorized, the procedure draw** is
276 chosen by default}{}%
277 \fi}
278 % type par defaut = faces vues remplies
279 \psset[pst-solides3d]{action=draw**}%
280 %
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}
285
286 % nature de l'objet
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}
294 %
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}%
300 \else
301 \@pstrickserr{The solid #1 is not defined, the solid by default is
302 drawn}{}%
303 \fi}
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
310 \edef\@tempa{#1}%
311 \@for \name:=\@tempa\do{%
312 \expandafter\def\csname pst@solides@object@\name\endcsname{}%
313 }}
314 % solide par defaut
315 \psset[pst-solides3d]{object=tore}%
316 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
317 %
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
328
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
337
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]{%
343 \pst@killglue%
344 \addbefore@par{planmarks}%
345 \begingroup%
346 \use@par%
347 \psSolid[object=parallelepiped,
348 intersectiontype=-1,
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 )%
352 \ifPst@planmarks
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}%
358 \psline(X1)(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}
366 \psline(X1)(X2)
367 \uput[\pst@solides@@spotX](X1){\pst@solides@axesIIID@emph\pst@minus\ix}}
368 %
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}
374 \psline(Y1)(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}
382 \psline(Y1)(Y2)
383 \uput[\pst@solides@@spotY](Y1){\pst@solides@axesIIID@emph\pst@minus\iy}}
384 %
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}
394 \psline(Z1)(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}
404 \psline(Z1)(Z2)
405 \uput[\pst@solides@@spotZ](Z1){\pst@solides@axesIIID@emph\pst@minus\iz}}
406 \fi
407 \fi% \ifPst@planmarks
408 %
409 \ifPst@showAxes
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}
414 \psPoint(#2,0,0){X}
415 \psPoint(0,#4,0){Y}
416 \psPoint(0,0,0){O}
417 \uput[\pst@solides@@spotY](X'){$x$}
418 \uput[\pst@solides@@spotX](Y'){$y$}
419 \uput[u](Z'){$z$}
420 \ifPst@showOrigin
421 \psline[linestyle=dashed](O)(X)
422 \psline[linestyle=dashed](O)(Y)
423 \psline[linestyle=dashed](O)(Z)
424 \fi
425 %\psset{linewidth=2\pslinewidth}
426 \psline{->}(Z)(Z')\psline{->}(Y)(Y')\psline{->}(X)(X')
427 \fi%
428 \endgroup%
429 \ignorespaces%
430 }
431 %
432 \@ifundefined{pst@linetype}{\def\pst@linetype{0}}{}% preventing errors hv 2009-07-03
433 %
434 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
435 %% code insere dans le .ps
436 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
437 %%
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
449 %
450 /RotX \psk@solides@RotX\space def
451 /RotY \psk@solides@RotY\space def
452 /RotZ \psk@solides@RotZ\space def
453 %
454 /fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def
455 %
456 /projectionsifacevisible \ifPst@visibility true \else false \fi def
457 %
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
483 %
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
490 %
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
496 %
497 /color1 {\pst@usecolor\pscolora } def
498 /color2 {\pst@usecolor\pscolorb } def
499 /color3 {\pst@usecolor\pscolorc } def
500 /color4 {\pst@usecolor\pscolord } def
501 %
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
507 %
508 \ifx\pst@solides@CoordinatesLight\@empty\else /lightsrc {\pst@solides@CoordinatesLight} def \fi
509 %
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
518 %
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
524 %
525 %% /solidhue \ifPst@hue true \else false \fi def
526 %
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
536 %
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
550 %
551 %% /solidnum \ifPst@num true \else false \fi def
552 %
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
557 % CoefficientsMT
558 XpointVue YpointVue ZpointVue /viewpoint defpoint3d
559 >
560
561 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
562 %% la macro \psSolid
563 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
564
565 \define@boolkey[psset]{pst-solides3d}[Pst@]{solidmemory}[true]{}
566 \psset{solidmemory=false}
567 %
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}
571 %
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}
577 \def\psSolid@iv#1{%
578 \pst@killglue%
579 \ifPst@solidmemory\begingroup\use@par\else\begin@ClosedObj\fi%
580 \addto@pscode{
581 \tx@setTransparency
582 1 setlinejoin
583 \tx@optionssolides
584 SolidesDict begin
585 #1
586 /CZ exch def
587 /CY exch def
588 /CX exch def
589 % nature du solide
590 \psk@solides@object\space
591 end
592 }% fin du code ps
593 \ifPst@solidmemory\endgroup\else\end@ClosedObj\fi%
594 \ignorespaces}
595
596
597 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
598 %% la macro \codejps
599 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
600 \def\codejps#1{{%
601 \define@key[psset]{pst-solides3d}{object}{\def\psk@solides@object{#1}}%
602 \psSolid[object={#1} exec](0,0,0)}}%
603
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
611 % suivie
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
615 \begin@SpecialObj
616 \pnode(!
617 \tx@optionssolides
618 SolidesDict begin
619 #1 RotX RotY RotZ rotateOpoint3d
620 #2 #3 #4 translatepoint3d
621 3dto2d cm_1 exch cm_1 exch
622 end){#5}%
623 \end@SpecialObj
624 }\ignorespaces}
625
626 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
627 %% la macro \psPoint
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
633 % \begin@SpecialObj
634 \pnode(!
635 \tx@optionssolides
636 SolidesDict begin
637 #1 #2 #3
638 3dto2d cm_1 exch cm_1 exch
639 end){#4}%
640 % \end@SpecialObj
641 }\ignorespaces%
642 }
643
644 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
645 %% Vecteur normal a un plan
646 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
647 \def\Normale{\pst@object{Normale}}
648 \def\Normale@i(#1,#2,#3){%
649 % #1 rayon
650 % #2 longitude
651 % #3 latitude
652 \pst@killglue%
653 \begingroup%
654 \use@par%
655 \pstVerb{/latitude #3 def
656 /longitude #2 def
657 /Rayon #1 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)
663 \endgroup%
664 \ignorespaces%
665 }
666 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
667 %% les axes IIId
668 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
669 %% axisemph
670
671 \define@boolkey[psset]{pst-solides3d}[Pst@]{showOrigin}[true]{}
672 \define@boolkey[psset]{pst-solides3d}[Pst@]{mathLabel}[true]{}
673 \psset[pst-solides3d]{showOrigin,mathLabel}%
674
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}}
679
680 \define@key[psset]{pst-solides3d}{axisnames}{\expandafter\pst@solides@axisnames@i#1,,,\@nil}%
681 \psset[pst-solides3d]{axisnames={x,y,z}}
682
683 \define@key[psset]{pst-solides3d}{axisemph}{\def\pst@solides@axesIIID@emph{#1}}
684 \psset[pst-solides3d]{axisemph=}
685
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
690 \pst@killglue%
691 \begingroup%
692 \addbefore@par{arrows=->}%
693 \use@par%
694 \psPoint(0,0,0){O}
695 \psPoint(#1,0,0){X}
696 \psPoint(0,#2,0){Y}
697 \psPoint(0,0,#3){Z}
698 \psPoint(#4,0,0){X'}
699 \psPoint(0,#5,0){Y'}
700 \psPoint(0,0,#6){Z'}
701 \psPoint(#4 \pst@number\pslabelsep \pst@number\psunit div add,0, 0)
702 {Xname}
703 \psPoint(0, #5 \pst@number\pslabelsep \pst@number\psunit div add, 0)
704 {Yname}
705 \psPoint(0, 0, #6 \pst@number\pslabelsep \pst@number\psunit div add)
706 {Zname}
707 \ifPst@showOrigin
708 \psline[linestyle=dashed,arrows=-](O)(X)
709 \psline[linestyle=dashed,arrows=-](O)(Y)
710 \psline[linestyle=dashed,arrows=-](O)(Z)
711 \fi
712 \psline(X)(X')
713 \psline(Y)(Y')
714 \psline(Z)(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}
718 \endgroup%
719 \ignorespaces%
720 }
721
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}
733 \pst@killglue%
734 \begingroup%
735 \psset{axisemph=\small,planmarks,#1}%
736 \init@pscode%
737 \addto@pscode{
738 1 setlinejoin
739 \tx@optionssolides
740 SolidesDict begin
741 /CX 0 def /CY 0 def /CZ 0 def
742 /base [ #2 #4 #3 #5 ] def
743 \ifPst@algebraic
744 /fonction (#6) tx@AlgToPs begin AlgToPs end cvx def
745 \else
746 /fonction { #6 } def
747 \fi
748 /f {2 dict begin
749 /y exch def
750 /x exch def
751 fonction end
752 } def
753 \if@star pst-Surface* \else pst-Surface \fi
754 end
755 }% fin du code ps
756 \@starfalse
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
761 \psk@fillstyle
762 \pst@stroke
763 \ifpsdoubleline \pst@doublestroke \fi
764 \ifshowpoints\pst@OpenShowPoints\fi
765 \use@pscode%
766 \fi%
767 \endgroup%
768 \ignorespaces}
769 %
770 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
771 %% la macro \defFunction
772 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
773 \def\defFunction{\pst@object{defFunction}}%
774 \def\defFunction@i#1(#2)#3#4#5{%
775 \pst@killglue
776 \global\Pst@solidmemorytrue
777 \begingroup
778 \use@par%
779 \defFunction@ii{#2}\edef\@tempa{\the\toks@}%
780 \ifPst@algebraic
781 \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
785 \codejps{%
786 /#1 { 3 dict begin \@tempa \the\toks@
787 gere_pst-deffunction end } def }% 20080625
788 \else
789 \codejps{%
790 /#1 { 3 dict begin \the\toks@ #3 #4 #5
791 gere_pst-deffunction end } def }% 20080625
792 \fi
793 \endgroup}%
794 %
795 \def\defFunction@ii#1{\defFunction@iii#1,,,\end}%
796 \def\defFunction@iii#1,#2,#3,#4\end{%
797 \toks@={}%
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}%
806 }%
807 \def\store@toks@after#1{%
808 \edef\@tmpPSDefns{\the\toks@ (#1) tx@AlgToPs begin AlgToPs end cvx }%
809 \global\toks@=\expandafter{\@tmpPSDefns}%
810 }
811 %
812 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
813 %% la macro de projection
814 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
815
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}
821 % origine du plan
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 }%
836 % texte a projeter
837 \define@key[psset]{pst-solides3d}{text}{\def\pst@solides@text{#1}}
838 \psset[pst-solides3d]{text=}% pas de texte par defaut
839 % plan de projection
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
845
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
870 >
871
872 %\makeatletter
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}%
879 \def\pst@tempA{#2}%
880 \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi%
881 \addto@pscode{%
882 \tx@optionssolides
883 SolidesDict begin
884 \tx@psProjection
885 /CX 0 def
886 /CY 0 def
887 /CZ 0 def
888 #1/xorigine exch def
889 \ifx\pst@tempA\@empty
890 /yorigine xorigine def
891 /xorigine exch def\space\else
892 \pst@tempA\space /yorigine exch def
893 \fi
894 % nature du solide : texte, chemin, courbe
895 gsave proj-\psk@solides@object\space
896 end
897 }%<- fin du code ps
898 \psk@fillstyle
899 \pst@stroke
900 \addto@pscode{grestore newpath}%
901 \ifPst@solidmemory\else\end@ClosedObj\fi
902 }}%
903 %\makeatother
904 %
905 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
906 %% \psLineIIID est
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 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
910
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}}%
915 %
916 \def\psLineIIID{\NormalIIID@Coor\pst@object{lineIIID}}
917 \def\lineIIID@i{%
918 \pst@killglue%
919 \pst@getarrows{%
920 \begin@OpenObj%
921 \pst@getcoors[\lineIIID@ii%
922 }%
923 }
924 \def\lineIIID@ii{%
925 \addto@pscode{%
926 \tx@optionssolides
927 SolidesDict begin
928 counttomark
929 /n exch def /n3 n 3 div cvi def
930 n3 {
931 n -3 roll
932 3dto2d
933 xunit mul exch xunit mul exch
934 /n n 1 sub def
935 } repeat
936 end
937 \pst@cp\space \psline@iii\space \tx@Line
938 }%
939 \end@OpenObj%
940 \ignorespaces%
941 \SpecialCoor%
942 }
943
944 \def\psPolygonIIID{\NormalIIID@Coor\pst@object{polygonIIID}}
945 \def\polygonIIID@i{%
946 \pst@killglue%
947 \pst@getarrows{%
948 \begin@ClosedObj%
949 \pst@getcoors[\polygonIIID@ii%
950 }%
951 }
952 \def\polygonIIID@ii{%
953 \addto@pscode{%
954 \tx@optionssolides
955 SolidesDict begin
956 counttomark
957 /n exch def /n3 n 3 div cvi def
958 n3 {
959 n -3 roll
960 3dto2d
961 xunit mul exch xunit mul exch
962 /n n 1 sub def
963 } repeat
964 end
965 \pst@cp\space \psline@iii\space \tx@Polygon
966 }%
967 \end@ClosedObj%
968 \ignorespaces%
969 \SpecialCoor%
970 }
971 %
972 \def\psResetSolidKeys{%
973 \psset[pst-solides3d]{%
974 action=draw**,%
975 affinage=,% pas de affinage par defaut
976 affinagerm=true,
977 args=,%
978 axe=0 0 1,% vecteur definissant la direction de l'axe du prisme
979 axesboxed=false,%
980 axisemph=,
981 axisnames={x,y,z},
982 base=-1 -1 1 -1 0 1,% coordonnees d'un triangle, base triangulaire par defaut
983 biface=true,%
984 chanfrein=false,
985 color1=cyan,
986 color2=magenta,
987 color3=blue,
988 color4=red,
989 deactivatecolor=false,%
990 decal=-2,% decalage par defaut
991 definition=,%
992 dualreg=false,
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
998 geode=false,
999 grid=true,
1000 hollow=false,
1001 hue=,% pas de degrade externe par defaut
1002 incolor=green,
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],%
1008 isolatin=true,
1009 lightintensity=2,
1010 lightsrc=,% pas de coordonnees par defaut
1011 load=,% pas de load par defaut
1012 mathLabel,
1013 mode=2,%
1014 name=,% pas de nom par defaut
1015 ngrid=,% pas de faces par defaut
1016 normal=0 0 1,
1017 numfaces=,
1018 numsep=15pt,% pas de numerotation par defaut
1019 num=,% pas de numerotation defaut
1020 object=tore,%
1021 origine=0 0 0,%
1022 path=newpath 0 0 moveto,% valeur par defaut
1023 plangrid=false,%
1024 planmarks=false,%
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
1037 showbase=false,%
1038 showBase=false,%
1039 showAxes=true,
1040 showOrigin,
1041 show=,% pas de pointage par defaut
1042 solidmemory=false,
1043 solidname=,% pas de nom par defaut
1044 sommets=,% pas de sommet par defaut
1045 spotX=dr,
1046 spotY=dl,
1047 spotZ=l,
1048 QZ=0,
1049 Zmin=-4,
1050 Zmax=4,
1051 stepX=1,
1052 stepY=1,
1053 stepZ=1,
1054 ticklength=0.2,% the step for the axes labels
1055 tablez=,%
1056 text=,% pas de texte par defaut
1057 transform=,%
1058 trunc=,% pas de troncature par defaut
1059 viewpoint=10 10 10,% coordonnees cartesiennes
1060 visibility=true,
1061 zcolor=}
1062 }
1063 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1064 \catcode`\@=\PstAtCode\relax
1065 %
1066 \endinput

Licence Creative Commons Les fichiers de Syracuse sont mis à disposition (sauf mention contraire) selon les termes de la
Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International.