Changeset 72

Show
Ignore:
Timestamp:
06/28/08 10:28:57 (6 months ago)
Author:
jpv
Message:

Objets points, droite, vecteur pour \psProjection. Modif de Manuel

Files:

Legend:

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

    r71 r72  
    293293surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% 
    294294surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,% 
    295 plan,offfile,geode,load,plantype,point,pie
     295plan,offfile,geode,load,plantype,point,pie,droite,polygone
    296296%% Reservation de macros correspondants aux objects 
    297297\pst@solides@reservednames{object} 
     
    981981/texte (\pst@solides@text) def 
    982982/pos (\pst@solides@pos) def 
    983 /proj-definition (\pst@solides@definition) def 
     983/proj-definition (\pst@solides@definition) def 
    984984/proj-args  { \pst@solides@args} def 
     985/action (\pst@solides@action) def 
    985986\ifx\pst@solides@name\@empty 
    986987    \else 
     
    9991000> 
    10001001 
    1001 %% la macro de projection 
     1002%% 27/06/08 %% %% la macro de projection 
     1003%% 27/06/08 %% \def\psProjection{\def\pst@par{}\pst@object{psProjection}} 
     1004%% 27/06/08 %% \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.,0.)}} 
     1005%% 27/06/08 %% \def\psProjection@ii(#1,#2,#3){{% 
     1006%% 27/06/08 %%       \use@par 
     1007%% 27/06/08 %% \ifPst@solidmemory 
     1008%% 27/06/08 %% \else 
     1009%% 27/06/08 %%   \begin@ClosedObj 
     1010%% 27/06/08 %% \fi 
     1011%% 27/06/08 %%       \addto@pscode{% 
     1012%% 27/06/08 %%          \tx@optionssolides 
     1013%% 27/06/08 %%          SolidesDict begin 
     1014%% 27/06/08 %%          \tx@psProjection 
     1015%% 27/06/08 %%          /CX 0 def 
     1016%% 27/06/08 %%          /CY 0 def 
     1017%% 27/06/08 %%          /CZ 0 def 
     1018%% 27/06/08 %%          /xorigine #1 def 
     1019%% 27/06/08 %%          /yorigine #2 def 
     1020%% 27/06/08 %%          /zorigine #3 def 
     1021%% 27/06/08 %%          % nature du solide : texte, chemin, courbe 
     1022%% 27/06/08 %%          proj-\psk@solides@object\space 
     1023%% 27/06/08 %%          end 
     1024%% 27/06/08 %%       }%<- fin du code ps 
     1025%% 27/06/08 %%          \psk@fillstyle 
     1026%% 27/06/08 %%          \pst@stroke 
     1027%% 27/06/08 %% \ifPst@solidmemory 
     1028%% 27/06/08 %% \else 
     1029%% 27/06/08 %%   \end@ClosedObj 
     1030%% 27/06/08 %% \fi 
     1031%% 27/06/08 %%   }} 
     1032 
     1033\makeatletter 
     1034    %% la macro de projection 
    10021035\def\psProjection{\def\pst@par{}\pst@object{psProjection}} 
    1003 \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.,0.)}} 
    1004 \def\psProjection@ii(#1,#2,#3){{% 
     1036\def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.)}} 
     1037\def\psProjection@ii(#1,#2){{% 
     1038     \def\@tempb{#2}% 
    10051039      \use@par 
    10061040\ifPst@solidmemory 
     
    10151049         /CY 0 def 
    10161050         /CZ 0 def 
    1017          /xorigine #1 def 
    1018          /yorigine #2 def 
    1019          /zorigine #3 def 
     1051         \ifx\@tempb\@empty 
     1052         #1 /yorigine exch def /xorigine exch def 
     1053         \else 
     1054         #1 #2 /yorigine exch def /xorigine exch def 
     1055         \fi 
    10201056         % nature du solide : texte, chemin, courbe 
    10211057         proj-\psk@solides@object\space 
     
    10291065\fi 
    10301066  }} 
    1031  
    1032  
     1067\makeatother 
    10331068 
    10341069%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  • trunk/solides.pro

    r71 r72  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.40, 2008/06/27 
     3% Version 3.41, 2008/06/27 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault 
     
    410410%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    411411 
     412%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     413%%%%                  points                            %%%% 
     414%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     415 
     416%%%%% ### setxrange ### 
     417/setxrange { 
     418   /xmax exch def 
     419   /xmin exch def 
     420} def 
     421 
     422%%%%% ### setyrange ### 
     423/setyrange { 
     424   /ymax exch def 
     425   /ymin exch def 
     426} def 
     427 
     428%%%%% ### defpoint ### 
     429%% syntaxe : xA yA /A defpoint 
     430/defpoint { 
     4311 dict begin 
     432   /t@mp@r@ire exch def 
     433   [ 3 1 roll ] cvx t@mp@r@ire exch  
     434end def 
     435} def 
     436 
     437%%%%% ### milieu ### 
     438%% syntaxe~: A B milieu  
     439/milieu {   
     440                %% xA yA xB yB 
     441   3 -1 roll    %% xA xB yB yA  
     442   add 2 div    %% xA xB yM 
     443   3 1 roll     %% yM xA xB  
     444   add 2 div    %% yM xM 
     445   exch 
     446} def 
     447 
     448%%%%% ### parallelopoint ### 
     449%% syntaxe : A B C parallelopoint --> point D, tel que ABCD parallelogramme 
     450/parallelopoint { 
     45111 dict begin 
     452   /yC exch def 
     453   /xC exch def 
     454   /yB exch def 
     455   /xB exch def 
     456   /yA exch def 
     457   /xA exch def 
     458   /A {xA yA} def 
     459   /B {xB yB} def 
     460   /C {xC yC} def 
     461   /d1 {A B C paral} def 
     462   /d2 {B C A paral} def 
     463   d1 d2 interdroite 
     464end 
     465} def 
     466 
     467%%%%% ### translatepoint ### 
     468%% syntaxe : A u translatepoint --> B image de A par la translation de vecteur u 
     469/translatepoint { 
     470   addv 
     471} def 
     472 
     473%%%%% ### rotatepoint ### 
     474%% syntaxe : B A r rotatepoint --> C image de B par la rotation de centre A, 
     475%% d'angle r (en degre) 
     476%% En prenant les affixes des pts associes, il vient 
     477%%    (zC - zA) = (zB-zA) e^(ir) 
     478%% soit  
     479%%    zC = (zB-zA) e^(ir) + zA 
     480/rotatepoint {     %% B, A, r 
     481   5 copy          %% B, A, r, B, A, r 
     482   cos 5 1 roll    %% B, A, r, cos r, B, A 
     483   4 1 roll        %% B, A, r, cos r, yA, B, xA 
     484   4 1 roll        %% B, A, r, cos r, A, B  
     485   vecteur         %% B, A, r, cos r, xB-xA, yB-yA 
     486   4 -1 roll sin   %% B, A, cos r, xB-xA, yB-yA, sin r 
     487   4 copy mul      %% B, A, cos r, xB-xA, yB-yA, sin r, cos r, xB-xA, (yB-yA) sin r 
     488   7 1 roll mul    %% B, A, (yB-yA) sin r, cos r, xB-xA, yB-yA, sin r, cos r (xB-xA) 
     489   5 1 roll        %% B, A, (yB-yA) sin r, cos r (xB-xA), cos r, xB-xA, yB-yA, sin r 
     490   exch            %% B, A, (yB-yA) sin r, cos r (xB-xA), cos r, xB-xA, sin r, yB-yA 
     491   4 -1 roll mul   %% B, A, (yB-yA) sin r, cos r (xB-xA), xB-xA, sin r, (yB-yA)cos r 
     492   3 1 roll mul    %% B, A, (yB-yA) sin r, cos r (xB-xA), (yB-yA) cos r, (xB-xA) sin r 
     493   add             %% B, A, (yB-yA) sin r, cos r (xB-xA), (yB-yA) cos r +(xB-xA) sin r 
     494   3 1 roll        %% B, A, (yB-yA) cos r + (xB-xA) sin r, (yB-yA) sin r, cos r (xB-xA),  
     495   exch sub        %% B, A, (yB-yA) cos r + (xB-xA) sin r, cos r (xB-xA)-(yB-yA) sin r  
     496   exch            %% B, zA, (zB-zA) e^(ir) 
     497   addv 
     498   3 -1 roll pop 
     499   3 -1 roll pop 
     500} def 
     501 
     502%%%%% ### hompoint ### 
     503%% syntaxe : B A alpha hompoint -> le point A' tel que AA' = alpha AB 
     504/hompoint { 
     505   5 copy 
     506   pop 
     507   vecteur      %% vecteur BA 
     508   3 -1 roll 
     509   neg 
     510   mulv   %% alpha x vecteur AB 
     511   addv 
     512   4 -1 roll 
     513   4 -1 roll 
     514   pop pop 
     515} def 
     516 
     517%%%%% ### orthoproj ### 
     518%% syntaxe : A D orthoproj --> B, le projete orthogonal de A sur D 
     519/orthoproj { 
     520   6 -1 roll 
     521   6 -1 roll            %% D A 
     522   6 copy               %% D A D A 
     523   7 -1 roll pop 
     524   7 -1 roll pop        %% D D A 
     525   perp  
     526   interdroite 
     527} def 
     528 
     529%% syntaxe : A projx --> le projete orthogonal de A sur Ox 
     530/projx { 
     531   pop 0 
     532} def 
     533 
     534%% syntaxe : A projy --> le projete orthogonal de A sur Oy 
     535/projy { 
     536   exch pop 0 exch 
     537} def 
     538 
     539%%%%% ### sympoint ### 
     540%% syntaxe : A I sympoint --> point A', le symetrique de A par rapport 
     541%% au point I 
     542/sympoint { 
     543   4 copy 
     544   pop pop 
     545   vecteur  
     546   -2 mulv 
     547   addv 
     548} def 
     549 
     550%%%%% ### axesympoint ### 
     551%% syntaxe : A D axesympoint --> point B, le symetrique de A par rapport 
     552%% a la droite D 
     553/axesympoint { 
     5542 dict begin 
     555   6 copy 
     556   pop pop pop pop 
     557   /yA exch def 
     558   /xA exch def 
     559   orthoproj  
     560   xA yA vecteur  
     561   -2 mulv 
     562   xA yA addv 
     563end    
     564} def 
     565 
     566%%%%% ### cpoint ### 
     567%% syntaxe : alpha C cpoint -> M, le point du cercle C correspondant a 
     568%% l'angle alpha 
     569/cpoint {           %% a, xI, yI, r  
     5701 dict begin 
     571   dup              %% a, xI, yI, r, r 
     572   5 -1 roll        %% xI, yI, r, r, a 
     573   /alpha exch def   
     574   alpha cos mul    %% xI, yI, r, r cos a 
     575   exch 
     576   alpha sin mul    %% xI, yI, r cos a, r sin a 
     577   3 -1 roll add    %% xI, r cos a, yI + r sin a 
     578   3 1 roll         %% yI + r sin a, xI, r cos a,  
     579   add exch         %% xI + r cos a, yI + r sin a 
     580end 
     581} def 
     582 
     583%%%%% ### xdpoint ### 
     584%% x A B xdpoint : le point de la droite (AB) d'abscisse x 
     585/xdpoint { 
     5865 dict begin 
     587   /pt2 defpoint 
     588   /pt1 defpoint 
     589   /x exch def 
     590   /a pt1 pt2 coeffdir def 
     591   /b pt1 pt2 ordorig def 
     592   x dup a mul b add 
     593end    
     594} def 
     595 
     596%%%%% ### ydpoint ### 
     597%% y A B ydpoint : le point de la droite (AB) d'ordonnee y 
     598/ydpoint { 
     5995 dict begin 
     600   /pt2 defpoint 
     601   /pt1 defpoint 
     602   /y exch def 
     603   pt1 pt2 verticale?  
     604      { 
     605         pt1 pop y 
     606      } 
     607      { 
     608         /a pt1 pt2 coeffdir def 
     609         /b pt1 pt2 ordorig def 
     610         y b sub a div y 
     611      } 
     612   ifelse 
     613end    
     614} def 
     615 
     616%%%%% ### fin insertion ### 
     617/interdroites {interdroite} def 
     618 
     619%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     620%%%%                 vecteurs                           %%%% 
     621%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     622 
    412623%%%%% ### vecteur ### 
    413624%% syntaxe~: A B vecteur 
     
    421632} def 
    422633 
    423 %%%%% ### defpoint ### 
    424 %% syntaxe : xA yA /A defpoint 
    425 /defpoint { 
    426 1 dict begin 
    427    /t@mp@r@ire exch def 
    428    [ 3 1 roll ] cvx t@mp@r@ire exch  
    429 end def 
    430 } def 
    431  
    432634%%%%% ### normalize ### 
    433635%% syntaxe : u normalize -> u / ||u|| 
     
    438640   u 1 n div mulv 
    439641end 
     642} def 
     643 
     644%%%%% ### addv ### 
     645%% syntaxe : u v addv --> u+v 
     646/addv {         %% xA yA xB yB 
     647   3 1 roll     %% xA yB yA xB  
     648   4 1 roll     %% xB xA yB yA  
     649   add 3 1 roll %% yB+yA xB xA  
     650   add exch 
     651} def 
     652 
     653%%%%% ### subv ### 
     654%% syntaxe : u v subv --> u - v 
     655/subv { %% xA yA xB yB 
     656   -1 mulv 
     657   addv 
     658} def 
     659 
     660%%%%% ### mulv ### 
     661%% syntaxe : u a mulv --> au 
     662/mulv {   %% xA, yA, a 
     663   dup          %% xA, yA, a, a 
     664   3 1 roll     %% xA, a, yA, a 
     665   mul 3 1 roll %% ayA, xA, a 
     666   mul exch 
     667} def 
     668 
     669%%%%% ### scalprod ### 
     670%% syntaxe : u v scalprod --> le produit scalaire de u par v 
     671/scalprod { 
     6722 dict begin 
     673   /y' exch def 
     674   exch  
     675   /y exch def 
     676   mul y y' mul add 
     677end 
     678} def 
     679 
     680%%%%% ### normal ### 
     681%% syntaxe : u normal --> v tel u.v = 0 
     682/normal { 
     683   neg exch 
    440684} def 
    441685 
     
    484728/oldarrowangle 0 def     %% pour l'utilisateur 
    485729 
    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 
     730%%%%% ### drawvecteur ### 
     731%% syntaxe : A B drawvecteur 
     732/drawvecteur { 
     7332 dict begin 
     734   /B defpoint 
     735   /A defpoint 
     736   [A B] ligne 
     737   A B oldarrow 
     738end 
     739} def 
     740 
     741%%%%% ### fin insertion ### 
     742 
     743%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     744%%%%                  droites                           %%%% 
     745%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     746 
     747%%%%% ### coeffdir ### 
     748%% syntaxe~: A B coeffdir 
     749/coeffdir { 
     750   vecteur exch div 
     751} def 
     752 
     753%%%%% ### ordorig ### 
     754%% syntaxe : A B ordorig 
     755%% attention, la droite est supposee ne pas etre verticale 
     756/ordorig { 
     757   /dr@ite 4 array def 
     758   dr@ite 3 3 -1 roll put 
     759   dr@ite 2 3 -1 roll put 
     760   dr@ite 1 3 -1 roll put 
     761   dr@ite 0 3 -1 roll put 
     762   dr@ite aload pop coeffdir /c@eff exch def 
     763   dr@ite aload pop pop pop  %% xA yA 
     764   exch                      %% yA xA  
     765   c@eff mul neg add 
     766} def 
     767 
     768%%%%% ### verticale ### 
     769%% syntaxe~: A B verticale? 
     770/verticale? { 
     771   pop 2 1 roll pop 
     772   eq 
     773} def 
     774 
     775%% syntaxe : x verticale 
     776/verticale { 
     7771 dict begin 
     778   /x exch def 
     779   x ymin x ymax 
     780end 
     781} def 
     782 
     783%%%%% ### defdroite ### 
     784%% syntaxe : A B droite 
     785/droite { 
     786gsave 
     7876 dict begin 
     788   /yB exch def 
     789   /xB exch def 
     790   /yA exch def 
     791   /xA exch def 
     792   xA yA xB yB 
     793   eqp 
     794      {} 
     795      {  
     796         xA yA xB yB 
     797         verticale? 
     798         { 
     799         newpath 
     800            xA ymin smoveto 
     801            xA ymax slineto 
     802            stockcurrentcpath 
     803         stroke 
     804         } 
     805         { 
     806         newpath 
     807            /alpha xA yA xB yB coeffdir def 
     808            /beta xA yA xB yB ordorig def 
     809            xmin dup alpha mul beta add smoveto 
     810            xmax dup alpha mul beta add slineto 
     811            stockcurrentcpath 
     812         stroke 
     813         } 
     814         ifelse 
     815      } 
     816   ifelse 
     817end 
     818grestore 
     819} def 
     820 
     821%%%%% ### defdroite ### 
     822%% syntaxe : A B /d defdroite 
     823/defdroite { 
     8241 dict begin 
     825   /t@mp@r@ire exch def 
     826   [ 5 1 roll ] cvx t@mp@r@ire exch  
     827end def 
     828} def 
     829 
     830%%%%% ### paral ### 
     831%% syntaxe : D A paral --> droite parallele a D passant par A 
     832/paral { 
     8334 dict begin 
     834   /yA exch def 
     835   /xA exch def 
     836   vecteur 
     837   /u2 exch def 
     838   /u1 exch def 
     839   xA yA 
     840   2 copy 
     841   u1 u2 translatepoint 
     842end 
     843} def 
     844 
     845%%%%% ### interdroite ### 
     846/interdroite { 
     847                %% A B C D 
     848   /dr@ite2 4 array def 
     849   dr@ite2 3 3 -1 roll put 
     850   dr@ite2 2 3 -1 roll put 
     851   dr@ite2 1 3 -1 roll put 
     852   dr@ite2 0 3 -1 roll put 
     853   /dr@ite1 4 array def 
     854   dr@ite1 3 3 -1 roll put 
     855   dr@ite1 2 3 -1 roll put 
     856   dr@ite1 1 3 -1 roll put 
     857   dr@ite1 0 3 -1 roll put 
     858 
     859%%%    %% trace pour deboguage 
     860%%%    dr@ite1 aload pop droite 
     861%%%    dr@ite2 aload pop droite 
     862 
     863%%% Dans tous les cas, on suppose que l'intersection existe 
     864%%%  
     865%%% * la 1ere droite est verticale. les equations reduites sont 
     866%%%       x = a1      et       y = a2 x + b2 
     867%%% Le point d'intersection est : 
     868%%%       {{x = a1, y = b2 + a1 a2}} 
     869%%%  
     870%%% * la 2eme droite est verticale. les equations reduites sont 
     871%%%       x = a1 x+ b1     et       x = a2 
     872%%% Le point d'intersection est : 
     873%%%       {{x = a2, y = b1 + a1 a2}} 
     874%%%  
     875%%% * aucune n'est verticale. Les equations reduites sont 
     876%%%       y = a1 x + b1      et       y = a2 x + b2 
     877%%% Le point d'intersection est : 
     878%%%                 { {     b2 - b1      a1 b2 - a2 b1 } } 
     879%%%                 { { x = -------, y = ------------- } } 
     880%%%                 { {     a1 - a2         a1 - a2    } } 
     881 
     882%%% remarque : pour le moment, je n'arrive pas a rendre mes variables 
     883%%% locales : elle restent globales. Pour que cela ne soit pas trop 
     884%%% genant, je les note respectivement @1, @@1, @2 et @@2 au lieu de a1, 
     885%%% b1, a2 et b2. 
     886 
     887   dr@ite1 aload pop verticale? 
     888      { 
     889         /@1 {dr@ite1 aload pop pop pop pop} def 
     890         /@2 {dr@ite2 aload pop coeffdir} def 
     891         /@@2 {dr@ite2 aload pop ordorig} def 
     892         @1  
     893         @1 @2 mul @@2 add 
     894      } 
     895      { 
     896      dr@ite2 aload pop verticale? 
     897         { 
     898            /@1 {dr@ite1 aload pop coeffdir} def 
     899            /@@1 {dr@ite1 aload pop ordorig} def 
     900            /@2 {dr@ite2 aload pop pop pop pop} def 
     901            @2 
     902            @1 @2 mul @@1 add 
     903         } 
     904         { 
     905            /@1 {dr@ite1 aload pop coeffdir} def 
     906            /@@1 {dr@ite1 aload pop ordorig} def 
     907            /@2 {dr@ite2 aload pop coeffdir} def 
     908            /@@2 {dr@ite2 aload pop ordorig} def 
     909            @@2 @@1 sub @1 @2 sub div 
     910            @1 @@2 mul @2 @@1 mul sub 
     911            @1 @2 sub div 
     912         } 
     913      ifelse 
     914      } 
     915   ifelse 
     916} def 
     917 
     918%%%%% ### perp ### 
     919%% syntaxe : D A perp --> droite perpendiculaire a D passant par A 
     920/perp { 
     9214 dict begin 
     922   /yA exch def 
     923   /xA exch def 
     924   vecteur orthovecteur 
     925   /u2 exch def 
     926   /u1 exch def 
     927   xA yA 
     928   2 copy 
     929   u1 u2 translatepoint 
     930end 
     931} def 
     932 
     933%%%%% ### mediatrice ### 
     934%% synaxe : A B mediatrice --> droite 
     935/mediatrice { 
     936   4 copy  
     937   milieu 
     938   perp 
     939} def 
     940 
     941%%%%% ### bissectrice ### 
     942%% syntaxe : A B C bissectrice --> B E ou E est un point de la bissectrice 
     943/bissectrice { 
     94410 dict begin 
     945   /yC exch def 
     946   /xC exch def 
     947   /yB exch def 
     948   /xB exch def 
     949   /yA exch def 
     950   /xA exch def 
     951   /A {xA yA} def 
     952   /B {xB yB} def 
     953   /C {xC yC} def 
     954   /alpha {A B C tripointangle} def 
     955   B 
     956   A B alpha rotatepoint 
     957   A milieu 
     958end 
    495959} def 
    496960 
     
    10911555   /fill {l@pl@n mybool projpath savefill} def 
    10921556   /masque {} def 
    1093 %   l@pl@n plangetrange aload pop  
    1094 %   setyrange setxrange 
     1557   l@pl@n plangetrange aload pop  
     1558   setyrange setxrange 
     1559   newpath 
     1560      xmin ymin l@pl@n pointplan smoveto 
     1561      xmin ymax l@pl@n pointplan slineto 
     1562      xmax ymax l@pl@n pointplan slineto 
     1563      xmax ymin l@pl@n pointplan slineto 
     1564   closepath clip 
    10951565} def 
    10961566/eprojscene { 
     
    14951965   /startest {true} def 
    14961966   Cercle 
    1497 end 
    1498 } def 
    1499  
    1500 %%%%% ### drawvecteur ### 
    1501 %% syntaxe : A B drawvecteur 
    1502 /drawvecteur { 
    1503 2 dict begin 
    1504    /B defpoint 
    1505    /A defpoint 
    1506    [A B] ligne 
    1507    A B oldarrow 
    15081967end 
    15091968} def 
     
    23932852/normalize3d {unitaire3d} def 
    23942853 
    2395 %%%%% ### mulv ### 
    2396 %% syntaxe : u a mulv --> au 
    2397 /mulv {   %% xA, yA, a 
    2398    dup          %% xA, yA, a, a 
    2399    3 1 roll     %% xA, a, yA, a 
    2400    mul 3 1 roll %% ayA, xA, a 
    2401    mul exch 
    2402 } def 
    2403  
    24042854%%%%% ### geom3d ### 
    24052855%% syntaxe : A k1 B k2 barycentre3d -> G, barycentre du systeme 
     
    33523802         candidat 2 get isarray and 
    33533803         /IO candidat 3 get def 
    3354         IO length 4 eq and 
    3355         IO 0 get isnum and 
    3356         IO 1 get isnum and 
    3357         IO 2 get isnum and 
    3358         IO 3 get isnum and 
     3804        IO length 4 eq and 
     3805        IO 0 get isnum and 
     3806        IO 1 get isnum and 
     3807        IO 2 get isnum and 
     3808        IO 3 get isnum and 
    33593809      } { 
    33603810         false 
     
    40624512      dup isarray { 
    40634513         /tableaffectation exch def 
    4064         /mode -1 def 
     4514        /mode -1 def 
    40654515      } { 
    40664516         /mode defaultsolidmode def 
     
    48355285               face_a_dessiner j 1 add n mod getp3d 
    48365286               solidintersectionplan k get 
    4837               dup isarray { 
    4838                  segment_inter_plan 
    4839               } { 
    4840                  segment_inter_planz 
    4841               } ifelse { 
     5287               dup isarray { 
     5288                  segment_inter_plan 
     5289               } { 
     5290                  segment_inter_planz 
     5291               } ifelse { 
    48425292               1 dict begin 
    48435293                  /table exch def 
     
    49475397               face_a_dessiner j 1 add n mod getp3d 
    49485398               solidintersectionplan k get 
    4949               dup isarray { 
    4950                  segment_inter_plan 
    4951               } { 
    4952                  segment_inter_planz 
    4953               } ifelse { 
     5399               dup isarray { 
     5400                  segment_inter_plan 
     5401               } { 
     5402                  segment_inter_planz 
     5403               } ifelse { 
    49545404               1 dict begin 
    49555405                  /table exch def 
     
    58546304} def 
    58556305 
     6306%%%%% ### fin insertion ### 
     6307%% syntaxe : x y plantype pointplan --> X Y Z 
     6308/pointplan { 
     63095 dict begin 
     6310   /leplan exch def 
     6311   /y exch def 
     6312   /x exch def 
     6313   leplan plangetbase 0 getp3d /U defpoint3d 
     6314   leplan plangetbase 1 getp3d /V defpoint3d 
     6315   U x mulv3d V y mulv3d addv3d 
     6316end 
     6317} def 
    58566318%%%%% ### fin insertion ### 
    58576319 
     
    68257287         0 1 indicesommetstries length 1 sub { 
    68267288            /k exch def 
    6827        nouveauxindices indicesommetstries k get get 
     7289         nouveauxindices indicesommetstries k get get 
    68287290         } for  
    68297291      ] solidaddface 
     
    84118873      0 1 Fi length 1 sub { 
    84128874         /j exch def 
    8413         lefichierfaces Fi j get chaine cvs writestring 
     8875        lefichierfaces Fi j get chaine cvs writestring 
    84148876         lefichierfaces 32 write %% espace 
    84158877      } for 
     
    89969458         solidname (1) append cvlit exch def 
    89979459         dup solidname (0) append cvlit exch def 
    8998         %% 
    8999         solidname (1) append cvx exec 
     9460        %% 
     9461        solidname (1) append cvx exec 
    90009462         solidhollow { 
    90019463            dup videsolid 
     
    90189480            } if 
    90199481         } ifelse 
    9020         pop 
     9482        pop 
    90219483         tx@Dict /solidname undef 
    90229484      } { 
     
    961710079} def 
    961810080 
     10081/pst-trigospherique { 
     100823 dict begin 
     10083gsave 
     10084   solidlinewidth setlinewidth 
     10085   linecolor 
     10086   linestyle 
     10087   args definition cvx exec 
     10088grestore 
     10089end 
     10090} def 
     10091 
    961910092%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    962010093%%%%         procedures pour \psProjection              %%%% 
     
    962410097      /planprojpst where { 
    962510098         pop 
    9626         planprojpst projectionsifacevisible projpath 
    9627 %      /planprojpst where pop /planprojpst undef 
     10099        planprojpst projectionsifacevisible projpath 
     10100%        /planprojpst where pop /planprojpst undef 
    962810101      } { 
    962910102         /solidprojname where { 
     
    967310146 
    967410147/proj-pst-point { 
    9675    solidlinewidth setlinewidth 
    9676 %   newpath 
    9677    linecolor 
    9678 %   xorigine yorigine point_ 
    967910148   /projname where { 
    968010149      pop 
    968110150      proj-args proj-definition cvx exec projname cvlit defpoint 
    9682    } if 
    9683    proj-args proj-definition cvx exec point_ 
    9684    gere_pstricks_proj_opt 
    9685    stroke 
     10151      /projname where pop /projname undef 
     10152   } if 
     10153   action (none) eqstring not { 
     10154      solidlinewidth setlinewidth 
     10155      linecolor 
     10156      proj-args proj-definition cvx exec point_ 
     10157      gere_pstricks_proj_opt 
     10158      stroke 
     10159   } if 
    968610160   texte length 0 gt { 
    9687       20 setfontsize 
     10161      20 setfontsize 
    968810162      setTimes  
    968910163      solidlinewidth setlinewidth 
    969010164      newpath 
    969110165      linecolor 
    9692       texte  
    9693       proj-args proj-definition cvx exec 
     10166      texte proj-args proj-definition cvx exec 
    969410167      pos (text_) append cvx exec 
    969510168      gere_pstricks_proj_opt 
     
    969910172 
    970010173/proj-pst-vecteur { 
    9701    planprojpst bprojscene 
    9702    solidlinewidth setlinewidth 
    9703    linestyle 
    9704    linecolor 
    9705    xorigine yorigine 2 copy origin addv drawvecteur 
    9706    eprojscene 
    9707 %   newpath 
     10174   action (none) eqstring not { 
     10175      planprojpst bprojscene 
     10176      solidlinewidth setlinewidth 
     10177      linestyle 
     10178      linecolor 
     10179      xorigine yorigine 2 copy proj-args proj-definition cvx exec addv drawvecteur 
     10180      eprojscene 
     10181   } if 
     10182   /projname where { 
     10183      pop 
     10184      proj-args proj-definition cvx exec projname cvlit defpoint 
     10185      /projname where pop /projname undef 
     10186   } if 
     10187} def 
     10188 
     10189/proj-pst-droite { 
     10190   action (none) eqstring not { 
     10191      planprojpst bprojscene 
     10192      solidlinewidth setlinewidth 
     10193      linestyle 
     10194      linecolor 
     10195      proj-args proj-definition cvx exec droite 
     10196      eprojscene 
     10197   } if 
     10198   /projname where { 
     10199      pop 
     10200      proj-args proj-definition cvx exec projname cvlit defdroite 
     10201      /projname where pop /projname undef 
     10202   } if 
     10203} def 
     10204 
     10205/proj-pst-polygone { 
     10206   action (none) eqstring not { 
     10207      planprojpst bprojscene 
     10208      solidlinewidth setlinewidth 
     10209      linestyle 
     10210      linecolor 
     10211      proj-definition length 0 eq { 
     10212         [proj-args] 
     10213      } { 
     10214         proj-args  
     10215      } ifelse 
     10216      proj-definition cvx exec polygone 
     10217      eprojscene 
     10218   } if 
     10219   /projname where { 
     10220      pop 
     10221      proj-definition length 0 eq { 
     10222         [proj-args] 
     10223      } { 
     10224         proj-args  
     10225      } ifelse 
     10226      proj-definition cvx exec projname cvlit exch def 
     10227   } if 
    970810228} def 
    970910229 
     
    972710247} def 
    972810248 
    9729 /pst-trigospherique { 
    9730 3 dict begin 
    9731 gsave 
    9732    solidlinewidth setlinewidth 
    9733    linecolor 
    9734    linestyle 
    9735    args definition cvx exec 
    9736 grestore 
    9737 end 
    9738 } def 
    9739  
    974010249% END solides.pro 
  • trunk/tests/test_21.tex

    r71 r72  
    2828   args={[1 0 0 0] 90}, 
    2929   base=-4 4 -3 3, 
    30    name=monplan
     30   name=monplanA
    3131] 
    3232%% exemple 2 
     
    3535   args={1 1 2 [1 1 2 180]}, 
    3636   base=-4 4 -3 3, 
    37 %% decommenter la ligne ci-dessous pour l'exemple 2 
    38 %   name=monplan, 
     37   name=monplanB, 
    3938] 
     39\psset{plan=monplanA} 
    4040%% dessin du plan 
    4141\psSolid[object=plan, 
    4242   definition=plantype, 
    43    args=monplan
     43   args=monplanA
    4444   fillcolor=white, 
    4545   linecolor=yellow, 
     46   plangrid, 
     47   planmarks, 
     48   showBase, 
    4649%   action=draw, 
    4750] 
     51%% %% dessin des accessoires" du plan : quadrillage, graduations, base 
     52%% \psSolid[object=plan, 
     53%%    definition=plantype, 
     54%%    args=monplan, 
     55%%    action=none, 
     56%% ] 
    4857%% projete d'un chemin circulaire hachure 
    4958\psProjection[object=chemin, 
    5059   fillstyle=hlines,hatchcolor=yellow, 
    51    plan=monplan, 
    5260   linecolor=blue, 
    5361   path=2 0 1 cercle 
     
    5563%% projete courbe de fonction numerique 
    5664\psProjection[object=courbe, 
    57    plan=monplan, 
    5865   range=-4 4,resolution=720, 
    5966   linecolor=red, 
    6067   function=F1] 
    61 %% dessin des accessoires" du plan : quadrillage, graduations, base 
    62 \psSolid[object=plan, 
    63    definition=plantype, 
    64    args=monplan, 
    65    plangrid, 
    66    planmarks, 
    67    showBase, 
    68    action=none, 
    69 ] 
    7068%% projete d'un texte 
    7169\psProjection[object=texte, 
    72    plan=monplan, 
    7370   fontsize=20,linecolor=red, 
    7471   text=Yes !, 
    75 ](-3,2,0)% 
     72](-3,2)% 
    7673%% projete et nommage d'un point 
    7774\psProjection[object=point, 
    78    args=-2 1, 
     75   args=-2 -1, 
    7976   name=A, 
    8077   text=A, 
    81    plan=monplan, 
    8278   linecolor=red, 
    8379   pos=uc, 
     
    8682\psProjection[object=point, 
    8783   args=1 2, 
    88    plan=monplan, 
    8984   name=B, 
    9085   text=B, 
     
    9691   definition=milieu, 
    9792   args=A B, 
    98    plan=monplan, 
    9993   name=C, 
    10094   text=C, 
    10195   pos=uc 
    10296] 
     97%% calcul d'un symetrique 
     98\psProjection[object=point, 
     99   definition=sympoint, 
     100   args=A 0 0, 
     101   name=D, 
     102   text=D, 
     103   pos=uc 
     104] 
    103105\psProjection[object=vecteur, 
    104    origine=1 1, 
    105    plan=monplan, 
     106   args=1 1, 
     107%   action=none, 
     108   name=U, 
    106109   linestyle=dashed, 
    107110   linecolor=orange, 
    108 ](-2,0,0)% 
     111](A,)% 
     112%% point E tel que vect(AE) = U 
     113\psProjection[object=point, 
     114   definition=translatepoint, 
     115   args=A U, 
     116   name=E, 
     117   text=E, 
     118   pos=uc 
     119
     120%% une droite 
     121\psProjection[object=droite, 
     122   args=A B, 
     123   name=D1, 
     124
     125%% une autre droite 
     126\psProjection[object=droite, 
     127   args=E D, 
     128   name=D2, 
     129
     130%% point F = D1 inter D2 
     131\psProjection[object=point, 
     132   definition=interdroites, 
     133   args=D1 D2, 
     134   name=F, 
     135   text=F, 
     136   pos=uc 
     137
     138%% calcul d'un parallelogramme 
     139\psProjection[object=point, 
     140   definition=parallelopoint, 
     141   args=C B D, 
     142   name=G, 
     143   text=G, 
     144   pos=uc 
     145
     146%% dessin d'un polygone 
     147\psProjection[object=polygone, 
     148   args=C B D G, 
     149
    109150\composeSolid 
    110151\axesIIID(4,4,2)(5,5,6)