Changeset 29
- Timestamp:
- 05/25/08 10:09:46 (8 months ago)
- Files:
-
- trunk/solides.pro (modified) (15 diffs)
- trunk/tests/test_10.pdf (modified) (previous)
- trunk/tests/test_10.tex (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/solides.pro
r27 r29 1 1 %! 2 2 % PostScript prologue for pst-solides3d.tex. 3 % Version 3.1 5, 2008/05/183 % Version 3.16, 2008/05/25 4 4 % 5 5 %% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque … … 2852 2852 } def 2853 2853 2854 %% syntaxe : solid solidfacesreverse -> - 2855 /solidfacesreverse { 2856 5 dict begin 2857 /solid exch def 2858 /n solid solidnombrefaces def 2859 0 1 n 1 sub { 2860 /i exch def 2861 /F solid i solidgetface reverse def 2862 /m F length def 2863 solid i [F aload pop m 0 roll ] solidputface 2864 } for 2865 end 2866 } def 2867 2854 2868 /solidputfcolors { 2855 2869 2 exch put … … 2915 2929 } def 2916 2930 2917 %% %% syntaxe : solid array solidputoutfaces --> -2918 %% /solidputoutfaces {2919 %% 4 dict begin2920 %% /facesexternes exch def2921 %% /solid exch def2922 %% /n1 facesexternes length def2923 %% /IO solid solidgetinouttable def2924 %% /facesinternes solid solidgetinfaces def2925 %% /n2 facesinternes length def2926 %% solid2927 %% [facesexternes aload pop facesinternes aload pop]2928 %% solidputfaces2929 %% IO 0 0 put2930 %% IO 1 n1 1 sub put2931 %% IO 2 n1 put2932 %% IO 3 n1 n2 add 1 sub put2933 %% end2934 %% } def2935 2936 2931 %% syntaxe : solid array solidputoutfaces --> - 2937 2932 /solidputoutfaces { … … 3011 3006 } def 3012 3007 3013 %/solidintersectiontype -1 def3014 %/solidintersectionlinewidth [1 2] def3015 %/solidintersectioncolor [(bleu) (rouge)] def3016 %/solidintersectionplan [[1 0 .5 0] [1 0 .5 -1]] def3017 3018 3008 %% /tracelignedeniveau? false def 3019 3009 %% /hauteurlignedeniveau 1 def … … 3021 3011 %% /linewidthlignedeniveau 4 def 3022 3012 3023 /solidgrid true def3024 /aretescachees true def3025 /defaultsolidmode 2 def3026 3013 /solidgridOn { 3027 3014 /solidgrid true def … … 3336 3323 vecteurnormal angle3doriente 3337 3324 end} papply3d 3338 [0 1 table length 3 idiv 1 sub {} for] 3339 exch doublebubblesort pop 3325 % [0 1 table length 3 idiv 1 sub {} for] 3326 % exch 3327 doublebubblesort pop 3340 3328 end 3341 3329 } def … … 5486 5474 } def 5487 5475 5476 %% syntaxe : array1 arrayrmdouble --> array2 5477 %% remplace 2 elts identiques consecutifs par 1 elt 5478 /arrayrmdouble { 5479 5 dict begin 5480 /table exch def 5481 /result [table 0 get] def 5482 /j 0 def 5483 1 1 table length 1 sub { 5484 /i exch def 5485 table i get 5486 result j get 5487 eq not { 5488 /result [result aload pop table i get] store 5489 /j j 1 add store 5490 } if 5491 } for 5492 result 5493 end 5494 } def 5495 5488 5496 %% syntaxe : solid eqplan solidplansection --> solid2 5489 5497 /solidplansection { … … 5493 5501 /solid exch def 5494 5502 /aenlever [] def 5503 /indnouveauxsommets [] def 5495 5504 %(nombre faces) == 5496 5505 %solid solidnombrefaces == … … 5523 5532 /k3a -1 def 5524 5533 /k4a -1 def 5534 dup 0 getp3d /A defpoint3d 5535 1 getp3d /B defpoint3d 5536 result A solidaddsommet /a1 exch def 5537 result B solidaddsommet /a2 exch def 5538 /indnouveauxsommets [ 5539 indnouveauxsommets aload pop a1 a2 5540 ] store 5525 5541 exit %% c est deja scinde 5526 5542 } if … … 5560 5576 %% k1a == k2a == k3a == k4a == 5561 5577 k1a k2a eq k3 0 lt and { 5578 %% 1 pt d'intersection 5562 5579 } { 5563 5580 k1a k2a eq k3 0 ge and { 5581 %% 2 pts d'intersection 5564 5582 /k2a k3a def 5565 5583 /k2 k3 def 5566 5584 } if 5567 5585 k1a k3a eq k4 0 ge and { 5586 %% 2 pts d'intersection 5568 5587 /k2a k4a def 5569 5588 /k2 k4 def … … 5579 5598 ] 5580 5599 result exch lacouleur solidaddface 5600 /indnouveauxsommets [indnouveauxsommets aload pop k1a k2a] store 5581 5601 [ 5582 5602 k2a F k2 1 add n mod get ne { … … 5597 5617 } for 5598 5618 result aenlever solidrmfaces 5619 5620 indnouveauxsommets bubblesort arrayrmdouble 5621 /indnouveauxsommets exch def 5622 %% maintenant, on ajoute la face de plan de coupe 5623 /nouveauxsommets [ 5624 0 1 indnouveauxsommets length 1 sub { 5625 /i exch def 5626 result indnouveauxsommets i get solidgetsommet 5627 } for 5628 ] def 5629 5630 0 0 0 eqplan pointeqplan 0 eq { 5631 /ptref {0 1 1} def 5632 } { 5633 /ptref {0 0 0} def 5634 } ifelse 5635 5636 5637 %% restera a traiter le cas limite ou la nouvelle face existe deja 5638 %% tester si max(indicestries) < nb sommets avant section 5639 nouveauxsommets ptref ordonnepoints3d 5640 /indicestries exch def 5641 /nvelleface [ 5642 0 1 indicestries length 1 sub { 5643 /m exch def 5644 indnouveauxsommets indicestries m get get 5645 } for 5646 ] def 5647 /F result solidgetfaces def 5648 /FC result solidgetfcolors def 5649 /IO result solidgetinouttable def 5650 IO dup 1 get 1 add 1 exch put 5651 result [nvelleface F aload pop] solidputfaces 5652 result [lacouleur FC aload pop] solidputfcolors 5599 5653 result 5654 result 5600 5655 end 5601 5656 } def … … 5608 5663 /solid exch def 5609 5664 /n solid solidnombrefaces def 5610 /lesneg [] def 5611 /lespos [] def 5665 /facecoupe solid 0 solidgetface def 5666 /couleurfacecoupe solid 0 solidgetfcolor def 5667 solid 0 solidrmface 5668 /n n 1 sub store 5669 /lesneg [] def %% indices des faces "positives" 5670 /lespos [] def %% indices des faces negatives" 5612 5671 0 1 n 1 sub { 5613 5672 /i exch def … … 5620 5679 /lesneg [lesneg aload pop i] store 5621 5680 } { 5622 /lesneg [lesneg aload pop i] store5623 /lespos [lespos aload pop i] store5681 % /lesneg [lesneg aload pop i] store 5682 % /lespos [lespos aload pop i] store 5624 5683 } ifelse 5625 5684 } ifelse 5626 5685 } for 5627 5686 solid 5628 dupsolid dup lesneg solidrmfaces 5687 dupsolid dup lesneg solidrmfaces 5629 5688 /result1 exch def 5630 5689 dupsolid dup lespos solidrmfaces 5631 5690 /result2 exch def 5632 5691 pop 5692 %% on rajoute maintenant la face du plan de coupe 5693 result1 facecoupe couleurfacecoupe solidaddface 5694 %% et on verifie l'orientation 5695 result1 dup solidnombrefaces 1 sub solidnormaleface 5696 result1 dup solidnombrefaces 1 sub solidcentreface addv3d 5697 eqplan pointeqplan 0 gt { 5698 %% l'orientation est mauvaise 5699 result1 dup solidnombrefaces 1 sub solidrmface 5700 result2 facecoupe couleurfacecoupe solidaddface 5701 result1 facecoupe reverse couleurfacecoupe solidaddface 5702 } { 5703 %% l'orientation est ok 5704 result2 facecoupe reverse solidaddface 5705 } ifelse 5706 5633 5707 /sommetspos [] def 5634 5708 /sommetsneg [] def … … 5674 5748 } for 5675 5749 sommetspos bubblesort reverse {result2 exch solidrmsommet} apply 5676 5750 5677 5751 result1 result2 5678 5752 end trunk/tests/test_10.tex
r18 r29 26 26 \psframe(-5,-4)(6,9) 27 27 \codejps{ 28 {29 28 -2 1 2 [5 12] newcylindre 29 dup (jaune) (vert) inoutputcolors 30 30 [1 1 1 0] solideqplansepare 31 } exec 32 dup videsolid 33 dup (jaune) (vert) inoutputcolors 31 %dup videsolid 34 32 exch 35 33 {0 0 60 rotateOpoint3d} solidtransform 36 34 {0 2 0 translatepoint3d} solidtransform 37 dup videsolid 38 dup (jaune) (vert) inoutputcolors 39 solidfuz 35 drawsolid** 40 36 drawsolid** 41 37 }
