Changeset 27

Show
Ignore:
Timestamp:
05/18/08 17:08:39 (7 months ago)
Author:
jpv
Message:

Modif \codejps + remplacement procédures de tracé lignes de niveaux

Files:

Legend:

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

    r25 r27  
    1111\ifx\MultidoLoaded\endinput\else\input multido.tex \fi 
    1212% JPV & ML & AS 
    13 \def\fileversion{3.11
    14 \def\filedate{2008/05/10
     13\def\fileversion{3.12
     14\def\filedate{2008/05/18
    1515\message{`PSTSOLIDESIIID' v\fileversion, \filedate} 
    1616% 
     
    5353\define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage 
    5454\define@key[psset]{pst-solides3d}{dualregcoeff}{\def\pst@solides@dualregcoeff{#1}} % coeff de dual 
     55\define@key[psset]{pst-solides3d}{intersectiontype}{\def\pst@solides@intersectiontype{#1}} %  
     56% 
     57%% les affectations par defaut 
     58\psset[pst-solides3d]{R=4,r1=4,r0=1.5,r=2,no=0,a=4,b=a,c=a,h=6,phi=0,theta=90,resolution=36,% 
     59trunccoeff=.25,affinagecoeff=.8,dualregcoeff=1,intersectiontype=-1} 
    5560% 
    5661%%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%%  
     
    6065\define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme 
    6166\psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme 
    62 \psset[pst-solides3d]{R=4,r1=4,r0=1.5,r=2,no=0,a=4,b=a,c=a,h=6,phi=0,theta=90,resolution=36,% 
    63 trunccoeff=.25,affinagecoeff=.8,dualregcoeff=1} 
     67\define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}% 
     68\psset[pst-solides3d]{intersectionlinewidth=1}% 
     69\define@key[psset]{pst-solides3d}{intersectioncolor}{\def\pst@solides@intersectioncolor{#1}}% 
     70\psset[pst-solides3d]{intersectioncolor=(rouge)}% 
     71\define@key[psset]{pst-solides3d}{intersectionplan}{\def\pst@solides@intersectionplan{#1}}% 
     72\psset[pst-solides3d]{intersectionplan=[0 0 1 0]}% 
    6473\define@key[psset]{pst-solides3d}{hauteurlignedeniveau}{\def\psk@solides@hauteurlignedeniveau{#1}} 
    6574\psset[pst-solides3d]{hauteurlignedeniveau=0}% 
     
    370379/affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage 
    371380/dualregcoeff \pst@solides@dualregcoeff\space def % coeff de dual 
     381/solidintersectiontype \pst@solides@intersectiontype\space def % type d'intersection 
    372382/section {\pst@solides@section} def % section de l'objet de revolution 
    373383/base [ \pst@solides@base ] def 
     384/solidintersectionlinewidth [ \pst@solides@intersectionlinewidth ] def 
     385/solidintersectioncolor [ \pst@solides@intersectioncolor ] def 
     386/solidintersectionplan [ \pst@solides@intersectionplan ] def 
    374387/axe  { \pst@solides@axe } def 
    375388/function  (\pst@solides@function) def 
     
    608621\def\codejps#1{{% 
    609622\define@key[psset]{pst-solides3d}{object}{\def\psk@solides@object{#1}} 
    610 \psSolid[object=#1](0,0,0)}} 
     623\psSolid[object={#1} exec](0,0,0)}} 
    611624 
    612625%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
  • trunk/solides.pro

    r26 r27  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.14, 2008/05/10 
     3% Version 3.15, 2008/05/18 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque 
     
    14051405%%%%% ### min ### 
    14061406/min { 
    1407    2 copy 
    1408    gt {exch} if 
    1409    pop 
     14072 dict begin 
     1408   dup isarray { 
     1409      duparray /table exch def pop 
     1410      table 0 get 
     1411      1 1 table length 1 sub { 
     1412         /i exch def 
     1413         table i get 
     1414         min 
     1415      } for 
     1416   } { 
     1417      2 copy 
     1418      gt {exch} if 
     1419      pop 
     1420   } ifelse 
     1421end 
    14101422} def 
    14111423 
     
    20572069%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    20582070 
     2071%%%%% ### sortp3d ###  
     2072/sortp3d { 
     20736 dict begin 
     2074   /M1 defpoint3d 
     2075   /M0 defpoint3d 
     2076   M1 
     2077   /z1 exch def 
     2078   /y1 exch def 
     2079   /x1 exch def 
     2080   M0 
     2081   /z0 exch def 
     2082   /y0 exch def 
     2083   /x0 exch def 
     2084   x0 x1 lt { 
     2085      M0 M1 
     2086   } { 
     2087      x0 x1 gt { 
     2088         M1 M0 
     2089      } { 
     2090         y0 y1 lt { 
     2091            M0 M1 
     2092         } { 
     2093            y0 y1 gt { 
     2094               M1 M0 
     2095            } { 
     2096               z0 z1 lt { 
     2097                  M0 M1 
     2098               } { 
     2099                  M1 M0 
     2100               } ifelse 
     2101            } ifelse 
     2102         } ifelse 
     2103      } ifelse 
     2104   } ifelse 
     2105end 
     2106} def 
     2107 
    20592108%%%%% ### dupp3d ###  
    20602109%% duplique le vecteur 3d 
     
    25242573   dup xtick 
    25252574   /Courier findfont .8 fontsize mul scalefont setfont 
    2526    dup chaine cvs exch  
     2575   dup dup truncate eq { 
     2576      cvi dup chaine cvs exch  
     2577   } { 
     2578      dup chaine cvs exch  
     2579   } ifelse 
    25272580   Oy xmarkstyle 
    25282581} def 
     
    29583011} def 
    29593012 
    2960 /tracelignedeniveau? false def 
    2961 /hauteurlignedeniveau 1 def 
    2962 /couleurlignedeniveau {rouge} def 
    2963 /linewidthlignedeniveau 4 def 
     3013%/solidintersectiontype -1 def 
     3014%/solidintersectionlinewidth [1 2] def 
     3015%/solidintersectioncolor [(bleu) (rouge)] def 
     3016%/solidintersectionplan [[1 0 .5 0] [1 0 .5 -1]] def 
     3017 
     3018%% /tracelignedeniveau? false def 
     3019%% /hauteurlignedeniveau 1 def 
     3020%% /couleurlignedeniveau {rouge} def 
     3021%% /linewidthlignedeniveau 4 def 
    29643022 
    29653023/solidgrid true def 
     
    42254283} def 
    42264284 
    4227 %% syntaxe : A solid i dessinefacecachee 
    4228 /dessinefacecachee { 
    4229 6 dict begin 
    4230    /i exch def 
    4231    /solid exch def 
    4232    solid issolid not { 
    4233       (Error : mauvais type d argument dans dessinefacecachee) == 
    4234       quit 
    4235    } if 
    4236    /A exch def 
    4237  
    4238    /F solid solidgetfaces def 
    4239    /S solid solidgetsommets def 
    4240  
    4241    solid i solidfacevisible? not { 
    4242       %% face cachee => on prend chacune des aretes de la face et on 
    4243       %% regarde si elle est deja dessinee. 
    4244       4 dict begin 
    4245          /n F i get length def %% nb de sommets de la face 
    4246          0 1 n 1 sub { 
    4247          /k exch def 
    4248             /k1 F i k get_ij def              %% indice sommet1 
    4249             /k2 F i k 1 add n mod get_ij def  %% indice sommet2 
    4250             A k1 k2 get_ij not { 
    4251                gsave 
    4252                   currentlinewidth .5 mul setlinewidth 
    4253                   pointilles 
    4254                   [S k1 getp3d 
    4255                   S k2 getp3d] ligne3d 
    4256                   A k1 k2 true put_ij 
    4257                   A k2 k1 true put_ij 
    4258                grestore 
    4259             } if 
    4260          } for 
    4261       end 
    4262    } if 
    4263 end 
    4264 } def 
    4265  
    42664285%% syntaxe : A solid i dessinefacevisible 
    42674286/dessinefacevisible { 
     
    43194338               } if 
    43204339            } { 
    4321   %               solid F i get length affectecouleursolid_ncotes 
    43224340               solid i affectecouleursolid_facei 
    43234341            } ifelse 
     
    43334351      ] def  
    43344352      face_a_dessiner polygone3d 
    4335       /lignedeniveau [] def 
    4336  
    4337       %% trace de la ligne de niveau 
    4338       tracelignedeniveau? { 
    4339          gsave 
    4340             linewidthlignedeniveau setlinewidth 
    4341             couleurlignedeniveau 
    4342             0 1 n 1 sub { 
    4343                /j exch def 
    4344                face_a_dessiner j getp3d 
    4345                face_a_dessiner j 1 add n mod getp3d 
    4346                hauteurlignedeniveau segment_inter_planz { 
    4347                1 dict begin 
    4348                   /table exch def 
    4349                   /lignedeniveau [  
    4350                      lignedeniveau aload pop  
    4351                      table 0 getp3d 
    4352                      table length 4 ge { 
    4353                         table 1 getp3d 
    4354                      } if 
    4355                   ] store 
    4356                end 
    4357                } if 
    4358             } for 
    4359             lignedeniveau length 4 ge  
    4360                {lignedeniveau ligne3d} 
    4361             if 
    4362          grestore 
    4363       } if 
    43644353 
    43654354      %% on marque les aretes 
     
    43734362         } for 
    43744363      } if 
     4364 
     4365 
     4366      %% trace de la ligne de niveau 
     4367      solidintersectiontype 0 ge { 
     4368         0 1 solidintersectionplan length 1 sub { 
     4369            /k exch def 
     4370            /lignedeniveau [] def 
     4371            gsave 
     4372               k solidintersectionlinewidth length lt { 
     4373                  solidintersectionlinewidth k get setlinewidth 
     4374               } { 
     4375                  solidintersectionlinewidth 0 get setlinewidth 
     4376               } ifelse 
     4377               k solidintersectioncolor length lt { 
     4378                  solidintersectioncolor k get cvx exec 
     4379               } { 
     4380                  solidintersectioncolor 0 get cvx exec 
     4381               } ifelse 
     4382               0 1 n 1 sub { 
     4383                  /j exch def 
     4384                  face_a_dessiner j getp3d 
     4385                  face_a_dessiner j 1 add n mod getp3d 
     4386                  solidintersectionplan k get segment_inter_plan { 
     4387                  1 dict begin 
     4388                     /table exch def 
     4389                     /lignedeniveau [  
     4390                        lignedeniveau aload pop  
     4391                        table 0 getp3d 
     4392                        table length 4 ge { 
     4393                           table 1 getp3d 
     4394                        } if 
     4395                     ] store 
     4396                  end 
     4397                  } if 
     4398               } for 
     4399                
     4400               %% dessin de la ligne 
     4401               lignedeniveau length 4 ge { 
     4402                  solid i solidisinface { 
     4403                     pointilles  
     4404                  } if 
     4405                  lignedeniveau ligne3d 
     4406               } if 
     4407            grestore 
     4408         } for          
     4409      } if 
     4410       
     4411   } if 
     4412end 
     4413} def 
     4414 
     4415%% syntaxe : A solid i dessinefacecachee 
     4416/dessinefacecachee { 
     44176 dict begin 
     4418   /i exch def 
     4419   /solid exch def 
     4420   solid issolid not { 
     4421      (Error : mauvais type d argument dans dessinefacecachee) == 
     4422      quit 
     4423   } if 
     4424   /A exch def 
     4425 
     4426   /F solid solidgetfaces def 
     4427   /S solid solidgetsommets def 
     4428 
     4429   solid i solidfacevisible? not { 
     4430      %% face cachee => on prend chacune des aretes de la face et on 
     4431      %% regarde si elle est deja dessinee. 
     4432      4 dict begin 
     4433         /n F i get length def %% nb de sommets de la face 
     4434         0 1 n 1 sub { 
     4435         /k exch def 
     4436            /k1 F i k get_ij def              %% indice sommet1 
     4437            /k2 F i k 1 add n mod get_ij def  %% indice sommet2 
     4438            A k1 k2 get_ij not { 
     4439               gsave 
     4440                  currentlinewidth .5 mul setlinewidth 
     4441                  pointilles 
     4442                  [S k1 getp3d 
     4443                  S k2 getp3d] ligne3d 
     4444                  A k1 k2 true put_ij 
     4445                  A k2 k1 true put_ij 
     4446               grestore 
     4447            } if 
     4448         } for 
     4449 
     4450      %% trace de la ligne de niveau 
     4451      solidintersectiontype 0 ge { 
     4452         /face_a_dessiner [  %% face visible : F [i] 
     4453            0 1 n 1 sub { 
     4454               /j exch def 
     4455               solid j i solidgetsommetface 
     4456            } for 
     4457         ] def  
     4458         0 1 solidintersectionplan length 1 sub { 
     4459            /k exch def 
     4460            /lignedeniveau [] def 
     4461            gsave 
     4462               pointilles 
     4463               k solidintersectionlinewidth length lt { 
     4464                  solidintersectionlinewidth k get setlinewidth 
     4465               } { 
     4466                  solidintersectionlinewidth 0 get setlinewidth 
     4467               } ifelse 
     4468               k solidintersectioncolor length lt { 
     4469                  solidintersectioncolor k get cvx exec 
     4470               } { 
     4471                  solidintersectioncolor 0 get cvx exec 
     4472               } ifelse 
     4473               0 1 n 1 sub { 
     4474                  /j exch def 
     4475                  face_a_dessiner j getp3d 
     4476                  face_a_dessiner j 1 add n mod getp3d 
     4477                  solidintersectionplan k get segment_inter_plan { 
     4478                  1 dict begin 
     4479                     /table exch def 
     4480                     table length 6 eq { 
     4481                        /lignedeniveau table store 
     4482                        exit 
     4483                     } { 
     4484                        /lignedeniveau [  
     4485                           lignedeniveau aload pop  
     4486                           table 0 getp3d 
     4487                        ] store 
     4488                     } ifelse 
     4489                  end 
     4490                  } if 
     4491               } for 
     4492                
     4493               %% dessin de la ligne 
     4494               lignedeniveau length 4 ge { 
     4495                  [lignedeniveau aload pop sortp3d] ligne3d 
     4496               } if 
     4497            grestore 
     4498         } for          
     4499      } if 
     4500       
     4501      end 
    43754502   } if 
    43764503end 
     
    48184945} def 
    48194946 
    4820  
    4821 /plan2eq { 
    4822 6 dict begin 
    4823    /leplan exch def 
    4824    leplan plangetbase aload pop vectprod3d 
    4825    /c exch def 
    4826    /b exch def 
    4827    /a exch def 
    4828    leplan plangetorigine 
    4829    /z0 exch def 
    4830    /y0 exch def 
    4831    /x0 exch def 
    4832    [a b c a x0 mul b y0 mul add c z0 mul add neg] 
    4833 end 
    4834 } def 
    4835  
    48364947%% syntaxe : M eqplan --> real 
    48374948%% image de M par la fonction definie par l equation eqplan 
     
    48474958   /@d eqplan 3 get def 
    48484959   @a @x mul @b @y mul add @c @z mul add @d add 
     4960end 
     4961} def 
     4962 
     4963/plan2eq { 
     49646 dict begin 
     4965   /leplan exch def 
     4966   leplan plangetbase aload pop vectprod3d 
     4967   /c exch def 
     4968   /b exch def 
     4969   /a exch def 
     4970   leplan plangetorigine 
     4971   /z0 exch def 
     4972   /y0 exch def 
     4973   /x0 exch def 
     4974   [a b c a x0 mul b y0 mul add c z0 mul add neg] 
    48494975end 
    48504976} def 
     
    49665092/planxmarks { 
    496750935 dict begin 
     5094   dup isbool { 
     5095      /mybool exch def 
     5096   } { 
     5097      /mybool true def 
     5098   } ifelse 
    49685099   /leplan exch def 
    49695100   leplan plangetrange aload pop 
     
    49725103   /xmax exch def 
    49735104   /xmin exch def 
     5105   newpath 
     5106      xmin truncate cvi 0 smoveto 
     5107      xmax truncate cvi 0 slineto 
     5108      leplan mybool projpath 
     5109   stroke 
    49745110   xmin truncate cvi xmkstep xmax truncate cvi { 
    4975       dup chaine cvs exch 0 leplan dctextp3d 
     5111      dup 0 ne { 
     5112         /x exch def 
     5113         x 
     5114         x x truncate eq { 
     5115            cvi 
     5116         } if 
     5117         dup chaine cvs exch 0 leplan mybool dctextp3d 
     5118         newpath 
     5119            x 0 smoveto 
     5120            0 2.5 rmoveto 
     5121            0 -5 rlineto 
     5122            leplan mybool projpath 
     5123         stroke 
     5124      } { 
     5125         pop (0) 0 0 leplan mybool dltextp3d  
     5126      } ifelse 
    49765127   } for 
    49775128end 
     
    49815132/planymarks { 
    498251335 dict begin 
     5134   dup isbool { 
     5135      /mybool exch def 
     5136   } { 
     5137      /mybool true def 
     5138   } ifelse 
    49835139   /leplan exch def 
    49845140   leplan plangetrange aload pop 
     
    49875143   /xmax exch def 
    49885144   /xmin exch def 
     5145   newpath 
     5146      0 ymin truncate cvi smoveto 
     5147      0 ymax truncate cvi slineto 
     5148      leplan mybool projpath 
     5149   stroke 
    49895150   ymin truncate cvi ymkstep ymax truncate cvi { 
    49905151      dup 0 ne { 
    4991          dup chaine cvs exch 0 exch leplan cltextp3d 
     5152         /y exch def 
     5153         y 
     5154         y y truncate eq { 
     5155             cvi 
     5156         } if 
     5157         dup chaine cvs exch 0 exch leplan mybool cltextp3d 
     5158         newpath 
     5159            0 y smoveto 
     5160            2.5 0 rmoveto 
     5161            -5 0 rlineto 
     5162            leplan mybool projpath 
     5163         stroke 
    49925164      } { 
    4993          pop 
     5165         pop (0) 0 0 leplan mybool dltextp3d  
    49945166      } ifelse 
    49955167   } for 
     
    49995171%% syntaxe : plantype planmarks 
    50005172/planmarks { 
    5001    dup planxmarks planymarks 
     51731 dict begin 
     5174    dup isbool { 
     5175      /mybool exch def 
     5176   } { 
     5177      /mybool true def 
     5178   } ifelse 
     5179   dup mybool planxmarks mybool planymarks 
     5180end 
    50025181} def 
    50035182 
     
    50365215      x ymax slineto 
    50375216   } for 
     5217end 
     5218} def 
     5219 
     5220%% syntaxe : plan [ngrid] planquadrillage 
     5221/planquadrillage { 
     52224 dict begin 
     5223   dup isbool { 
     5224      /mybool exch def 
     5225   } { 
     5226      /mybool true def 
     5227   } ifelse 
     5228   dup isplan { 
     5229      /ngrid [1 1] def 
     5230   } { 
     5231      /ngrid exch def 
     5232   } ifelse 
     5233   /leplan exch def 
     5234   /dx ngrid 0 get def 
     5235   /dy ngrid 1 get def 
     5236   /table leplan plangetrange def 
     5237   table 0 get cvi truncate /xmin exch def 
     5238   table 1 get cvi truncate /xmax exch def 
     5239   table 2 get cvi truncate /ymin exch def 
     5240   table 3 get cvi truncate /ymax exch def 
     5241   newpath 
     5242      ymin dy ymax { 
     5243         /y exch def 
     5244         xmin y smoveto 
     5245         xmax y slineto 
     5246      } for 
     5247      xmin dx xmax { 
     5248         /x exch def 
     5249         x ymin smoveto 
     5250         x ymax slineto 
     5251      } for 
     5252      leplan mybool projpath 
     5253   stroke 
    50385254end 
    50395255} def 
  • trunk/tests/index.txt

    r24 r27  
    1111test_11 : equations de plan 
    1212test_12 : lecture / ecriture de fichier off 
     13test_13 : intersection solide/plan