Changeset 8

Show
Ignore:
Timestamp:
03/22/08 16:39:01 (8 months ago)
Author:
jpv
Message:

Modification des tubes. Ajout de la gestion de la transparence.

Interfaçage des tubes et de la transparence (test_06 et test_07)

Files:

Legend:

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

    r2 r8  
    296296%% 
    297297\pst@def{optionssolides}<% 
     298/pst@fill { \psk@opacityalpha .setopacityalpha fill } def 
     299/strokeopacity \psk@opacityalpha def 
     300/fillopacity \psk@opacityalpha def 
    298301/xunit {\pst@number\psunit } def 
    299302%% /cm {\pst@number\psunit mul} def 
     
    331334/base [ \pst@solides@base ] def 
    332335/axe  { \pst@solides@axe } def 
    333 /function  { \pst@solides@function } def 
     336/function  (\pst@solides@function) def 
    334337/definition  { \pst@solides@definition } def 
    335338/args  { \pst@solides@args} def 
  • trunk/solides.pro

    r7 r8  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.04, 2008/02/20 
     3% Version 3.05, 2008/03/21 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque 
     
    303303%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    304304 
     305%%%%% ### AAAopacity ### 
     306%% les parametres pour la gestion de la transparence 
     307/setstrokeopacity { 
     308   /strokeopacity exch def 
     309} def 
     310/setfillopacity { 
     311  /fillopacity exch def 
     312} def 
     313%% d apres un code de Jean-Michel Sarlat 
     314%% http://melusine.eu.org/syracuse/swf/pdf2swf/setdash/ 
     315%% Mise en reserve de la procedure stroke originelle. 
     316/sysstroke {systemdict /stroke get exec} def 
     317/sysfill {systemdict /fill get exec} def 
     318% Mise en place de la nouvelle procedure 
     319/stroke { 
     320   /strokeopacity where { 
     321      /strokeopacity get 
     322   } { 
     323      1 
     324   } ifelse 
     325   .setopacityalpha sysstroke 
     326} def 
     327/fill { 
     328   /fillopacity where { 
     329      /fillopacity get 
     330   } { 
     331      1 
     332   } ifelse 
     333   .setopacityalpha sysfill 
     334} def 
     335 
    305336%%%%% ### AAAscale ### 
    306337%%%%%%%%%%%%%%%% les deplacements a l echelle %%%%%%%%%%%%%%%%%%% 
     
    19782009   /u defpoint3d 
    19792010   /norme u norme3d def 
    1980    norme 0 eq 
    1981      {u} 
    1982      {u 1 norme div mulv3d 
     2011   norme 0 eq { 
     2012      u 
     2013   } { 
     2014      u 1 norme div mulv3d 
    19832015   } ifelse 
    19842016end 
     
    41024134 
    41034135      %% on marque les aretes 
    4104       0 1 n 1 sub { 
    4105          /j exch def 
    4106          /k1 F i j get_ij def              %% indice sommet1 
    4107          /k2 F i j 1 add n mod get_ij def  %% indice sommet2 
    4108 %         A k1 k2 true put_ij 
    4109 %         A k2 k1 true put_ij 
    4110       } for 
     4136      aretescachees { 
     4137         0 1 n 1 sub { 
     4138            /j exch def 
     4139            /k1 F i j get_ij def              %% indice sommet1 
     4140            /k2 F i j 1 add n mod get_ij def  %% indice sommet2 
     4141            A k1 k2 true put_ij 
     4142            A k2 k1 true put_ij 
     4143         } for 
     4144      } if 
    41114145   } if 
    41124146end 
     
    59936027 
    59946028%%%%% ### newtube ### 
     6029 /tub@dernierk1 [1 0 0] def 
     6030 /tub@dernierk2 [0 1 0] def 
     6031 /tub@dernierk3 [0 0 1] def 
     6032 
     6033/inittube { 
     60342 dict begin 
     6035   normalize3d /vect3 defpoint3d 
     6036   normalize3d /vect2 defpoint3d 
     6037   normalize3d /vect1 defpoint3d 
     6038   vect1 norme3d 0 eq { 
     6039      vect2 vect3 vectprod3d /vect1 defpoint3d 
     6040   } if 
     6041   vect2 norme3d 0 eq { 
     6042      vect3 vect1 vectprod3d /vect2 defpoint3d 
     6043   } if 
     6044   vect3 norme3d 0 eq { 
     6045      vect1 vect2 vectprod3d /vect3 defpoint3d 
     6046   } if 
     6047   /tub@dernierk1 [vect1] store 
     6048   /tub@dernierk2 [vect2] store 
     6049   /tub@dernierk3 [vect3] store 
     6050end 
     6051} def 
     6052  
    59956053%% syntaxe : tmin tmax (f) array r newtube -> solid 
    59966054%% array = [K N] 
     
    60156073    
    60166074      %% definition du repere de Frenet (k1, k2, k3) au point f(a) 
    6017       a0 lafonction /M defpoint3d 
    6018       a0 laderivee normalize3d /k1 defpoint3d 
    6019       a0 laderivee2nd normalize3d /k2 defpoint3d 
    6020       k1 k2 vectprod3d /k3 defpoint3d 
    6021     
     6075      a0 lafonction pstrickactionR3 /M defpoint3d 
     6076      a0 laderivee normalize3d pstrickactionR3 /k1 defpoint3d 
     6077      a0 laderivee2nd normalize3d pstrickactionR3 /k2 defpoint3d 
     6078      k1 norme3d 0 eq { 
     6079         tub@dernierk1 aload pop pstrickactionR3 /k1 defpoint3d 
     6080      } { 
     6081         /tub@dernierk1 [k1] store 
     6082      } ifelse 
     6083      k2 norme3d 0 eq { 
     6084         tub@dernierk2 aload pop pstrickactionR3 /k2 defpoint3d 
     6085      } { 
     6086         /tub@dernierk2 [k2] store 
     6087      } ifelse 
     6088      k1 k2 vectprod3d normalize3d pstrickactionR3 /k3 defpoint3d 
     6089      k3 norme3d 0 eq { 
     6090          tub@dernierk3 aload pop pstrickactionR3 /k3 defpoint3d 
     6091      } { 
     6092         /tub@dernierk3 [k3] store 
     6093      } ifelse 
     6094      k3 k1 vectprod3d normalize3d pstrickactionR3 /k2 defpoint3d 
     6095      /tub@dernierk2 [k2] store 
    60226096      /@n 360 N div def %% le pas angulaire 
    60236097      0 @n 360 @n sub { 
    6024          /i exch def 
     6098         /@i exch def 
    60256099         M 
    6026          k2 i cos @r mul mulv3d addv3d 
    6027          k3 i sin @r mul mulv3d addv3d 
     6100         k2 @i cos @r mul mulv3d addv3d 
     6101         k3 @i sin @r mul mulv3d addv3d 
    60286102      } for 
    60296103   } for 
     
    65496623/pst-courbe { 
    65506624   solidlinewidth setlinewidth 
    6551    range aload pop {function} CourbeR3 
     6625   r 0 eq { 
     6626      range aload pop {function cvx exec} CourbeR3 
     6627   } { 
     6628      range aload pop function r ngrid newtube 
     6629      gere_pstricks_opt %% r function [36 12] newtube 
     6630   } ifelse 
    65526631} def 
    65536632 
     
    65616640      } if 
    65626641   } ifelse 
    6563    { function } newsurfaceparametree 
     6642   { function cvx exec } newsurfaceparametree 
    65646643   dup videsolid 
    65656644   gere_pstricks_opt 
     
    66336712   newpath 
    66346713      linecolor 
    6635       range aload pop { function } CourbeR2_ 
     6714      range aload pop { function cvx exec } CourbeR2_ 
    66366715      gere_pstricks_proj_opt 
    66376716} def 
     
    66416720   newpath 
    66426721      linecolor 
    6643       range aload pop {} { function } Courbeparam_ 
     6722      range aload pop {} { function cvx exec } Courbeparam_ 
    66446723      gere_pstricks_proj_opt 
    66456724} def