Changeset 30
- Timestamp:
- 05/30/08 10:59:25 (6 months ago)
- Files:
-
- trunk/doc/par-affinage.tex (added)
- trunk/doc/par-chanfrein.tex (added)
- trunk/doc/par-changements.tex (modified) (1 diff)
- trunk/doc/par-courbeR3.tex (modified) (15 diffs)
- trunk/doc/par-geode.tex (added)
- trunk/doc/par-lignedeniveau.tex (modified) (1 diff)
- trunk/doc/par-objfile.tex (added)
- trunk/doc/par-offfile.tex (added)
- trunk/doc/par-opacity.tex (added)
- trunk/doc/par-plan.tex (added)
- trunk/doc/par-prisme.tex (modified) (2 diffs)
- trunk/doc/par-section.tex (added)
- trunk/doc/par-tronque.tex (added)
- trunk/doc/pst-solides3d-doc.tex (modified) (5 diffs)
- trunk/doc/pst-solides3d.tex (added)
- trunk/pst-solides3d.tex (modified) (9 diffs)
- trunk/solides.pro (modified) (18 diffs)
- trunk/tests/index.txt (modified) (1 diff)
- trunk/tests/test_03.pdf (modified) (previous)
- trunk/tests/test_03.tex (modified) (3 diffs)
- trunk/tests/test_10.pdf (modified) (previous)
- trunk/tests/test_10.tex (modified) (2 diffs)
- trunk/tests/test_11.tex (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/doc/par-changements.tex
r2 r30 1 \section {Changements par rapport à la version 2.0} 1 \section {Changements par rapport aux versions précédentes} 2 3 \subsection {Changements par rapport à la version 3.0} 4 5 \begin {itemize} 6 7 \item L'objet \texttt{courbe} utilise maintenant l'argument $r$. Pour 8 retrouver le comportement précédent, il faut spécifier $r=0$. 9 10 \item L'option \verb+resolution+ de l'objet \verb+courbe+ est 11 remplacée par l'option \verb+ngrid+ 12 13 \end {itemize} 14 15 \subsection {Changements par rapport à la version 2.0} 2 16 3 17 \begin {itemize} trunk/doc/par-courbeR3.tex
r2 r30 1 \section {Courbes de fonctions de $R$ vers $R^3$ }1 \section {Courbes de fonctions de $R$ vers $R^3$ -- Tubes} 2 2 3 3 %% \section{Fonctions R --> R\textsuperscript{3}} … … 35 35 \defFunction[algebraic]{helice}(t){3*cos(4*t)}{3*sin(4*t)}{t} 36 36 \psSolid[object=courbe, 37 r=0, 37 38 range=0 6, 38 39 linecolor=blue,linewidth=0.1, … … 49 50 \psSolid[object=courbe, 50 51 range=0 6, 52 r=0, 51 53 linecolor=blue, 52 54 resolution=360, … … 66 68 \psset{range=-4 4} 67 69 \psSolid[object=courbe,linewidth=0.1, 70 r=0, 68 71 linecolor=red, 69 72 resolution=360, … … 74 77 \defFunction{sinRad}(t){t}{t Sin 3 mul}{3} 75 78 \psSolid[object=courbe,linewidth=0.1, 79 r=0, 76 80 linecolor=blue, 77 81 resolution=30, … … 87 91 \psSolid[object=grille,base=-4 4 -4 4]% 88 92 \psSolid[object=courbe,linewidth=0.1, 93 r=0, 89 94 linecolor=red, 90 95 resolution=360, … … 93 98 \psSolid[object=grille,base=-4 4 -4 4](0,0,3) 94 99 \psSolid[object=courbe, 100 r=0, 95 101 linecolor=blue, 96 102 resolution=360, … … 114 120 \psset{range=0 8} 115 121 \psSolid[object=courbe, 122 r=0, 116 123 linecolor=blue, 117 124 linewidth=0.05, … … 120 127 function=helice_xy]% 121 128 \psSolid[object=courbe, 129 r=0, 122 130 linecolor=green, 123 131 linewidth=0.05, … … 126 134 function=helice_xz]% 127 135 \psSolid[object=courbe, 136 r=0, 128 137 linewidth=0.05, 129 138 resolution=360, … … 131 140 function=helice_yz]% 132 141 \psSolid[object=courbe, 142 r=0, 133 143 linecolor=red, 134 144 linewidth=0.1, … … 155 165 \psset{range=0 8} 156 166 \psSolid[object=courbe, 167 r=0, 157 168 linecolor=blue, 158 169 linewidth=0.05, … … 161 172 function=helice_xy]% 162 173 \psSolid[object=courbe, 174 r=0, 163 175 linecolor=green, 164 176 linewidth=0.05, … … 167 179 function=helice_xz]% 168 180 \psSolid[object=courbe, 181 r=0, 169 182 linewidth=0.05, 170 183 resolution=360, … … 172 185 function=helice_yz]% 173 186 \psSolid[object=courbe, 187 r=0, 174 188 linecolor=red, 175 189 linewidth=0.1, trunk/doc/par-lignedeniveau.tex
r2 r30 1 \section { Ligne de niveau}1 \section {Tracés d'intersections planes} 2 2 3 3 Pour chaque objet de type \textsl {solid}, il est possible de tracer trunk/doc/par-prisme.tex
r2 r30 133 133 \defFunction{F}(t){t cos 4 mul}{t sin 2 mul}{8} 134 134 \psSolid[object=courbe, 135 r=0, 135 136 function=F,range=0 360, 136 137 linewidth=2\pslinewidth, … … 159 160 \defFunction{F}(t){t cos 4 mul}{t sin 2 mul}{8} 160 161 \psSolid[object=courbe, 162 r=0, 161 163 function=F,range=0 360, 162 164 linewidth=2\pslinewidth, trunk/doc/pst-solides3d-doc.tex
r2 r30 173 173 %\newpage 174 174 \tableofcontents 175 \newpage 176 175 176 \newpage 177 178 %\input \datapath par-plan 179 %\end {document} 177 180 178 181 \input \datapath par-constitution … … 187 190 \input \datapath par-positionnersolide 188 191 \input \datapath par-grille 192 \input \datapath par-plan 193 \input \datapath par-vecteur 194 \input \datapath par-geode 189 195 190 196 \chapter{Les options de \textbackslash{}psSolid} … … 195 201 \input \datapath par-enleverfacettes 196 202 \input \datapath par-pointagesommets 203 \input \datapath par-tronque 204 \input \datapath par-affinage 205 \input \datapath par-chanfrein 206 197 207 \input \datapath par-couleurs 198 208 \input \datapath par-colorierfacettes 209 \input \datapath par-opacity 199 210 \input \datapath par-definitionmaillage 200 211 \input \datapath par-modes 201 212 \input \datapath par-eclairageponctuel 202 213 \input \datapath par-lignedeniveau 214 215 \chapter{Utilisation de fichiers externes} 216 217 \input \datapath par-datfile 218 \input \datapath par-offfile 219 \input \datapath par-objfile 203 220 204 221 \chapter{Fabriquer de nouveaux solides} … … 215 232 \input \datapath par-anneaux 216 233 \input \datapath par-surfacesparametrees 234 217 235 \chapter{Surfaces définies par une fonction $z=f(x,y)$} 218 236 … … 222 240 \chapter{Utilisation avancée} 223 241 \input \datapath par-nommersolide 242 \input \datapath par-section 224 243 \input \datapath par-fusion 225 244 \input \datapath par-fusionjps trunk/pst-solides3d.tex
r27 r30 11 11 \ifx\MultidoLoaded\endinput\else\input multido.tex \fi 12 12 % JPV & ML & AS 13 \def\fileversion{3.1 2}14 \def\filedate{2008/05/ 18}13 \def\fileversion{3.13} 14 \def\filedate{2008/05/29} 15 15 \message{`PSTSOLIDESIIID' v\fileversion, \filedate} 16 16 % … … 65 65 \define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme 66 66 \psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme 67 \define@key[psset]{pst-solides3d}{plansection}{\def\pst@solides@plansection{#1}} % le plan de section 68 \psset[pst-solides3d]{plansection=}% pas de section par defaut 69 \define@key[psset]{pst-solides3d}{plansepare}{\def\pst@solides@plansepare{#1}} % le plan de separation 70 \psset[pst-solides3d]{plansepare=}% pas de separation par defaut 67 71 \define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}% 68 72 \psset[pst-solides3d]{intersectionlinewidth=1}% … … 173 177 \define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}} 174 178 \psset[pst-solides3d]{file=}% pas de fichier par defaut 179 %% nom de l'objet a charger (load) 180 \define@key[psset]{pst-solides3d}{load}{\def\pst@solides@load{#1}} 181 \psset[pst-solides3d]{load=}% pas de load par defaut 175 182 %% couleur face pour affinage 176 183 \define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}} … … 251 258 surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% 252 259 surfaceparametree,texte,trigospherique,vecteur,ligne,objfile,datfile,surface*,% 253 plan,offfile,geode }260 plan,offfile,geode,load} 254 261 %% Reservation de macros correspondants aux objects 255 262 \pst@solides@reservednames{object} … … 386 393 /solidintersectionplan [ \pst@solides@intersectionplan ] def 387 394 /axe { \pst@solides@axe } def 395 /plansection [ \pst@solides@plansection ] def 388 396 /function (\pst@solides@function) def 389 397 /definition (\pst@solides@definition) def … … 418 426 \fi 419 427 % 428 \ifx\pst@solides@plansepare\@empty 429 \else 430 /plansepare {\pst@solides@plansepare} def 431 \fi 432 % 420 433 \ifx\pst@solides@transform\@empty 421 434 \else … … 425 438 \ifx\pst@solides@name\@empty 426 439 \else 427 /solidname /\pst@solides@name\spacedef440 /solidname (\pst@solides@name) def 428 441 \fi 429 442 \ifx\pst@solides@file\@empty 430 443 \else 431 444 /solidfilename (\pst@solides@file) def 445 \fi 446 % 447 \ifx\pst@solides@load\@empty 448 \else 449 /solidloadname {\pst@solides@load} def 432 450 \fi 433 451 % … … 664 682 665 683 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 684 %% Vecteur normal a un plan 685 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 686 \def\Normale{\pst@object{Normale}} 687 \def\Normale@i(#1,#2,#3){% 688 % #1 rayon 689 % #2 longitude 690 % #3 latitude 691 \pst@killglue% 692 \begingroup% 693 \use@par% 694 \pstVerb{/latitude #3 def 695 /longitude #2 def 696 /Rayon #1 def 697 /xP Rayon #2 cos #3 cos mul mul def 698 /yP Rayon #2 sin #3 cos mul mul def 699 /zP Rayon #3 sin mul def}% 700 \psSolid[object=vecteur,RotZ=#2,RotY=-#3, 701 args=1.7 0 0](xP,yP,zP) 702 \endgroup% 703 \ignorespaces% 704 } 705 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 666 706 %% les axes IIId 667 707 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 668 \def\axesIIID(#1,#2,#3)(#4,#5,#6){% axes 3d 669 \psPoint(0,0,0){O} 708 \def\axesIIID{\pst@object{axesIIID}} 709 \def\axesIIID@i(#1,#2,#3)(#4,#5,#6){% axes 3d 710 % #1 rayon 711 % #2 longitude 712 % #3 latitude 713 \pst@killglue% 714 \begingroup% 715 \use@par% 716 \psPoint(0,0,0){O} 670 717 \psPoint(#1,0,0){X} 671 718 \psPoint(0,#2,0){Y} … … 683 730 % \uput[l](O){$O$} 684 731 \uput[dl](X'){$x$}\uput[r](Y'){$y$} 685 \uput[u](Z'){$z$}} 732 \uput[u](Z'){$z$} 733 \endgroup% 734 \ignorespaces% 735 } 736 737 %% \def\axesIIID(#1,#2,#3)(#4,#5,#6){% axes 3d 738 %% \psPoint(0,0,0){O} 739 %% \psPoint(#1,0,0){X} 740 %% \psPoint(0,#2,0){Y} 741 %% \psPoint(0,0,#3){Z} 742 %% \psPoint(#4,0,0){X'} 743 %% \psPoint(0,#5,0){Y'} 744 %% \psPoint(0,0,#6){Z'} 745 %% \psline[linestyle=dashed](O)(X) 746 %% \psline[linestyle=dashed](O)(Y) 747 %% \psline[linestyle=dashed](O)(Z) 748 %% \psline{->}(X)(X') 749 %% \psline{->}(Y)(Y') 750 %% \psline{->}(Z)(Z') 751 %% % \psdots(X)(Y)(Z) 752 %% % \uput[l](O){$O$} 753 %% \uput[dl](X'){$x$}\uput[r](Y'){$y$} 754 %% \uput[u](Z'){$z$}} 686 755 687 756 trunk/solides.pro
r29 r30 1 1 %! 2 2 % PostScript prologue for pst-solides3d.tex. 3 % Version 3.1 6, 2008/05/253 % Version 3.17, 2008/05/29 4 4 % 5 5 %% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque … … 2270 2270 } def 2271 2271 2272 %%%%% ### symplan3d ### 2273 %% syntaxe : M eqplan/plantype symplan3d --> M' 2274 %% ou M' symetrique de M par rapport au plan P defini par eqplan/plantype 2275 /symplan3d { 2276 13 dict begin 2277 dup isplan { 2278 plan2eq /args exch def 2279 } { 2280 /args exch def 2281 } ifelse 2282 /z exch def 2283 /y exch def 2284 /x exch def 2285 args aload pop 2286 /d1 exch def 2287 /c1 exch def 2288 /b1 exch def 2289 /a1 exch def 2290 /n_U a1 dup mul b1 dup mul add c1 dup mul add sqrt def 2291 /a a1 n_U div def 2292 /b b1 n_U div def 2293 /c c1 n_U div def 2294 /d d1 n_U div def 2295 /u a x mul b y mul add c z mul add d add def 2296 x 2 a mul u mul sub 2297 y 2 b mul u mul sub 2298 z 2 c mul u mul sub 2299 end 2300 } def 2301 2272 2302 %%%%% ### vecteur3d ### 2273 2303 %% creation du vecteur AB a partir de A et B … … 4224 4254 4225 4255 %%%%% ### drawsolid ### 4256 /solidlightOn { 4257 /s@lidlight true def 4258 } def 4259 /solidlightOff { 4260 /s@lidlight false def 4261 } def 4262 solidlightOff 4263 4226 4264 %% syntaxe : solid i solidfacevisible? --> true si la face est visible 4227 4265 /solidfacevisible? { … … 4260 4298 FC i get length 1 ge { 4261 4299 /fillstyle FC i get ( fill) append cvx 4300 solidgrid not { 4301 FC i get cvx exec 4302 } if 4262 4303 true 4263 4304 } { … … 4271 4312 } def 4272 4313 4273 %% syntaxe : A solid i dessinefacevisible4274 /dessineface visible {4275 8dict begin4314 %% syntaxe : solid i dessinefacecachee 4315 /dessinefacecachee { 4316 11 dict begin 4276 4317 /i exch def 4277 4318 /solid exch def 4278 /A exch def4279 4319 solid issolid not { 4280 (Error : mauvais type d argument dans dessineface visible) ==4320 (Error : mauvais type d argument dans dessinefacecachee) == 4281 4321 quit 4282 4322 } if 4323 4283 4324 /F solid solidgetfaces def 4284 4325 /S solid solidgetsommets def 4285 4326 4286 solid i solidfacevisible? { 4327 %% face cachee => on prend chacune des aretes de la face et on 4328 %% la dessine 4329 4 dict begin 4287 4330 /n F i get length def %% nb de sommets de la face 4288 4289 startest { 4290 %% choix de la couleur 4291 /lightcolor where { 4292 pop 4293 /coeff 4294 lightintensity 4295 solid i solidnormaleface normalize3d 4296 solid i solidcentreface lightsrc vecteur3d normalize3d 4297 scalprod3d mul 4298 0 max 1 min 4299 def 4300 /fillstyle { 4301 lightcolor {coeff mul} apply setcolor fill 4302 } def 4303 solidgrid not { 4304 lightcolor {coeff mul} apply setcolor 4305 } if 4306 } { 4307 /lightsrc where { 4308 pop 4309 /coeff 4310 lightintensity 4311 solid i solidnormaleface normalize3d 4312 solid i solidcentreface lightsrc vecteur3d normalize3d 4313 scalprod3d mul 4314 0 max 1 min 4315 def 4316 /lacouleur [ 4317 gsave 4318 solid solidgetfcolors i get cvx exec currentrgbcolor 4319 grestore 4320 ] def 4321 /fillstyle { 4322 lacouleur {coeff mul} apply setcolor fill 4323 } def 4324 solidgrid not { 4325 lacouleur {coeff mul} apply setcolor 4326 } if 4327 } { 4328 solid i affectecouleursolid_facei 4329 } ifelse 4330 4331 } ifelse 4332 } if 4333 4331 0 1 n 1 sub { 4332 /k exch def 4333 /k1 F i k get_ij def %% indice sommet1 4334 /k2 F i k 1 add n mod get_ij def %% indice sommet2 4335 gsave 4336 currentlinewidth .5 mul setlinewidth 4337 pointilles 4338 [S k1 getp3d 4339 S k2 getp3d sortp3d] ligne3d 4340 grestore 4341 } for 4342 4343 %% trace de la ligne de niveau 4344 solidintersectiontype 0 ge { 4334 4345 /face_a_dessiner [ %% face visible : F [i] 4335 4346 0 1 n 1 sub { … … 4338 4349 } for 4339 4350 ] def 4340 face_a_dessiner polygone3d 4341 4342 %% on marque les aretes 4343 aretescachees { 4344 0 1 n 1 sub { 4345 /j exch def 4346 /k1 F i j get_ij def %% indice sommet1 4347 /k2 F i j 1 add n mod get_ij def %% indice sommet2 4348 A k1 k2 true put_ij 4349 A k2 k1 true put_ij 4350 } for 4351 } if 4352 4353 4354 %% trace de la ligne de niveau 4355 solidintersectiontype 0 ge { 4356 0 1 solidintersectionplan length 1 sub { 4357 /k exch def 4358 /lignedeniveau [] def 4359 gsave 4360 k solidintersectionlinewidth length lt { 4361 solidintersectionlinewidth k get setlinewidth 4362 } { 4363 solidintersectionlinewidth 0 get setlinewidth 4364 } ifelse 4365 k solidintersectioncolor length lt { 4366 solidintersectioncolor k get cvx exec 4367 } { 4368 solidintersectioncolor 0 get cvx exec 4369 } ifelse 4370 0 1 n 1 sub { 4371 /j exch def 4372 face_a_dessiner j getp3d 4373 face_a_dessiner j 1 add n mod getp3d 4374 solidintersectionplan k get segment_inter_plan { 4375 1 dict begin 4376 /table exch def 4351 0 1 solidintersectionplan length 1 sub { 4352 /k exch def 4353 /lignedeniveau [] def 4354 gsave 4355 pointilles 4356 k solidintersectionlinewidth length lt { 4357 solidintersectionlinewidth k get setlinewidth 4358 } { 4359 solidintersectionlinewidth 0 get setlinewidth 4360 } ifelse 4361 k solidintersectioncolor length lt { 4362 solidintersectioncolor k get cvx exec 4363 } { 4364 solidintersectioncolor 0 get cvx exec 4365 } ifelse 4366 0 1 n 1 sub { 4367 /j exch def 4368 face_a_dessiner j getp3d 4369 face_a_dessiner j 1 add n mod getp3d 4370 solidintersectionplan k get segment_inter_plan { 4371 1 dict begin 4372 /table exch def 4373 table length 6 eq { 4374 /lignedeniveau table store 4375 exit 4376 } { 4377 4377 /lignedeniveau [ 4378 4378 lignedeniveau aload pop 4379 4379 table 0 getp3d 4380 table length 4 ge {4381 table 1 getp3d4382 } if4383 4380 ] store 4384 end 4385 } if 4386 } for 4387 4388 %% dessin de la ligne 4389 lignedeniveau length 4 ge { 4390 solid i solidisinface { 4391 pointilles 4392 } if 4393 lignedeniveau ligne3d 4381 } ifelse 4382 end 4394 4383 } if 4395 grestore 4396 } for 4397 } if 4398 4399 } if 4400 end 4401 } def 4402 4403 %% syntaxe : A solid i dessinefacecachee 4404 /dessinefacecachee { 4405 6 dict begin 4384 } for 4385 4386 %% dessin de la ligne 4387 lignedeniveau length 4 ge { 4388 [lignedeniveau aload pop sortp3d] ligne3d 4389 } if 4390 grestore 4391 } for 4392 } if 4393 4394 end 4395 end 4396 } def 4397 4398 %% syntaxe : solid i dessinefacevisible 4399 /dessinefacevisible { 4400 8 dict begin 4406 4401 /i exch def 4407 4402 /solid exch def 4408 4403 solid issolid not { 4409 (Error : mauvais type d argument dans dessineface cachee) ==4404 (Error : mauvais type d argument dans dessinefacevisible) == 4410 4405 quit 4411 4406 } if 4412 /A exch def4413 4414 4407 /F solid solidgetfaces def 4415 4408 /S solid solidgetsommets def 4416 4409 4417 solid i solidfacevisible? not { 4418 %% face cachee => on prend chacune des aretes de la face et on 4419 %% regarde si elle est deja dessinee. 4420 4 dict begin 4421 /n F i get length def %% nb de sommets de la face 4422 0 1 n 1 sub { 4410 /n F i get length def %% nb de sommets de la face 4411 4412 startest { 4413 s@lidlight { 4414 /coeff 4415 lightintensity 4416 solid i solidnormaleface normalize3d 4417 solid i solidcentreface lightsrc vecteur3d normalize3d 4418 scalprod3d mul 4419 0 max 1 min 4420 def 4421 /lightcolor where { 4422 pop 4423 /lacouleur lightcolor def 4424 } { 4425 /lacouleur [ 4426 gsave 4427 solid solidgetfcolors i get cvx exec currentrgbcolor 4428 grestore 4429 ] def 4430 } ifelse 4431 /fillstyle { 4432 lacouleur {coeff mul} apply setcolor fill 4433 } def 4434 solidgrid not { 4435 lacouleur {coeff mul} apply setcolor 4436 } if 4437 } { 4438 n 2 eq { 4439 1 dict begin 4440 solidgridOff 4441 solid i affectecouleursolid_facei 4442 end 4443 } { 4444 solid i affectecouleursolid_facei 4445 } ifelse 4446 } ifelse 4447 } if 4448 4449 /face_a_dessiner [ %% face visible : F [i] 4450 0 1 n 1 sub { 4451 /j exch def 4452 solid j i solidgetsommetface 4453 } for 4454 ] def 4455 face_a_dessiner polygone3d 4456 4457 %% trace de la ligne de niveau 4458 solidintersectiontype 0 ge { 4459 0 1 solidintersectionplan length 1 sub { 4423 4460 /k exch def 4424 /k1 F i k get_ij def %% indice sommet1 4425 /k2 F i k 1 add n mod get_ij def %% indice sommet2 4426 A k1 k2 get_ij not { 4427 gsave 4428 currentlinewidth .5 mul setlinewidth 4429 pointilles 4430 [S k1 getp3d 4431 S k2 getp3d] ligne3d 4432 A k1 k2 true put_ij 4433 A k2 k1 true put_ij 4434 grestore 4435 } if 4436 } for 4437 4438 %% trace de la ligne de niveau 4439 solidintersectiontype 0 ge { 4440 /face_a_dessiner [ %% face visible : F [i] 4461 /lignedeniveau [] def 4462 gsave 4463 k solidintersectionlinewidth length lt { 4464 solidintersectionlinewidth k get setlinewidth 4465 } { 4466 solidintersectionlinewidth 0 get setlinewidth 4467 } ifelse 4468 k solidintersectioncolor length lt { 4469 solidintersectioncolor k get cvx exec 4470 } { 4471 solidintersectioncolor 0 get cvx exec 4472 } ifelse 4441 4473 0 1 n 1 sub { 4442 4474 /j exch def 4443 solid j i solidgetsommetface 4475 face_a_dessiner j getp3d 4476 face_a_dessiner j 1 add n mod getp3d 4477 solidintersectionplan k get segment_inter_plan { 4478 1 dict begin 4479 /table exch def 4480 /lignedeniveau [ 4481 lignedeniveau aload pop 4482 table 0 getp3d 4483 table length 4 ge { 4484 table 1 getp3d 4485 } if 4486 ] store 4487 end 4488 } if 4444 4489 } for 4445 ] def 4446 0 1 solidintersectionplan length 1 sub { 4447 /k exch def 4448 /lignedeniveau [] def 4449 gsave 4450 pointilles 4451 k solidintersectionlinewidth length lt { 4452 solidintersectionlinewidth k get setlinewidth 4453 } { 4454 solidintersectionlinewidth 0 get setlinewidth 4455 } ifelse 4456 k solidintersectioncolor length lt { 4457 solidintersectioncolor k get cvx exec 4458 } { 4459 solidintersectioncolor 0 get cvx exec 4460 } ifelse 4461 0 1 n 1 sub { 4462 /j exch def 4463 face_a_dessiner j getp3d 4464 face_a_dessiner j 1 add n mod getp3d 4465 solidintersectionplan k get segment_inter_plan { 4466 1 dict begin 4467 /table exch def 4468 table length 6 eq { 4469 /lignedeniveau table store 4470 exit 4471 } { 4472 /lignedeniveau [ 4473 lignedeniveau aload pop 4474 table 0 getp3d 4475 ] store 4476 } ifelse 4477 end 4478 } if 4479 } for 4480 4481 %% dessin de la ligne 4482 lignedeniveau length 4 ge { 4483 [lignedeniveau aload pop sortp3d] ligne3d 4490 4491 %% dessin de la ligne 4492 lignedeniveau length 4 ge { 4493 solid i solidisinface { 4494 pointilles 4484 4495 } if 4485 grestore 4486 } for 4487 } if 4496 lignedeniveau ligne3d 4497 } if 4498 grestore 4499 } for 4500 } if 4488 4501 4489 end4490 } if4491 4502 end 4492 4503 } def … … 4527 4538 /S exch def 4528 4539 /n S length 3 idiv def 4529 %% tableau des aretes4530 /A [4531 aretescachees {4532 n {4533 [n {false} repeat]4534 } repeat4535 } if4536 ] def4537 4540 4538 4541 currentdict /ordre known not { … … 4560 4563 /i ordre k get def 4561 4564 gsave 4562 A solid i dessinefacevisible 4565 solid i solidfacevisible? { 4566 solid i dessinefacevisible 4567 } if 4563 4568 grestore 4564 4569 } for … … 4567 4572 /k exch def 4568 4573 /i ordre k get def 4569 A solid i dessinefacecachee 4574 gsave 4575 solid i solidfacevisible? not { 4576 solid i dessinefacecachee 4577 } if 4578 grestore 4570 4579 } for 4571 4580 } if 4581 4572 4582 %% %% si on veut repasser les traits des faces visibles 4573 4583 %% 0 1 F length 1 sub { … … 4577 4587 %% 1 dict begin 4578 4588 %% /startest false def 4579 %% A solid i dessinefacevisible 4589 %% solid i solidfacevisible? { 4590 %% solid i dessinefacevisible 4591 %% } if 4580 4592 %% end 4581 4593 %% grestore … … 5494 5506 } def 5495 5507 5496 %% syntaxe : solid eqplan solidplansection --> solid25508 %% syntaxe : solid eqplan/plantype solidplansection --> solid2 5497 5509 /solidplansection { 5498 5510 10 dict begin 5499 /eqplan exch def 5511 dup isplan { 5512 plan2eqplan 5513 /eqplan exch def 5514 } { 5515 /eqplan exch def 5516 } ifelse 5500 5517 dupsolid /result exch def 5501 5518 /solid exch def … … 5634 5651 } ifelse 5635 5652 5636 5637 5653 %% restera a traiter le cas limite ou la nouvelle face existe deja 5638 5654 %% tester si max(indicestries) < nb sommets avant section … … 5656 5672 } def 5657 5673 5658 %% syntaxe : solid eqplan solideqplansepare --> solid1 solid2 5659 /solideqplansepare { 5674 /solideqplansepare {solidplansepare} def 5675 5676 %% syntaxe : solid eqplan/plantype solidplansepare --> solid1 solid2 5677 /solidplansepare { 5660 5678 10 dict begin 5661 /eqplan exch def 5679 dup isplan { 5680 plan2eq 5681 /eqplan exch def 5682 } { 5683 /eqplan exch def 5684 } ifelse 5662 5685 eqplan solidplansection 5663 5686 /solid exch def … … 7980 8003 {CX CY CZ translatepoint3d} solidtransform 7981 8004 } if 8005 plansection length 0 gt { 8006 0 1 plansection length 1 sub { 8007 /i exch def 8008 plansection i get solidplansection 8009 } for 8010 } if 7982 8011 /rmfaces rmfaces bubblesort reverse store 7983 8012 0 1 rmfaces length 1 sub { … … 8027 8056 } ifelse 8028 8057 } if 8058 tx@Dict /plansepare known { 8059 plansepare solidplansepare 8060 tx@Dict /plansepare undef 8061 tx@Dict /solidname known { 8062 solidname (1) append cvlit exch def 8063 solidname (0) append cvlit exch def 8064 tx@Dict /solidname undef 8065 } { 8066 /solid1 exch def 8067 /solid2 exch def 8068 } ifelse 8069 } if 8029 8070 solidhollow { 8030 8071 dup videsolid … … 8056 8097 } ifelse 8057 8098 tx@Dict /solidname known { 8058 solidname exch bind def8099 solidname cvlit exch bind def 8059 8100 tx@Dict /solidname undef 8060 8101 } { … … 8475 8516 gere_pstricks_opt 8476 8517 % noir 8477 %setTimes8518 setTimes 8478 8519 % (Test) 0 0 l@pl@n cctextp3d 8520 l@pl@n planquadrillage 8479 8521 l@pl@n planmarks 8480 8522 } def … … 8497 8539 /pst-geode { 8498 8540 ngrid aload pop newgeode 8541 gere_pstricks_opt 8542 } def 8543 8544 /pst-load { 8545 solidloadname 8546 /activationgestioncouleurs false def 8499 8547 gere_pstricks_opt 8500 8548 } def trunk/tests/index.txt
r27 r30 12 12 test_12 : lecture / ecriture de fichier off 13 13 test_13 : intersection solide/plan 14 test_14 : nommer un solide trunk/tests/test_03.tex
r6 r30 15 15 \maketitle 16 16 17 \section {Tube avec PSTricks} 18 17 19 %\psset{lightsrc=10 20 30,SphericalCoor=true,viewpoint=50 20 30} 18 20 \psset{SphericalCoor=true,viewpoint=50 20 30} 19 21 20 22 \begin{center} 21 \psset{unit=1.5}22 23 \psset{lightsrc=10 0 10,SphericalCoor=true,viewpoint=50 -20 30,Decran=50} 23 \begin{pspicture*}(-5,-4)(6,9) 24 \psframe(-5,-4)(6,9) 24 \begin{pspicture*}(-5,-4)(6,3) 25 \psframe(-5,-4)(6,3) 26 \defFunction{F}(t){t Cos 2 mul}{t Sin 2 mul}{2 t mul Sin 1 mul} 27 \psSolid[object=courbe, 28 r=0.25, 29 function=F, 30 range=0 2 pi mul, 31 fillcolor=red, 32 ngrid=120 12, 33 ] 34 \end{pspicture*} 35 \end{center} 36 37 \section {Tube avec jps} 38 39 %\psset{lightsrc=10 20 30,SphericalCoor=true,viewpoint=50 20 30} 40 \psset{SphericalCoor=true,viewpoint=50 20 30} 41 42 \begin{center} 43 \psset{lightsrc=10 0 10,SphericalCoor=true,viewpoint=50 -20 30,Decran=50} 44 \begin{pspicture*}(-5,-4)(6,3) 45 \psframe(-5,-4)(6,3) 25 46 \codejps{ 26 47 /a 2 def … … 45 66 } def 46 67 % 47 /g'' {48 3 dict begin49 /t exch def50 t Cos a neg mul %% #rpn# -a*Cos(t)51 t Sin a neg mul %% #rpn# -a*Sin(t)52 2 t mul Sin -4 b mul mul %% #rpn# -4*b*Sin(2*t)53 end54 } def55 %56 68 0 pi 2 mul {g} CourbeR3 57 69 % stop … … 64 76 %solidgridOff 65 77 % 66 {0 pi 2 mul (g) .25 [120 12] newtube} exec 78 0 pi 2 mul (g) .25 [120 12] newtube 67 79 dup (rouge) outputcolors 68 80 drawsolid** trunk/tests/test_10.tex
r29 r30 18 18 \psset{SphericalCoor=true,viewpoint=50 20 30} 19 19 20 \section {Test se pare}20 \section {Test section avec PSTricks} 21 21 22 22 \begin{center} … … 25 25 \begin{pspicture*}(-5,-4)(6,9) 26 26 \psframe(-5,-4)(6,9) 27 \psSolid[object=cylindre, 28 ngrid=1 12, 29 r=2, 30 plansection={ 31 [0 0 1 -1] 32 [0 0 1 -2] 33 [0 0 1 -3] 34 [1 0 -1 2] 35
