Changeset 71
- Timestamp:
- 06/27/08 15:21:35 (5 months ago)
- Files:
-
- trunk/pst-solides3d.tex (modified) (2 diffs)
- trunk/solides.pro (modified) (19 diffs)
- trunk/tests/test_21.pdf (modified) (previous)
- trunk/tests/test_21.tex (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/pst-solides3d.tex
r69 r71 20 20 \ifx\MultidoLoaded\endinput\else\input multido.tex \fi 21 21 % JPV & ML & AS 22 \def\fileversion{3.3 1}23 \def\filedate{2008/06/2 5}22 \def\fileversion{3.32} 23 \def\filedate{2008/06/27} 24 24 \message{`PSTSOLIDESIIID' v\fileversion, \filedate} 25 25 % … … 981 981 /texte (\pst@solides@text) def 982 982 /pos (\pst@solides@pos) def 983 /proj-definition (\pst@solides@definition) def 984 /proj-args { \pst@solides@args} def 985 \ifx\pst@solides@name\@empty 986 \else 987 /projname (\pst@solides@name) def 988 \fi 983 989 \ifx\pst@solides@plan\@empty 984 990 \else trunk/solides.pro
r70 r71 1 1 %! 2 2 % PostScript prologue for pst-solides3d.tex. 3 % Version 3. 38, 2008/06/263 % Version 3.40, 2008/06/27 4 4 % 5 5 %% COPYRIGHT 2008 by Jean-Paul Vignault … … 305 305 /sysstroke {systemdict /stroke get exec} def 306 306 /sysfill {systemdict /fill get exec} def 307 /sysatan {systemdict /atan get exec} def 308 /atan {2 copy 0 0 eqp {0} {sysatan} ifelse} def 307 309 % Mise en place de la nouvelle procedure 308 310 /stroke { … … 481 483 /oldarrowscale {1 1} def 482 484 /oldarrowangle 0 def %% pour l'utilisateur 485 486 %%%%% ### milieu ### 487 %% syntaxe~: A B milieu 488 /milieu { 489 %% xA yA xB yB 490 3 -1 roll %% xA xB yB yA 491 add 2 div %% xA xB yM 492 3 1 roll %% yM xA xB 493 add 2 div %% yM xM 494 exch 495 } def 483 496 484 497 %%%%% ### fin insertion ### … … 4049 4062 dup isarray { 4050 4063 /tableaffectation exch def 4051 /mode -1 def4064 /mode -1 def 4052 4065 } { 4053 4066 /mode defaultsolidmode def … … 4165 4178 /solidtransform { 4166 4179 3 dict begin 4167 / f exch def4180 /@f exch def 4168 4181 /solid exch def 4169 4182 solid issolid not { … … 4172 4185 } if 4173 4186 /les_sommets 4174 solid solidgetsommets { f} papply3d4187 solid solidgetsommets {@f} papply3d 4175 4188 def 4176 4189 solid les_sommets solidputsommets … … 5886 5899 5887 5900 %%%%% ### solidchanfreine ### 5888 %% syntaxe : solid coeff solidchanfreine 5901 %% syntaxe : solid coeff solidchanfreine --> solid 5889 5902 /solidchanfreine { 5890 5903 10 dict begin … … 6553 6566 } def 6554 6567 6555 %%%%% ### dualpolyedre ###6556 %% syntaxe : solid dualpolyedreregulier --> solid6557 %% syntaxe : solid r dualpolyedreregulier --> solid6558 %% si le nombre r est present, projette les nouveaux sommets sur la sphere de centre O , de rayon r6559 /dualpolyedreregulier {6560 20 dict begin6561 dup isnum {6562 /r exch def6563 /projection true def6564 } {6565 /projection false def6566 } ifelse6567 /solid exch def6568 solid dupsolid /result exch def pop6569 /n solid solidnombrefaces def6570 /N solid solidnombresommets def6571 /facesaenlever [] def6572 %% pour chacun des sommets6573 0 1 N 1 sub {6574 %% sommet d indice i6575 /i exch def6576 %% indicesfacesadj = liste des indices des faces ou on trouve le sommet i6577 /indicesfacesadj solid i solidfacesadjsommet def6578 %% on recupere les centres des faces concernees6579 /nouveauxsommets [6580 0 1 indicesfacesadj length 1 sub {6581 /k exch def6582 solid indicesfacesadj k get solidgetsommetsface isobarycentre3d6583 } for6584 ] def6585 %% et on pose G = barycentre de ces points6586 nouveauxsommets isobarycentre3d /G defpoint3d6587 %% il faut ordonner ces sommets6588 nouveauxsommets 0 getp3d /ptref defpoint3d6589 G solid i solidgetsommet vecteur3d /vecteurnormal defpoint3d6590 nouveauxsommets duparray exch pop6591 {1 dict begin6592 /M defpoint3d6593 G ptref vecteur3d6594 G M vecteur3d6595 vecteurnormal angle3doriente6596 end} papply3d6597 doublebubblesort pop6598 %% nos sommets sont tries6599 /indicesommetstries exch def6600 projection {6601 %% on projette les sommets sur la sphere6602 /nouveauxsommets [ nouveauxsommets {normalize3d r mulv3d} papply3d aload pop ] store6603 } if6604 %% puis on les rajoute au solide6605 /nouveauxindices [6606 0 1 nouveauxsommets length 3 idiv 1 sub {6607 /k exch def6608 result nouveauxsommets k getp3d solidaddsommet6609 } for6610 ] def6611 %% ainsi que la face concernee6612 result [6613 0 1 indicesommetstries length 1 sub {6614 /k exch def6615 nouveauxindices indicesommetstries k get get6616 } for6617 ] solidaddface6618 /facesaenlever [ facesaenlever aload pop indicesfacesadj aload pop ] store6619 } for6620 result [0 1 n 1 sub {} for] solidrmfaces6621 [N 1 sub -1 0 {} for] {result exch solidrmsommet} apply6622 result6623 end6624 } def6625 6626 6568 %%%%% ### solidaffine ### 6627 6569 %% syntaxe : solid coeff i solidaffine -> - … … 6883 6825 0 1 indicesommetstries length 1 sub { 6884 6826 /k exch def 6885 nouveauxindices indicesommetstries k get get6827 nouveauxindices indicesommetstries k get get 6886 6828 } for 6887 6829 ] solidaddface … … 7141 7083 theta cos r j mul K div mul 7142 7084 theta sin r j mul K div mul 7143 2 copy f %exch atan 90 div7085 0 %2 copy f %exch atan 90 div 7144 7086 } for 7145 7087 } for … … 7785 7727 } def 7786 7728 7729 %%%%% ### newcylindre ### 7787 7730 %% syntaxe : z0 r0 z1 newcylindre -> solide 7788 7731 %% syntaxe : z0 r0 z1 {mode} newcylindre -> solide … … 7836 7779 } def 7837 7780 7838 %% %% syntaxe : z0 r0 z1 newcylindre -> solide7839 %% /newcylindre {7840 %% dup xcheck {7841 %% 2 index exch7842 %% } {7843 %% dup isarray {7844 %% 2 index exch7845 %% } {7846 %% 1 index7847 %% } ifelse7848 %% } ifelse7849 %% newtronccone7850 %% } def7851 7852 7781 %% syntaxe : z0 r0 z1 newcylindrecreux -> solide 7853 7782 /newcylindrecreux { … … 7855 7784 dup creusesolid 7856 7785 } def 7857 7858 7786 7859 7787 %%%%% ### newtronccone ### … … 7908 7836 7909 7837 %%%%% ### newcone ### 7910 %% %% syntaxe : z0 r0 z1 newcone -> solid7911 %% /newcone {7912 %% 11 dict begin7913 %% [ [/n /N] [1 6] [1 8] [1 10] [3 12] [5 18] ] gestionsolidmode7914 %%7915 %% /z1 exch def7916 %% /r0 exch def7917 %% /z0 exch def7918 %% /dz z1 z0 sub n div def7919 %% /dr r0 n div def7920 %%7921 %% /F [7922 %% %% la base7923 %% [N 1 sub -1 0 {} for]7924 %% %% le dernier etage7925 %% n 1 sub N mul 1 add 1 n N mul 1 sub {7926 %% /i exch def7927 %% [i 1 sub i n N mul]7928 %% } for7929 %% [n N mul 1 sub n 1 sub N mul n N mul]7930 %% %% les autres etages7931 %% 0 1 n 2 sub {7932 %% /j exch def7933 %% 0 N j mul add 1 N N j mul add 2 sub {7934 %% /i exch def7935 %% [i i 1 add dup N add dup 1 sub]7936 %% } for7937 %% [N N j mul add 1 sub N j mul dup N add dup N add 1 sub]7938 %% } for7939 %% ] def7940 %%7941 %% %% tableau des sommets7942 %% /S [7943 %% %% etage no j (in [1; n])7944 %% 0 1 n 1 sub {7945 %% /j exch def7946 %% 0 1 N 1 sub {7947 %% /i exch def7948 %% 360 N idiv i mul cos r0 dr j mul sub mul7949 %% 360 N idiv i mul sin r0 dr j mul sub mul7950 %% z0 dz j mul add7951 %% } for7952 %% } for7953 %% 0 0 z17954 %% ] def7955 %% S F generesolid7956 %% end7957 %% } def7958 %%7959 %% %% syntaxe : z0 r0 z1 newconecreux -> solid7960 /newconecreux {7961 newcone7962 dup 0 solidrmface7963 dup videsolid7964 } def7965 7966 7838 %% syntaxe : z0 r0 z1 newcone -> solid 7967 7839 %% syntaxe : z0 r0 z1 {mode} newcone -> solid … … 8096 7968 } def 8097 7969 7970 %% %% syntaxe : z0 r0 z1 newconecreux -> solid 7971 /newconecreux { 7972 newcone 7973 dup 0 solidrmface 7974 dup videsolid 7975 } def 7976 8098 7977 %%%%% ### newtore ### 8099 7978 %% syntaxe : r R newtore -> solid … … 8532 8411 0 1 Fi length 1 sub { 8533 8412 /j exch def 8534 lefichierfaces Fi j get chaine cvs writestring8413 lefichierfaces Fi j get chaine cvs writestring 8535 8414 lefichierfaces 32 write %% espace 8536 8415 } for … … 9746 9625 pop 9747 9626 planprojpst projectionsifacevisible projpath 9748 /planprojpst where pop /planprojpst undef9627 % /planprojpst where pop /planprojpst undef 9749 9628 } { 9750 9629 /solidprojname where { … … 9797 9676 % newpath 9798 9677 linecolor 9799 xorigine yorigine point_ 9678 % xorigine yorigine point_ 9679 /projname where { 9680 pop 9681 proj-args proj-definition cvx exec projname cvlit defpoint 9682 } if 9683 proj-args proj-definition cvx exec point_ 9800 9684 gere_pstricks_proj_opt 9801 9685 stroke 9686 texte length 0 gt { 9687 20 setfontsize 9688 setTimes 9689 solidlinewidth setlinewidth 9690 newpath 9691 linecolor 9692 texte 9693 proj-args proj-definition cvx exec 9694 pos (text_) append cvx exec 9695 gere_pstricks_proj_opt 9696 fill 9697 } if 9802 9698 } def 9803 9699 … … 9814 9710 /proj-pst-texte { 9815 9711 2 dict begin 9816 setTimes9817 solidlinewidth setlinewidth9818 newpath9819 linecolor9820 texte9821 /planprojpst where {9822 pop9823 xorigine yorigine9824 } {9825 0 09826 } ifelse9827 pos (text_) append cvx exec9828 gere_pstricks_proj_opt9712 setTimes 9713 solidlinewidth setlinewidth 9714 newpath 9715 linecolor 9716 texte 9717 /planprojpst where { 9718 pop 9719 xorigine yorigine 9720 } { 9721 0 0 9722 } ifelse 9723 pos (text_) append cvx exec 9724 gere_pstricks_proj_opt 9829 9725 fill 9830 9726 end trunk/tests/test_21.tex
r69 r71 22 22 \psset{solidmemory} 23 23 \defFunction[algebraic]{F1}(x){3*sin(x)}{}{} 24 %% definition des plans 25 %% exemple 1 24 26 \psSolid[object=plantype, 25 27 definition=equation, 26 args={[ 0 0 1 0]},28 args={[1 0 0 0] 90}, 27 29 base=-4 4 -3 3, 28 30 name=monplan, 29 31 ] 32 %% exemple 2 30 33 \psSolid[object=plantype, 31 34 definition=normalpoint, 32 35 args={1 1 2 [1 1 2 180]}, 33 36 base=-4 4 -3 3, 34 name=monplan, 37 %% decommenter la ligne ci-dessous pour l'exemple 2 38 % name=monplan, 35 39 ] 40 %% dessin du plan 36 41 \psSolid[object=plan, 37 42 definition=plantype, … … 41 46 % action=draw, 42 47 ] 48 %% projete d'un chemin circulaire hachure 43 49 \psProjection[object=chemin, 44 50 fillstyle=hlines,hatchcolor=yellow, … … 47 53 path=2 0 1 cercle 48 54 ] 55 %% projete courbe de fonction numerique 49 56 \psProjection[object=courbe, 50 57 plan=monplan, … … 52 59 linecolor=red, 53 60 function=F1] 61 %% dessin des accessoires" du plan : quadrillage, graduations, base 54 62 \psSolid[object=plan, 55 63 definition=plantype, … … 60 68 action=none, 61 69 ] 70 %% projete d'un texte 62 71 \psProjection[object=texte, 63 72 plan=monplan, … … 65 74 text=Yes !, 66 75 ](-3,2,0)% 76 %% projete et nommage d'un point 67 77 \psProjection[object=point, 78 args=-2 1, 79 name=A, 80 text=A, 68 81 plan=monplan, 69 82 linecolor=red, 70 ](-2,1,0)% 83 pos=uc, 84 ] 85 %% projete et nommage d'un point 71 86 \psProjection[object=point, 87 args=1 2, 72 88 plan=monplan, 73 linecolor=yellow, 74 ](0,0,0)% 89 name=B, 90 text=B, 91 linecolor=blue, 92 pos=ur, 93 ] 94 %% calcul d'un milieu 95 \psProjection[object=point, 96 definition=milieu, 97 args=A B, 98 plan=monplan, 99 name=C, 100 text=C, 101 pos=uc 102 ] 75 103 \psProjection[object=vecteur, 76 104 origine=1 1, … … 79 107 linecolor=orange, 80 108 ](-2,0,0)% 81 %% \psPoint(0,0,0){O}82 %% \psPoint(1,1,2){O1}\psPoint(1.4,1.4,2.8){K}83 %% \psline[linewidth=.1,linecolor=red](O1)(K)84 %% \psline[linestyle=dashed](O)(O1)85 %% \psProjection[object=chemin,86 %% linewidth=.1,87 %% linecolor=green,88 %% normal=1 1 2 180,89 %% path=90 %% 0 0 smoveto91 %% 1 0 slineto](1,1,2)92 %% \psProjection[object=chemin,93 %% linewidth=.1,94 %% linecolor=blue,95 %% normal=1 1 2 180,96 %% path=97 %% 0 0 smoveto98 %% 0 1 slineto](1,1,2)99 109 \composeSolid 100 110 \axesIIID(4,4,2)(5,5,6)
