Changeset 24
- Timestamp:
- 05/10/08 12:45:38 (8 months ago)
- Files:
-
- trunk/pst-solides3d.tex (modified) (11 diffs)
- trunk/solides.pro (modified) (14 diffs)
- trunk/tests/index.txt (modified) (1 diff)
- trunk/tests/test_02.tex (modified) (6 diffs)
- trunk/tests/test_12.tex (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/pst-solides3d.tex
r23 r24 11 11 \ifx\MultidoLoaded\endinput\else\input multido.tex \fi 12 12 % JPV & ML & AS 13 \def\fileversion{3.1 0}14 \def\filedate{2008/05/ 09}13 \def\fileversion{3.11} 14 \def\filedate{2008/05/10} 15 15 \message{`PSTSOLIDESIIID' v\fileversion, \filedate} 16 16 % … … 53 53 \define@key[psset]{pst-solides3d}{h}{\def\pst@solides@h{#1}} % hauteur du cylindre, du cone, du prisme 54 54 \define@key[psset]{pst-solides3d}{trunccoeff}{\def\pst@solides@trunccoeff{#1}} % coeff de troncature 55 \define@key[psset]{pst-solides3d}{ chanfreincoeff}{\def\pst@solides@chanfreincoeff{#1}} % coeff de chanfrein55 \define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage 56 56 \define@key[psset]{pst-solides3d}{base}{\def\pst@solides@base{#1}} % base du prisme 57 57 \psset[pst-solides3d]{base=-1 -1 1 -1 0 1}% coordonnees d'un triangle, base triangulaire par defaut … … 59 59 \psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme 60 60 \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,% 61 trunccoeff=.25, chanfreincoeff=.8}61 trunccoeff=.25,affinagecoeff=.8} 62 62 \define@key[psset]{pst-solides3d}{hauteurlignedeniveau}{\def\psk@solides@hauteurlignedeniveau{#1}} 63 63 \psset[pst-solides3d]{hauteurlignedeniveau=0}% … … 124 124 \psset{SphericalCoor=false} 125 125 126 \define@boolkey[psset]{pst-solides3d}[Pst@]{ chanfreinrm}[false]{}127 \psset{ chanfreinrm=true}126 \define@boolkey[psset]{pst-solides3d}[Pst@]{affinagerm}[false]{} 127 \psset{affinagerm=true} 128 128 129 129 \define@boolkey[psset]{pst-solides3d}[Pst@]{grid}[false]{} … … 154 154 \define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}} 155 155 \psset[pst-solides3d]{file=}% pas de fichier par defaut 156 %% couleur face pour chanfrein156 %% couleur face pour affinage 157 157 \define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}} 158 158 \psset[pst-solides3d]{fcolor=}% pas de couleur par defaut … … 180 180 \define@key[psset]{pst-solides3d}{trunc}{\def\pst@solides@trunc{#1}} 181 181 \psset[pst-solides3d]{trunc=}% pas de troncature pra defaut 182 %% chanfreinage des faces183 \define@key[psset]{pst-solides3d}{ chanfrein}{\def\pst@solides@chanfrein{#1}}184 \psset[pst-solides3d]{ chanfrein=}% pas de chanfreinpar defaut182 %% affinageage des faces 183 \define@key[psset]{pst-solides3d}{affinage}{\def\pst@solides@affinage{#1}} 184 \psset[pst-solides3d]{affinage=}% pas de affinage par defaut 185 185 %% numerotation des sommets 186 186 \define@key[psset]{pst-solides3d}{num}{\def\pst@solides@num{#1}} … … 211 211 }} 212 212 % type de dessin 213 \def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid }213 \def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid,writeoff} 214 214 %% Reservation de macros correspondants aux actions 215 215 \pst@solides@reservednames{action} … … 232 232 surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% 233 233 surfaceparametree,texte,trigospherique,vecteur,ligne,objfile,datfile,surface*,% 234 plan }234 plan,offfile} 235 235 %% Reservation de macros correspondants aux objects 236 236 \pst@solides@reservednames{object} … … 358 358 /h \pst@solides@h\space def % hauteur du cylindre, du cone, du prisme 359 359 /trunccoeff \pst@solides@trunccoeff\space def % coeff de troncature 360 / chanfreincoeff \pst@solides@chanfreincoeff\space def % coeff de chanfrein360 /affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage 361 361 /section {\pst@solides@section} def % section de l'objet de revolution 362 362 /base [ \pst@solides@base ] def … … 477 477 /solidtrunc [\pst@solides@trunc] def 478 478 \fi 479 \ifx\pst@solides@ chanfrein\@empty480 /solid chanfrein[] def481 \else 482 /solid chanfrein [\pst@solides@chanfrein] def479 \ifx\pst@solides@affinage\@empty 480 /solidaffinage [] def 481 \else 482 /solidaffinage [\pst@solides@affinage] def 483 483 \fi 484 484 % … … 495 495 \fi 496 496 % 497 \ifPst@ chanfreinrm498 / chanfreinrm true def497 \ifPst@affinagerm 498 /affinagerm true def 499 499 \else 500 / chanfreinrm false def500 /affinagerm false def 501 501 \fi 502 502 % trunk/solides.pro
r23 r24 1 1 %! 2 2 % PostScript prologue for pst-solides3d.tex. 3 % Version 3.1 3, 2008/05/093 % Version 3.14, 2008/05/10 4 4 % 5 5 %% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque … … 516 516 517 517 %%%%% ### numstr2array ### 518 %% syntaxe : str numstr2array -> array 519 %% ou str est une chaine de nombres entiers separes par des espaces 520 %% et array est constitue des elements numeriques entiers de string. 521 %% exemple : 522 %% (0 12 4 54) --> [0 12 4 54] 523 /numstr2array { 524 3 dict begin 518 %% syntaxe : str str2num --> num 519 /str2num { 520 5 dict begin 525 521 /str exch def 526 522 /n str length def 527 /j -1 def 523 /signnum 1 def 524 /frct false def 525 /k 0 def 526 0 1 n 1 sub { 527 /i exch def 528 str i get 529 dup 46 eq { 530 %% il y a un point 531 /frct true def 532 pop 533 i 0 eq { 534 0 535 } if 536 } { 537 dup 45 eq { 538 /signnum -1 def 539 pop 540 } { 541 frct not { 542 i 1 ge signnum 0 ge and i 2 ge or { 543 exch 10 mul 48 sub add 544 } { 545 48 sub 546 } ifelse 547 } { 548 48 sub 549 /k k 1 add store 550 10 k exp div add 551 } ifelse 552 } ifelse 553 } ifelse 554 } for 555 signnum mul 556 end 557 } def 558 559 /str2num {cvx exec} def 560 561 %% syntaxe : str numstr2array -> array 562 %% ou str est une chaine de nombres reels separes par des espaces 563 %% et array est constitue des elements numeriques de string. 564 %% exemple : 565 %% (0 -12 .234 54) --> [0 -12 0.234 54] 566 /numstr2array { 567 6 dict begin 568 /str exch def 569 /n str length def 570 /separateurs [] def 528 571 [ 529 572 0 1 n 1 sub { 530 573 /i exch def 531 /j j 1 add store532 574 str i get 533 dup 32 eq { 534 %% c est un espace 535 /j -1 store 536 pop 537 } { 538 j 1 ge { 539 exch 10 mul 48 sub add 540 } { 541 48 sub 542 } ifelse 543 } ifelse 575 32 eq { 576 /separateurs [separateurs aload pop i] def 577 } if 544 578 } for 579 /j 0 def 580 /oldsep 0 def 581 0 1 separateurs length 1 sub { 582 /i exch def 583 str j separateurs i get oldsep sub getinterval str2num 584 /j separateurs i get 1 add def 585 /oldsep separateurs i get 1 add def 586 } for 587 str j n oldsep sub getinterval str2num 545 588 ] 546 589 end … … 3403 3446 /solidnumsommets { 3404 3447 8 dict begin 3405 %Font findfont 10 scalefont setfont3448 Font findfont 10 scalefont setfont 3406 3449 dup issolid not { 3407 3450 %% on a un argument … … 3436 3479 mulv3d 3437 3480 S addv3d 3438 3dto2d cctext 3481 3dto2d cctext 3439 3482 } for 3440 3483 end … … 5310 5353 } def 5311 5354 5312 %%%%% ### solid champfreine ###5313 %% syntaxe : solid coeff i solid champfreine -> -5314 %% syntaxe : solid coeff array solid champfreine -> -5315 %% syntaxe : solid coeff solid champfreine -> -5316 %% syntaxe : solid coeff str solid champfreine -> -5317 %% syntaxe : solid coeff bool solid champfreine -> -5318 /solid champfreine {5355 %%%%% ### solidaffine ### 5356 %% syntaxe : solid coeff i solidaffine -> - 5357 %% syntaxe : solid coeff array solidaffine -> - 5358 %% syntaxe : solid coeff solidaffine -> - 5359 %% syntaxe : solid coeff str solidaffine -> - 5360 %% syntaxe : solid coeff bool solidaffine -> - 5361 /solidaffine { 5319 5362 10 dict begin 5320 5363 dup isbool { … … 5327 5370 } if 5328 5371 2 copy pop issolid { 5329 %% 2 arguments --> on champfreine tout5372 %% 2 arguments --> on affine tout 5330 5373 2 copy pop solidnombrefaces /n exch def 5331 5374 /table [n 1 sub -1 0 {} for] def … … 5345 5388 solid coeff table i get 5346 5389 currentdict /couleurface known { 5347 couleurface 5390 couleurface 5348 5391 } if 5349 rmfacecentrale s@lid champfreineface5392 rmfacecentrale s@lidaffineface 5350 5393 } for 5351 5394 end 5352 5395 } def 5353 5396 5354 %% syntaxe : solid coeff i s@lid champfreineface5355 /s@lid champfreineface {5397 %% syntaxe : solid coeff i s@lidaffineface 5398 /s@lidaffineface { 5356 5399 10 dict begin 5357 5400 /rmfacecentrale exch def … … 5364 5407 /solid exch def 5365 5408 solid issolid not { 5366 (Erreur : mauvais type d argument dans champfreine) ==5409 (Erreur : mauvais type d argument dans affine) == 5367 5410 quit 5368 5411 } if … … 5416 5459 solid N 5417 5460 currentdict /couleurface known { 5418 couleurface 5461 couleurface 5419 5462 } { 5420 5463 couleurfaceorigine … … 7096 7139 } def 7097 7140 7141 %%%%% ### writeofffile ### 7142 %% syntaxe : solid str writeobjfile -> - 7143 /writeofffile { 7144 12 dict begin 7145 /str exch (.off) append def 7146 /solid exch def 7147 solid issolid not { 7148 (Erreur : mauvais type d argument dans writeofffile) == 7149 quit 7150 } if 7151 /n solid solidnombresommets def 7152 /nf solid solidnombrefaces def 7153 str (w) file /lefichier exch def 7154 lefichier (OFF) writestring 7155 lefichier 10 write %% CR 7156 lefichier n chaine cvs writestring 7157 lefichier 32 write %% espace 7158 lefichier nf chaine cvs writestring 7159 lefichier 32 write %% espace 7160 lefichier 0 chaine cvs writestring 7161 lefichier 10 write %% CR 7162 0 1 n 1 sub { 7163 /i exch def 7164 solid i solidgetsommet 7165 /z exch def 7166 /y exch def 7167 /x exch def 7168 lefichier x chaine cvs writestring 7169 lefichier 32 write %% espace 7170 lefichier y chaine cvs writestring 7171 lefichier 32 write %% espace 7172 lefichier z chaine cvs writestring 7173 lefichier 10 write %% CR 7174 } for 7175 0 1 nf 1 sub { 7176 /i exch def 7177 /F solid i solidgetface def 7178 lefichier F length chaine cvs writestring 7179 lefichier 32 write %% espace 7180 F { 7181 lefichier exch 7182 chaine cvs writestring 7183 lefichier 32 write %% espace 7184 } apply 7185 lefichier 10 write %% CR 7186 } for 7187 lefichier closefile 7188 end 7189 } def 7190 7098 7191 %%%%% ### newobjfile ### 7099 7192 /newobjfile { … … 7119 7212 /F exch def 7120 7213 /S exch def 7214 7215 S F generesolid 7216 % dup videsolid 7217 end 7218 } def 7219 7220 %%%%% ### newofffile ### 7221 /newofffile { 7222 3 dict begin 7223 /str 35 string def 7224 /offfilename exch (.off) append def 7225 offfilename (r) file 7226 /offfile exch def 7227 offfile str readline pop pop 7228 offfile str readline pop 7229 numstr2array 7230 dup 0 get /ns exch def 7231 1 get /nf exch def 7232 [ns { 7233 offfile str readline pop numstr2array aload pop 7234 } repeat] 7235 /S exch def 7236 [nf { 7237 [ 7238 offfile str readline pop numstr2array 7239 /table exch def 7240 1 1 table length 1 sub { 7241 /i exch def 7242 table i get 7243 } for 7244 ] 7245 } repeat] 7246 /F exch def 7121 7247 7122 7248 S F generesolid … … 7343 7469 /writeobj {solidfilename writeobjfile} def 7344 7470 /writesolid {solidfilename writesolidfile} def 7471 /writeoff {solidfilename writeofffile} def 7345 7472 /none {pop} def 7346 7473 … … 7405 7532 } if 7406 7533 } ifelse 7407 solid chanfreinlength 0 ne {7408 solid chanfrein0 get isstring {7409 dup chanfreincoeff7534 solidaffinage length 0 ne { 7535 solidaffinage 0 get isstring { 7536 dup affinagecoeff 7410 7537 /solidfcolor where { 7411 7538 pop 7412 7539 solidfcolor 7413 7540 } if 7414 chanfreinrm solidchampfreine7541 affinagerm solidaffine 7415 7542 } { 7416 dup chanfreincoeff solidchanfrein7543 dup affinagecoeff solidaffinage 7417 7544 /solidfcolor where { 7418 7545 pop 7419 7546 solidfcolor 7420 7547 } if 7421 chanfreinrm solidchampfreine7548 affinagerm solidaffine 7422 7549 } ifelse 7423 7550 } if … … 7842 7969 /pst-objfile { 7843 7970 solidfilename newobjfile 7844 % dup {1 1 div mulv3d} solidtransform 7845 %% solidhollow { 7846 %% dup videsolid 7847 %% } if 7971 gere_pstricks_opt 7972 } def 7973 7974 /pst-offfile { 7975 solidfilename newofffile 7848 7976 gere_pstricks_opt 7849 7977 } def trunk/tests/index.txt
r17 r24 10 10 test_10 : section et separation de solide 11 11 test_11 : equations de plan 12 test_12 : lecture / ecriture de fichier off trunk/tests/test_02.tex
r23 r24 18 18 \psset{SphericalCoor=true,viewpoint=50 20 30} 19 19 20 \section {Test chanfreinavec PSTricks}20 \section {Test affinage avec PSTricks} 21 21 22 22 1 seule face, en gardant la face centrale … … 28 28 \psSolid[object=cube, 29 29 fillcolor=red, 30 chanfreinrm,30 affinagerm, 31 31 fcolor=Yellow, 32 chanfrein=0]32 affinage=0] 33 33 \end{pspicture*} 34 34 \end{center} … … 42 42 \psSolid[object=cube, 43 43 fillcolor=cyan, 44 chanfrein=0]44 affinage=0] 45 45 \end{pspicture*} 46 46 \end{center} … … 54 54 \psSolid[object=cube, 55 55 fillcolor=cyan, 56 chanfreincoeff=.5,57 chanfreinrm,56 affinagecoeff=.5, 57 affinagerm, 58 58 fcolor=.5 setfillopacity Yellow, 59 59 hollow, 60 chanfrein=all]60 affinage=all] 61 61 \end{pspicture*} 62 62 \end{center} 63 63 64 64 65 \section {Test chanfreinavec jps}65 \section {Test affinage avec jps} 66 66 1 seule face 67 67 … … 73 73 \codejps{ 74 74 5 newcube 75 dup .5 0 solid champfreine75 dup .5 0 solidaffine 76 76 %%dup [.5 .6] solidputhuecolors %% ne fonctionne pas 77 77 dup {[.5 .6]} exec solidputhuecolors %% fonctionne … … 90 90 \codejps{ 91 91 5 newcube 92 dup .5 solid champfreine92 dup .5 solidaffine 93 93 %%dup [.5 .6] solidputhuecolors %% ne fonctionne pas 94 94 dup {[.5 .6]} exec solidputhuecolors %% fonctionne
