Changeset 61

Show
Ignore:
Timestamp:
06/22/08 14:29:18 (7 months ago)
Author:
jpv
Message:

Ajout de cone généralisé et cylindre généralisé

Files:

Legend:

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

    r59 r61  
    2020\ifx\MultidoLoaded\endinput\else\input multido.tex \fi 
    2121% JPV & ML & AS 
    22 \def\fileversion{3.27
    23 \def\filedate{2008/06/20
     22\def\fileversion{3.28
     23\def\filedate{2008/06/22
    2424\message{`PSTSOLIDESIIID' v\fileversion, \filedate} 
    2525% 
     
    433433/axe  { \pst@solides@axe } def 
    434434/plansection  [ \pst@solides@plansection ] def 
     435\ifx\pst@solides@function\@empty 
     436    \else 
    435437/function  (\pst@solides@function) def 
     438\fi 
     439% 
    436440/definition  (\pst@solides@definition) def 
    437441/args  { \pst@solides@args} def 
     
    926930%% fonctions utilisees 
    927931\define@key[psset]{pst-solides3d}{function}{\def\pst@solides@function{#1}}% 
    928 \psset[pst-solides3d]{function=f}% valeur par defaut 
     932\psset[pst-solides3d]{function=}% pas de valeur par defaut 
    929933% rotation du texte dans son plan 
    930934\define@key[psset]{pst-solides3d}{RotationAngleText}{\def\pst@solides@RotationAngleText{#1}} % origine du plan 
  • trunk/solides.pro

    r59 r61  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.34, 2008/06/20 
     3% Version 3.35, 2008/06/22 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque 
     
    76487648 
    76497649%%%%% ### newcylindre ###  
     7650%% %% syntaxe : z0 r0 z1 newcylindre -> solide 
     7651%% /newcylindre { 
     7652%%    dup xcheck { 
     7653%%       2 index exch 
     7654%%    } { 
     7655%%       dup isarray { 
     7656%%          2 index exch 
     7657%%       } { 
     7658%%          1 index 
     7659%%       } ifelse 
     7660%%    } ifelse 
     7661%%    newtronccone 
     7662%% } def 
     7663%%  
     7664%% %% syntaxe : z0 r0 z1 newcylindrecreux -> solide 
     7665%% /newcylindrecreux { 
     7666%%    newcylindre 
     7667%%    dup creusesolid 
     7668%% } def 
     7669 
    76507670%% syntaxe : z0 r0 z1 newcylindre -> solide 
     7671%% syntaxe : z0 r0 z1 {mode} newcylindre -> solide 
     7672%% syntaxe : z0 r0 z1 [n1 n2] newcylindre -> solide 
     7673%% syntaxe : a b {f} {u} h [n1 n2] newcylindre 
    76517674/newcylindre { 
    7652    dup xcheck { 
    7653       2 index exch 
    7654    } { 
    7655       dup isarray { 
    7656          2 index exch 
    7657       } { 
    7658          1 index 
    7659       } ifelse 
    7660    } ifelse 
    7661    newtronccone 
    7662 } def 
    7663  
    7664 %% syntaxe : z0 r0 z1 newcylindrecreux -> solide 
    7665 /newcylindrecreux { 
    7666    newcylindre 
    7667    dup creusesolid 
     76752 dict begin 
     7676   [[/n2 /n1] [1 6] [1 8] [1 10] [3 12] [5 18]] gestionsolidmode 
     7677   2 copy pop xcheck { 
     7678      %% cylindre cas general 
     7679 
     7680      /h exch def 
     7681      /u exch def 
     7682      /lafonction exch def 
     7683      /b exch def 
     7684      /a exch def 
     7685      /pas b a sub n1 div def 
     7686      /vpas h n2 div def 
     7687      /S [ 
     7688         0 1 n2 { 
     7689            /j exch def 
     7690            0 1 n1 { 
     7691               /i exch def 
     7692               a i pas mul add lafonction 
     7693               u j vpas mul mulv3d addv3d 
     7694            } for 
     7695         } for 
     7696      ] def 
     7697      /F [ 
     7698         0 1 n2 1 sub { 
     7699            /j exch def 
     7700            0 1 n1 1 sub { 
     7701               /i exch def 
     7702               [ 
     7703                  i n1 1 add j mul add  
     7704                  dup 1 add 
     7705                  dup n1 1 add add 
     7706                  dup 1 sub 
     7707               ] 
     7708            } for 
     7709         } for 
     7710      ] def 
     7711       
     7712      S F generesolid 
     7713      dup videsolid 
     7714   } { 
     7715      %% cylindre de revolution 
     7716      2 copy pop [n2 n1] newtronccone 
     7717   } ifelse 
     7718end 
    76687719} def 
    76697720 
     
    77197770 
    77207771%%%%% ### newcone ###  
     7772%% %% syntaxe : z0 r0 z1 newcone -> solid 
     7773%% /newcone { 
     7774%% 11 dict begin 
     7775%%    [ [/n /N] [1 6] [1 8] [1 10] [3 12] [5 18] ] gestionsolidmode 
     7776%%  
     7777%%    /z1 exch def 
     7778%%    /r0 exch def 
     7779%%    /z0 exch def 
     7780%%    /dz z1 z0 sub n div def 
     7781%%    /dr r0 n div def 
     7782%%  
     7783%%    /F [ 
     7784%%       %% la base 
     7785%%       [N 1 sub -1 0 {} for] 
     7786%%       %% le dernier etage 
     7787%%       n 1 sub N mul 1 add 1 n N mul 1 sub { 
     7788%%            /i exch def 
     7789%%            [i 1 sub i n N mul] 
     7790%%       } for 
     7791%%       [n N mul 1 sub n 1 sub N mul n N mul] 
     7792%%       %% les autres etages 
     7793%%       0 1 n 2 sub { 
     7794%%          /j exch def 
     7795%%          0 N j mul add 1 N N j mul add 2 sub { 
     7796%%             /i exch def 
     7797%%             [i i 1 add dup N add dup 1 sub] 
     7798%%          } for 
     7799%%          [N N j mul add 1 sub N j mul dup N add dup N add 1 sub] 
     7800%%       } for 
     7801%%    ] def 
     7802%%  
     7803%%    %% tableau des sommets 
     7804%%    /S [ 
     7805%%       %% etage no j (in [1; n]) 
     7806%%       0 1 n 1 sub { 
     7807%%          /j exch def 
     7808%%          0 1 N 1 sub { 
     7809%%              /i exch def 
     7810%%              360 N idiv i mul cos r0 dr j mul sub mul 
     7811%%              360 N idiv i mul sin r0 dr j mul sub mul 
     7812%%              z0 dz j mul add 
     7813%%          } for 
     7814%%       } for 
     7815%%       0 0 z1 
     7816%%    ] def 
     7817%%    S F generesolid 
     7818%% end 
     7819%% } def 
     7820%%  
     7821%% %% syntaxe : z0 r0 z1 newconecreux -> solid 
     7822%% /newconecreux { 
     7823%%    newcone 
     7824%%    dup 0 solidrmface 
     7825%%    dup videsolid 
     7826%% } def 
     7827 
    77217828%% syntaxe : z0 r0 z1 newcone -> solid 
     7829%% syntaxe : z0 r0 z1 {mode} newcone -> solid 
     7830%% syntaxe : z0 r0 z1 [n1 n2] newcone -> solid 
     7831%% syntaxe : a b {f} {sommet} [n1 n2] newcone -> solid 
    77227832/newcone { 
    7723783311 dict begin 
    77247834   [ [/n /N] [1 6] [1 8] [1 10] [3 12] [5 18] ] gestionsolidmode 
    7725  
    7726    /z1 exch def 
    7727    /r0 exch def 
    7728    /z0 exch def 
    7729    /dz z1 z0 sub n div def 
    7730    /dr r0 n div def 
    7731  
    7732    /F [ 
    7733       %% la base 
    7734       [N 1 sub -1 0 {} for] 
    7735       %% le dernier etage 
    7736       n 1 sub N mul 1 add 1 n N mul 1 sub { 
    7737            /i exch def 
    7738            [i 1 sub i n N mul] 
    7739       } for 
    7740       [n N mul 1 sub n 1 sub N mul n N mul] 
    7741       %% les autres etages 
    7742       0 1 n 2 sub { 
    7743          /j exch def 
    7744          0 N j mul add 1 N N j mul add 2 sub { 
     7835   dup xcheck { 
     7836      %% cas general 
     7837      /sommet exch def 
     7838      /lafonction exch def 
     7839      /b exch def 
     7840      /a exch def 
     7841 
     7842      /pas b a sub N div def 
     7843      /S [ 
     7844         sommet 
     7845         0 1 n 1 sub { 
     7846            /j exch def 
     7847            0 1 N { 
     7848               /i exch def 
     7849               a i pas mul add lafonction 
     7850               dupp3d sommet vecteur3d j n div mulv3d addv3d 
     7851            } for 
     7852         } for 
     7853         1 1 n { 
     7854            /j exch def 
     7855            0 1 N { 
     7856               /i exch def 
     7857               a i pas mul add lafonction 
     7858               sommet vecteur3d j n div mulv3d sommet addv3d 
     7859            } for 
     7860         } for 
     7861      ] def 
     7862 
     7863      /F [ 
     7864         %% les etages inferieurs 
     7865         0 1 n 2 sub { 
     7866            /j exch def 
     7867            1 1 N { 
     7868               /i exch def 
     7869               [ 
     7870                  i j N 1 add mul add 
     7871                  dup 1 add 
     7872                  dup N add 1 add 
     7873                  dup 1 sub 
     7874               ] 
     7875            } for 
     7876         } for 
     7877         %% dernier etage inferieur 
     7878         1 1 N { 
    77457879            /i exch def 
    7746             [i i 1 add dup N add dup 1 sub] 
     7880            [ 
     7881               i N 1 add n 1 sub mul add 
     7882               dup 1 add 
     7883               0 
     7884            ] 
    77477885         } for 
    7748          [N N j mul add 1 sub N j mul dup N add dup N add 1 sub] 
    7749       } for 
    7750    ] def 
    7751  
    7752    %% tableau des sommets 
    7753    /S [ 
    7754       %% etage no j (in [1; n]) 
    7755       0 1 n 1 sub { 
    7756          /j exch def 
    7757          0 1 N 1 sub { 
    7758              /i exch def 
    7759              360 N idiv i mul cos r0 dr j mul sub mul 
    7760              360 N idiv i mul sin r0 dr j mul sub mul 
    7761              z0 dz j mul add 
     7886         %% premier etage superieur 
     7887         1 1 N { 
     7888            /i exch def 
     7889            [ 
     7890               i N 1 add n mul add 
     7891               dup 1 add 
     7892               0 
     7893               exch 
     7894            ] 
    77627895         } for 
    7763       } for 
    7764       0 0 z1 
    7765    ] def 
    7766    S F generesolid 
    7767 end 
    7768 } def 
    7769  
    7770 %% syntaxe : z0 r0 z1 newconecreux -> solid 
    7771 /newconecreux { 
    7772    newcone 
    7773    dup 0 solidrmface 
    7774    dup videsolid 
     7896         %% les etages superieurs 
     7897         n 1 n 2 mul 2 sub { 
     7898            /j exch def 
     7899            1 1 N { 
     7900               /i exch def 
     7901               [ 
     7902                  i j N 1 add mul add 
     7903                  dup 1 add 
     7904                  dup N add 1 add 
     7905                  dup 1 sub 
     7906               ] 
     7907            } for 
     7908         } for 
     7909      ] def 
     7910 
     7911      S F generesolid 
     7912      dup videsolid 
     7913   } { 
     7914      %% cylindre de revolution 
     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   } ifelse 
     7957end 
    77757958} def 
    77767959 
     
    89179100 
    89189101/pst-cylindre { 
    8919    % rayon 
    8920    % mode 
    8921    0 r h 
    8922    ngrid length 2 eq { 
    8923       ngrid 
    8924    } { 
    8925       {Mode} 
    8926    } ifelse 
    8927    newcylindre 
    8928    solidhollow { 
    8929       dup creusesolid 
    8930    } if 
     9102   tx@Dict /function known { 
     9103      range aload pop function cvx {axe} h ngrid newcylindre 
     9104   } { 
     9105      % rayon 
     9106      % mode 
     9107      0 r h 
     9108      ngrid length 2 eq { 
     9109         ngrid 
     9110      } { 
     9111         {Mode} 
     9112      } ifelse 
     9113      newcylindre 
     9114      solidhollow { 
     9115         dup creusesolid 
     9116      } if 
     9117   } ifelse 
    89319118   gere_pstricks_opt 
    89329119} def 
     
    89479134 
    89489135/pst-cone { 
    8949    % rayon 
    8950    % mode 
    8951    0 r h 
    8952    ngrid length 2 eq { 
    8953       ngrid 
    8954    } { 
    8955       {Mode} 
    8956    } ifelse 
    8957    solidhollow { 
    8958       newconecreux 
    8959    } { 
    8960       newcone 
     9136   tx@Dict /function known { 
     9137      range aload pop function cvx {0 0 0} ngrid newcone 
     9138   } { 
     9139      % rayon 
     9140      % mode 
     9141      0 r h 
     9142      ngrid length 2 eq { 
     9143         ngrid 
     9144      } { 
     9145         {Mode} 
     9146      } ifelse 
     9147      solidhollow { 
     9148         newconecreux 
     9149      } { 
     9150         newcone 
     9151      } ifelse 
    89619152   } ifelse 
    89629153   gere_pstricks_opt 
  • trunk/tests/index.txt

    r40 r61  
    1515test_15 : objet load + lumière ponctuelle 
    1616test_16 : planshowbase et planshowbase3d 
     17test_17 : point 
     18test_18 : cylindre généralisé 
     19