Changeset 71

Show
Ignore:
Timestamp:
06/27/08 15:21:35 (5 months ago)
Author:
jpv
Message:

Modif de point pour \psProjection

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pst-solides3d.tex

    r69 r71  
    2020\ifx\MultidoLoaded\endinput\else\input multido.tex \fi 
    2121% JPV & ML & AS 
    22 \def\fileversion{3.31
    23 \def\filedate{2008/06/25
     22\def\fileversion{3.32
     23\def\filedate{2008/06/27
    2424\message{`PSTSOLIDESIIID' v\fileversion, \filedate} 
    2525% 
     
    981981/texte (\pst@solides@text) def 
    982982/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 
    983989\ifx\pst@solides@plan\@empty 
    984990   \else 
  • trunk/solides.pro

    r70 r71  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.38, 2008/06/26 
     3% Version 3.40, 2008/06/27 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault 
     
    305305/sysstroke {systemdict /stroke get exec} def 
    306306/sysfill {systemdict /fill get exec} def 
     307/sysatan {systemdict /atan get exec} def 
     308/atan {2 copy 0 0 eqp {0} {sysatan} ifelse} def 
    307309% Mise en place de la nouvelle procedure 
    308310/stroke { 
     
    481483/oldarrowscale {1 1} def 
    482484/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 
    483496 
    484497%%%%% ### fin insertion ### 
     
    40494062      dup isarray { 
    40504063         /tableaffectation exch def 
    4051         /mode -1 def 
     4064        /mode -1 def 
    40524065      } { 
    40534066         /mode defaultsolidmode def 
     
    41654178/solidtransform { 
    416641793 dict begin 
    4167    /f exch def 
     4180   /@f exch def 
    41684181   /solid exch def 
    41694182   solid issolid not { 
     
    41724185   } if 
    41734186   /les_sommets 
    4174       solid solidgetsommets {f} papply3d 
     4187      solid solidgetsommets {@f} papply3d 
    41754188   def 
    41764189   solid les_sommets solidputsommets 
     
    58865899 
    58875900%%%%% ### solidchanfreine ### 
    5888 %% syntaxe : solid coeff solidchanfreine 
     5901%% syntaxe : solid coeff solidchanfreine --> solid 
    58895902/solidchanfreine { 
    5890590310 dict begin 
     
    65536566} def 
    65546567 
    6555 %%%%% ### dualpolyedre ### 
    6556 %% syntaxe : solid dualpolyedreregulier --> solid 
    6557 %% syntaxe : solid r dualpolyedreregulier --> solid 
    6558 %% si le nombre r est present, projette les nouveaux sommets sur la sphere de centre O , de rayon r 
    6559 /dualpolyedreregulier { 
    6560 20 dict begin 
    6561    dup isnum { 
    6562       /r exch def 
    6563       /projection true def 
    6564    } { 
    6565       /projection false def 
    6566    } ifelse 
    6567    /solid exch def 
    6568    solid dupsolid /result exch def pop 
    6569    /n solid solidnombrefaces def 
    6570    /N solid solidnombresommets def 
    6571    /facesaenlever [] def 
    6572    %% pour chacun des sommets 
    6573    0 1 N 1 sub { 
    6574       %% sommet d indice i 
    6575       /i exch def 
    6576       %% indicesfacesadj = liste des indices des faces ou on trouve le sommet i 
    6577       /indicesfacesadj solid i solidfacesadjsommet def 
    6578       %% on recupere les centres des faces concernees 
    6579       /nouveauxsommets [ 
    6580          0 1 indicesfacesadj length 1 sub { 
    6581             /k exch def  
    6582             solid indicesfacesadj k get solidgetsommetsface isobarycentre3d 
    6583          } for 
    6584       ] def 
    6585       %% et on pose G = barycentre de ces points 
    6586       nouveauxsommets isobarycentre3d /G defpoint3d 
    6587       %% il faut ordonner ces sommets 
    6588       nouveauxsommets 0 getp3d /ptref defpoint3d 
    6589       G solid i solidgetsommet vecteur3d /vecteurnormal defpoint3d 
    6590       nouveauxsommets duparray exch pop 
    6591       {1 dict begin 
    6592          /M defpoint3d 
    6593          G ptref vecteur3d 
    6594          G M vecteur3d 
    6595          vecteurnormal angle3doriente 
    6596       end} papply3d 
    6597       doublebubblesort pop 
    6598       %% nos sommets sont tries 
    6599       /indicesommetstries exch def 
    6600       projection { 
    6601          %% on projette les sommets sur la sphere 
    6602          /nouveauxsommets [ nouveauxsommets {normalize3d r mulv3d} papply3d aload pop ] store 
    6603       } if 
    6604       %% puis on les rajoute au solide 
    6605       /nouveauxindices [ 
    6606          0 1 nouveauxsommets length 3 idiv 1 sub { 
    6607             /k exch def 
    6608             result nouveauxsommets k getp3d solidaddsommet 
    6609          } for 
    6610       ] def 
    6611       %% ainsi que la face concernee 
    6612       result [ 
    6613          0 1 indicesommetstries length 1 sub { 
    6614             /k exch def 
    6615          nouveauxindices indicesommetstries k get get 
    6616          } for  
    6617       ] solidaddface 
    6618       /facesaenlever [ facesaenlever aload pop indicesfacesadj aload pop ] store 
    6619    } for 
    6620    result [0 1 n 1 sub {} for] solidrmfaces 
    6621    [N 1 sub -1 0 {} for] {result exch solidrmsommet} apply 
    6622    result 
    6623 end 
    6624 } def 
    6625  
    66266568%%%%% ### solidaffine ### 
    66276569%% syntaxe : solid coeff i solidaffine -> - 
     
    68836825         0 1 indicesommetstries length 1 sub { 
    68846826            /k exch def 
    6885          nouveauxindices indicesommetstries k get get 
     6827       nouveauxindices indicesommetstries k get get 
    68866828         } for  
    68876829      ] solidaddface 
     
    71417083             theta cos r j mul K div mul 
    71427084             theta sin r j mul K div mul 
    7143              2 copy f %exch atan 90 div 
     7085             0 %2 copy f %exch atan 90 div 
    71447086          } for 
    71457087       } for 
     
    77857727} def 
    77867728 
     7729%%%%% ### newcylindre ###  
    77877730%% syntaxe : z0 r0 z1 newcylindre -> solide 
    77887731%% syntaxe : z0 r0 z1 {mode} newcylindre -> solide 
     
    78367779} def 
    78377780 
    7838 %% %% syntaxe : z0 r0 z1 newcylindre -> solide 
    7839 %% /newcylindre { 
    7840 %%    dup xcheck { 
    7841 %%       2 index exch 
    7842 %%    } { 
    7843 %%       dup isarray { 
    7844 %%          2 index exch 
    7845 %%       } { 
    7846 %%          1 index 
    7847 %%       } ifelse 
    7848 %%    } ifelse 
    7849 %%    newtronccone 
    7850 %% } def 
    7851  
    78527781%% syntaxe : z0 r0 z1 newcylindrecreux -> solide 
    78537782/newcylindrecreux { 
     
    78557784   dup creusesolid 
    78567785} def 
    7857  
    78587786 
    78597787%%%%% ### newtronccone ###  
     
    79087836 
    79097837%%%%% ### newcone ###  
    7910 %% %% syntaxe : z0 r0 z1 newcone -> solid 
    7911 %% /newcone { 
    7912 %% 11 dict begin 
    7913 %%    [ [/n /N] [1 6] [1 8] [1 10] [3 12] [5 18] ] gestionsolidmode 
    7914 %%  
    7915 %%    /z1 exch def 
    7916 %%    /r0 exch def 
    7917 %%    /z0 exch def 
    7918 %%    /dz z1 z0 sub n div def 
    7919 %%    /dr r0 n div def 
    7920 %%  
    7921 %%    /F [ 
    7922 %%       %% la base 
    7923 %%       [N 1 sub -1 0 {} for] 
    7924 %%       %% le dernier etage 
    7925 %%       n 1 sub N mul 1 add 1 n N mul 1 sub { 
    7926 %%            /i exch def 
    7927 %%            [i 1 sub i n N mul] 
    7928 %%       } for 
    7929 %%       [n N mul 1 sub n 1 sub N mul n N mul] 
    7930 %%       %% les autres etages 
    7931 %%       0 1 n 2 sub { 
    7932 %%          /j exch def 
    7933 %%          0 N j mul add 1 N N j mul add 2 sub { 
    7934 %%             /i exch def 
    7935 %%             [i i 1 add dup N add dup 1 sub] 
    7936 %%          } for 
    7937 %%          [N N j mul add 1 sub N j mul dup N add dup N add 1 sub] 
    7938 %%       } for 
    7939 %%    ] def 
    7940 %%  
    7941 %%    %% tableau des sommets 
    7942 %%    /S [ 
    7943 %%       %% etage no j (in [1; n]) 
    7944 %%       0 1 n 1 sub { 
    7945 %%          /j exch def 
    7946 %%          0 1 N 1 sub { 
    7947 %%              /i exch def 
    7948 %%              360 N idiv i mul cos r0 dr j mul sub mul 
    7949 %%              360 N idiv i mul sin r0 dr j mul sub mul 
    7950 %%              z0 dz j mul add 
    7951 %%          } for 
    7952 %%       } for 
    7953 %%       0 0 z1 
    7954 %%    ] def 
    7955 %%    S F generesolid 
    7956 %% end 
    7957 %% } def 
    7958 %%  
    7959 %% %% syntaxe : z0 r0 z1 newconecreux -> solid 
    7960  /newconecreux { 
    7961     newcone 
    7962     dup 0 solidrmface 
    7963     dup videsolid 
    7964  } def 
    7965  
    79667838%% syntaxe : z0 r0 z1 newcone -> solid 
    79677839%% syntaxe : z0 r0 z1 {mode} newcone -> solid 
     
    80967968} def 
    80977969 
     7970%% %% syntaxe : z0 r0 z1 newconecreux -> solid 
     7971 /newconecreux { 
     7972    newcone 
     7973    dup 0 solidrmface 
     7974    dup videsolid 
     7975 } def 
     7976 
    80987977%%%%% ### newtore ###  
    80997978%% syntaxe : r R newtore -> solid 
     
    85328411      0 1 Fi length 1 sub { 
    85338412         /j exch def 
    8534         lefichierfaces Fi j get chaine cvs writestring 
     8413        lefichierfaces Fi j get chaine cvs writestring 
    85358414         lefichierfaces 32 write %% espace 
    85368415      } for 
     
    97469625         pop 
    97479626         planprojpst projectionsifacevisible projpath 
    9748        /planprojpst where pop /planprojpst undef 
     9627%      /planprojpst where pop /planprojpst undef 
    97499628      } { 
    97509629         /solidprojname where { 
     
    97979676%   newpath 
    97989677   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_ 
    98009684   gere_pstricks_proj_opt 
    98019685   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 
    98029698} def 
    98039699 
     
    98149710/proj-pst-texte { 
    981597112 dict begin 
    9816       setTimes  
    9817       solidlinewidth setlinewidth 
    9818       newpath 
    9819       linecolor 
    9820       texte  
    9821       /planprojpst where { 
    9822          pop 
    9823         xorigine yorigine 
    9824       } { 
    9825          0 0 
    9826       } ifelse 
    9827       pos (text_) append cvx exec 
    9828       gere_pstricks_proj_opt 
     9712   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 
    98299725fill 
    98309726end 
  • trunk/tests/test_21.tex

    r69 r71  
    2222\psset{solidmemory} 
    2323\defFunction[algebraic]{F1}(x){3*sin(x)}{}{} 
     24%% definition des plans 
     25%% exemple 1 
    2426\psSolid[object=plantype, 
    2527   definition=equation, 
    26    args={[0 0 1 0]}, 
     28   args={[1 0 0 0] 90}, 
    2729   base=-4 4 -3 3, 
    2830   name=monplan, 
    2931] 
     32%% exemple 2 
    3033\psSolid[object=plantype, 
    3134   definition=normalpoint, 
    3235   args={1 1 2 [1 1 2 180]}, 
    3336   base=-4 4 -3 3, 
    34    name=monplan, 
     37%% decommenter la ligne ci-dessous pour l'exemple 2 
     38%   name=monplan, 
    3539] 
     40%% dessin du plan 
    3641\psSolid[object=plan, 
    3742   definition=plantype, 
     
    4146%   action=draw, 
    4247] 
     48%% projete d'un chemin circulaire hachure 
    4349\psProjection[object=chemin, 
    4450   fillstyle=hlines,hatchcolor=yellow, 
     
    4753   path=2 0 1 cercle 
    4854] 
     55%% projete courbe de fonction numerique 
    4956\psProjection[object=courbe, 
    5057   plan=monplan, 
     
    5259   linecolor=red, 
    5360   function=F1] 
     61%% dessin des accessoires" du plan : quadrillage, graduations, base 
    5462\psSolid[object=plan, 
    5563   definition=plantype, 
     
    6068   action=none, 
    6169] 
     70%% projete d'un texte 
    6271\psProjection[object=texte, 
    6372   plan=monplan, 
     
    6574   text=Yes !, 
    6675](-3,2,0)% 
     76%% projete et nommage d'un point 
    6777\psProjection[object=point, 
     78   args=-2 1, 
     79   name=A, 
     80   text=A, 
    6881   plan=monplan, 
    6982   linecolor=red, 
    70 ](-2,1,0)% 
     83   pos=uc, 
     84
     85%% projete et nommage d'un point 
    7186\psProjection[object=point, 
     87   args=1 2, 
    7288   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
    75103\psProjection[object=vecteur, 
    76104   origine=1 1, 
     
    79107   linecolor=orange, 
    80108](-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 smoveto 
    91 %%             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 smoveto 
    98 %%             0 1 slineto](1,1,2) 
    99109\composeSolid 
    100110\axesIIID(4,4,2)(5,5,6)