Changeset 24

Show
Ignore:
Timestamp:
05/10/08 12:45:38 (8 months ago)
Author:
jpv
Message:

Ajout de la lecture/ecriture de fichiers off

Files:

Legend:

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

    r23 r24  
    1111\ifx\MultidoLoaded\endinput\else\input multido.tex \fi 
    1212% JPV & ML & AS 
    13 \def\fileversion{3.10
    14 \def\filedate{2008/05/09
     13\def\fileversion{3.11
     14\def\filedate{2008/05/10
    1515\message{`PSTSOLIDESIIID' v\fileversion, \filedate} 
    1616% 
     
    5353\define@key[psset]{pst-solides3d}{h}{\def\pst@solides@h{#1}} % hauteur du cylindre, du cone, du prisme 
    5454\define@key[psset]{pst-solides3d}{trunccoeff}{\def\pst@solides@trunccoeff{#1}} % coeff de troncature 
    55 \define@key[psset]{pst-solides3d}{chanfreincoeff}{\def\pst@solides@chanfreincoeff{#1}} % coeff de chanfrein 
     55\define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage 
    5656\define@key[psset]{pst-solides3d}{base}{\def\pst@solides@base{#1}} % base du prisme 
    5757\psset[pst-solides3d]{base=-1 -1 1 -1 0 1}% coordonnees d'un triangle, base triangulaire par defaut 
     
    5959\psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme 
    6060\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,% 
    61 trunccoeff=.25,chanfreincoeff=.8} 
     61trunccoeff=.25,affinagecoeff=.8} 
    6262\define@key[psset]{pst-solides3d}{hauteurlignedeniveau}{\def\psk@solides@hauteurlignedeniveau{#1}} 
    6363\psset[pst-solides3d]{hauteurlignedeniveau=0}% 
     
    124124\psset{SphericalCoor=false} 
    125125 
    126 \define@boolkey[psset]{pst-solides3d}[Pst@]{chanfreinrm}[false]{} 
    127 \psset{chanfreinrm=true} 
     126\define@boolkey[psset]{pst-solides3d}[Pst@]{affinagerm}[false]{} 
     127\psset{affinagerm=true} 
    128128 
    129129\define@boolkey[psset]{pst-solides3d}[Pst@]{grid}[false]{} 
     
    154154\define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}} 
    155155\psset[pst-solides3d]{file=}% pas de fichier par defaut 
    156 %% couleur face pour chanfrein 
     156%% couleur face pour affinage 
    157157\define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}} 
    158158\psset[pst-solides3d]{fcolor=}% pas de couleur par defaut 
     
    180180\define@key[psset]{pst-solides3d}{trunc}{\def\pst@solides@trunc{#1}} 
    181181\psset[pst-solides3d]{trunc=}% pas de troncature pra defaut 
    182 %% chanfreinage des faces 
    183 \define@key[psset]{pst-solides3d}{chanfrein}{\def\pst@solides@chanfrein{#1}} 
    184 \psset[pst-solides3d]{chanfrein=}% pas de chanfrein par defaut 
     182%% affinageage des faces 
     183\define@key[psset]{pst-solides3d}{affinage}{\def\pst@solides@affinage{#1}} 
     184\psset[pst-solides3d]{affinage=}% pas de affinage par defaut 
    185185%% numerotation des sommets 
    186186\define@key[psset]{pst-solides3d}{num}{\def\pst@solides@num{#1}} 
     
    211211}} 
    212212% type de dessin 
    213 \def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid
     213\def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid,writeoff
    214214%% Reservation de macros correspondants aux actions 
    215215\pst@solides@reservednames{action} 
     
    232232surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% 
    233233surfaceparametree,texte,trigospherique,vecteur,ligne,objfile,datfile,surface*,% 
    234 plan
     234plan,offfile
    235235%% Reservation de macros correspondants aux objects 
    236236\pst@solides@reservednames{object} 
     
    358358/h \pst@solides@h\space def % hauteur du cylindre, du cone, du prisme 
    359359/trunccoeff \pst@solides@trunccoeff\space def % coeff de troncature 
    360 /chanfreincoeff \pst@solides@chanfreincoeff\space def % coeff de chanfrein 
     360/affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage 
    361361/section {\pst@solides@section} def % section de l'objet de revolution 
    362362/base [ \pst@solides@base ] def 
     
    477477/solidtrunc [\pst@solides@trunc] def 
    478478\fi 
    479 \ifx\pst@solides@chanfrein\@empty 
    480 /solidchanfrein [] def 
    481     \else 
    482 /solidchanfrein [\pst@solides@chanfrein] def 
     479\ifx\pst@solides@affinage\@empty 
     480/solidaffinage [] def 
     481    \else 
     482/solidaffinage [\pst@solides@affinage] def 
    483483\fi 
    484484% 
     
    495495\fi 
    496496% 
    497 \ifPst@chanfreinrm 
    498    /chanfreinrm true def 
     497\ifPst@affinagerm 
     498   /affinagerm true def 
    499499\else 
    500    /chanfreinrm false def 
     500   /affinagerm false def 
    501501\fi 
    502502% 
  • trunk/solides.pro

    r23 r24  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.13, 2008/05/09 
     3% Version 3.14, 2008/05/10 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque 
     
    516516 
    517517%%%%% ### numstr2array ### 
    518 %% syntaxe : str numstr2array -> array 
    519 %% ou str est une chaine de nombres entiers separes par des espaces 
    520 %% et array est constitue des elements numeriques entiers de string. 
    521 %% exemple : 
    522 %% (0 12 4 54) --> [0 12 4 54] 
    523 /numstr2array { 
    524 3 dict begin 
     518%% syntaxe : str str2num --> num 
     519/str2num { 
     5205 dict begin 
    525521   /str exch def 
    526522   /n str length def 
    527    /j -1 def 
     523   /signnum 1 def 
     524   /frct false def 
     525   /k 0 def 
     526   0 1 n 1 sub { 
     527      /i exch def 
     528      str i get 
     529      dup 46 eq { 
     530         %% il y a un point 
     531         /frct true def 
     532         pop 
     533         i 0 eq { 
     534            0 
     535         } if 
     536      } { 
     537         dup 45 eq { 
     538            /signnum -1 def 
     539            pop 
     540         } { 
     541            frct not { 
     542               i 1 ge signnum 0 ge and i 2 ge or { 
     543                  exch 10 mul 48 sub add 
     544               } { 
     545                  48 sub 
     546               } ifelse 
     547            } { 
     548               48 sub 
     549               /k k 1 add store 
     550               10 k exp div add 
     551            } ifelse 
     552         } ifelse 
     553      } ifelse 
     554   } for 
     555   signnum mul 
     556end 
     557} def 
     558 
     559/str2num {cvx exec} def 
     560 
     561%% syntaxe : str numstr2array -> array 
     562%% ou str est une chaine de nombres reels separes par des espaces 
     563%% et array est constitue des elements numeriques de string. 
     564%% exemple : 
     565%% (0 -12 .234 54) --> [0 -12 0.234 54] 
     566/numstr2array { 
     5676 dict begin 
     568   /str exch def 
     569   /n str length def 
     570   /separateurs [] def 
    528571   [ 
    529572      0 1 n 1 sub { 
    530573         /i exch def 
    531          /j j 1 add store 
    532574         str i get 
    533          dup 32 eq { 
    534             %% c est un espace 
    535             /j -1 store 
    536             pop 
    537          } { 
    538             j 1 ge { 
    539                exch 10 mul 48 sub add 
    540             } { 
    541                48 sub 
    542             } ifelse 
    543          } ifelse 
     575         32 eq { 
     576            /separateurs [separateurs aload pop i] def 
     577         } if 
    544578      } for 
     579      /j 0 def 
     580      /oldsep 0 def 
     581      0 1 separateurs length 1 sub { 
     582         /i exch def 
     583         str j separateurs i get oldsep sub getinterval str2num 
     584         /j separateurs i get 1 add def 
     585         /oldsep separateurs i get 1 add def 
     586      } for 
     587      str j n oldsep sub getinterval str2num 
    545588   ] 
    546589end 
     
    34033446/solidnumsommets { 
    340434478 dict begin 
    3405 %   Font findfont 10 scalefont setfont 
     3448   Font findfont 10 scalefont setfont 
    34063449   dup issolid not { 
    34073450      %% on a un argument 
     
    34363479      mulv3d 
    34373480      S addv3d 
    3438       3dto2d cctext 
     3481      3dto2d cctext  
    34393482   } for 
    34403483end 
     
    53105353} def 
    53115354 
    5312 %%%%% ### solidchampfreine ### 
    5313 %% syntaxe : solid coeff i solidchampfreine -> - 
    5314 %% syntaxe : solid coeff array solidchampfreine -> - 
    5315 %% syntaxe : solid coeff solidchampfreine -> - 
    5316 %% syntaxe : solid coeff str solidchampfreine -> - 
    5317 %% syntaxe : solid coeff bool solidchampfreine -> - 
    5318 /solidchampfreine { 
     5355%%%%% ### solidaffine ### 
     5356%% syntaxe : solid coeff i solidaffine -> - 
     5357%% syntaxe : solid coeff array solidaffine -> - 
     5358%% syntaxe : solid coeff solidaffine -> - 
     5359%% syntaxe : solid coeff str solidaffine -> - 
     5360%% syntaxe : solid coeff bool solidaffine -> - 
     5361/solidaffine { 
    5319536210 dict begin 
    53205363   dup isbool { 
     
    53275370   } if 
    53285371   2 copy pop issolid { 
    5329       %% 2 arguments --> on champfreine tout 
     5372      %% 2 arguments --> on affine tout 
    53305373      2 copy pop solidnombrefaces /n exch def 
    53315374      /table [n 1 sub -1 0 {} for] def  
     
    53455388      solid coeff table i get  
    53465389      currentdict /couleurface known { 
    5347          couleurface 
     5390         couleurface  
    53485391      } if 
    5349       rmfacecentrale s@lidchampfreineface 
     5392      rmfacecentrale s@lidaffineface 
    53505393   } for 
    53515394end 
    53525395} def 
    53535396 
    5354 %% syntaxe : solid coeff i s@lidchampfreineface 
    5355  /s@lidchampfreineface { 
     5397%% syntaxe : solid coeff i s@lidaffineface 
     5398 /s@lidaffineface { 
    5356539910 dict begin 
    53575400   /rmfacecentrale exch def 
     
    53645407   /solid exch def 
    53655408   solid issolid not { 
    5366       (Erreur : mauvais type d argument dans champfreine) == 
     5409      (Erreur : mauvais type d argument dans affine) == 
    53675410      quit 
    53685411   } if 
     
    54165459      solid N 
    54175460      currentdict /couleurface known { 
    5418             couleurface 
     5461            couleurface  
    54195462      } { 
    54205463         couleurfaceorigine 
     
    70967139} def 
    70977140 
     7141%%%%% ### writeofffile ### 
     7142%% syntaxe : solid str writeobjfile -> - 
     7143/writeofffile { 
     714412 dict begin 
     7145   /str exch (.off) append def 
     7146   /solid exch def 
     7147   solid issolid not { 
     7148      (Erreur : mauvais type d argument dans writeofffile) == 
     7149      quit 
     7150   } if 
     7151   /n solid solidnombresommets def 
     7152   /nf solid solidnombrefaces def 
     7153   str (w) file /lefichier exch def 
     7154   lefichier (OFF) writestring 
     7155   lefichier 10 write %% CR 
     7156   lefichier n chaine cvs writestring 
     7157   lefichier 32 write %% espace 
     7158   lefichier nf chaine cvs writestring 
     7159   lefichier 32 write %% espace 
     7160   lefichier 0 chaine cvs writestring 
     7161   lefichier 10 write %% CR 
     7162   0 1 n 1 sub { 
     7163      /i exch def 
     7164      solid i solidgetsommet 
     7165      /z exch def 
     7166      /y exch def 
     7167      /x exch def 
     7168      lefichier x chaine cvs writestring 
     7169      lefichier 32 write %% espace 
     7170      lefichier y chaine cvs writestring 
     7171      lefichier 32 write %% espace 
     7172      lefichier z chaine cvs writestring 
     7173      lefichier 10 write %% CR 
     7174   } for 
     7175   0 1 nf 1 sub { 
     7176      /i exch def 
     7177      /F solid i solidgetface def 
     7178      lefichier F length chaine cvs writestring 
     7179      lefichier 32 write %% espace 
     7180      F { 
     7181         lefichier exch 
     7182         chaine cvs writestring 
     7183         lefichier  32  write %% espace 
     7184      } apply 
     7185      lefichier  10  write %% CR 
     7186   } for 
     7187   lefichier closefile 
     7188end 
     7189} def 
     7190 
    70987191%%%%% ### newobjfile ### 
    70997192/newobjfile { 
     
    71197212   /F exch def 
    71207213   /S exch def 
     7214 
     7215   S F generesolid 
     7216%   dup videsolid 
     7217end 
     7218} def 
     7219 
     7220%%%%% ### newofffile ### 
     7221/newofffile { 
     72223 dict begin 
     7223   /str 35 string def 
     7224   /offfilename exch (.off) append def 
     7225   offfilename (r) file 
     7226   /offfile exch def 
     7227   offfile str readline pop pop 
     7228   offfile str readline pop 
     7229   numstr2array 
     7230   dup 0 get /ns exch def 
     7231   1 get /nf exch def 
     7232   [ns { 
     7233      offfile str readline pop numstr2array aload pop 
     7234   } repeat] 
     7235   /S exch def 
     7236   [nf { 
     7237      [ 
     7238      offfile str readline pop numstr2array 
     7239      /table exch def 
     7240      1 1 table length 1 sub { 
     7241         /i exch def 
     7242         table i get 
     7243      } for 
     7244      ] 
     7245   } repeat] 
     7246   /F exch def 
    71217247 
    71227248   S F generesolid 
     
    73437469/writeobj {solidfilename writeobjfile} def 
    73447470/writesolid {solidfilename writesolidfile} def 
     7471/writeoff {solidfilename writeofffile} def 
    73457472/none {pop} def 
    73467473 
     
    74057532      } if 
    74067533   } ifelse 
    7407    solidchanfrein length 0 ne { 
    7408       solidchanfrein 0 get isstring { 
    7409          dup chanfreincoeff 
     7534   solidaffinage length 0 ne { 
     7535      solidaffinage 0 get isstring { 
     7536         dup affinagecoeff 
    74107537         /solidfcolor where { 
    74117538            pop 
    74127539            solidfcolor 
    74137540         } if 
    7414          chanfreinrm solidchampfreine 
     7541         affinagerm solidaffine 
    74157542      } { 
    7416          dup chanfreincoeff solidchanfrein 
     7543         dup affinagecoeff solidaffinage 
    74177544         /solidfcolor where { 
    74187545            pop 
    74197546            solidfcolor 
    74207547         } if 
    7421          chanfreinrm solidchampfreine 
     7548         affinagerm solidaffine 
    74227549      } ifelse 
    74237550   } if 
     
    78427969/pst-objfile { 
    78437970   solidfilename newobjfile 
    7844 %   dup {1 1 div mulv3d} solidtransform 
    7845 %%    solidhollow { 
    7846 %%       dup videsolid 
    7847 %%    } if 
     7971   gere_pstricks_opt 
     7972} def 
     7973 
     7974/pst-offfile { 
     7975   solidfilename newofffile 
    78487976   gere_pstricks_opt 
    78497977} def 
  • trunk/tests/index.txt

    r17 r24  
    1010test_10 : section et separation de solide 
    1111test_11 : equations de plan 
     12test_12 : lecture / ecriture de fichier off 
  • trunk/tests/test_02.tex

    r23 r24  
    1818\psset{SphericalCoor=true,viewpoint=50 20 30} 
    1919 
    20 \section {Test chanfrein avec PSTricks} 
     20\section {Test affinage avec PSTricks} 
    2121 
    22221 seule face, en gardant la face centrale 
     
    2828\psSolid[object=cube, 
    2929   fillcolor=red, 
    30    chanfreinrm, 
     30   affinagerm, 
    3131   fcolor=Yellow, 
    32    chanfrein=0] 
     32   affinage=0] 
    3333\end{pspicture*} 
    3434\end{center} 
     
    4242\psSolid[object=cube, 
    4343   fillcolor=cyan, 
    44    chanfrein=0] 
     44   affinage=0] 
    4545\end{pspicture*} 
    4646\end{center} 
     
    5454\psSolid[object=cube, 
    5555   fillcolor=cyan, 
    56    chanfreincoeff=.5, 
    57    chanfreinrm, 
     56   affinagecoeff=.5, 
     57   affinagerm, 
    5858   fcolor=.5 setfillopacity Yellow, 
    5959   hollow, 
    60    chanfrein=all] 
     60   affinage=all] 
    6161\end{pspicture*} 
    6262\end{center} 
    6363 
    6464 
    65 \section {Test chanfrein avec jps} 
     65\section {Test affinage avec jps} 
    66661 seule face 
    6767 
     
    7373\codejps{ 
    74745 newcube 
    75 dup .5 0 solidchampfreine 
     75dup .5 0 solidaffine 
    7676%%dup [.5 .6] solidputhuecolors %% ne fonctionne pas 
    7777dup {[.5 .6]} exec solidputhuecolors %% fonctionne 
     
    9090\codejps{ 
    91915 newcube 
    92 dup .5 solidchampfreine 
     92dup .5 solidaffine 
    9393%%dup [.5 .6] solidputhuecolors %% ne fonctionne pas 
    9494dup {[.5 .6]} exec solidputhuecolors %% fonctionne