Changeset 30

Show
Ignore:
Timestamp:
05/30/08 10:59:25 (6 months ago)
Author:
jpv
Message:

interfaçage séparation, gestion pointilles

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/doc/par-changements.tex

    r2 r30  
    1 \section {Changements par rapport à la version 2.0} 
     1\section {Changements par rapport aux versions précédentes} 
     2 
     3\subsection {Changements par rapport à la version 3.0} 
     4 
     5\begin {itemize} 
     6 
     7\item L'objet \texttt{courbe} utilise maintenant l'argument $r$. Pour 
     8retrouver le comportement précédent, il faut spécifier $r=0$. 
     9 
     10\item L'option \verb+resolution+ de l'objet \verb+courbe+ est 
     11  remplacée par l'option \verb+ngrid+ 
     12 
     13\end {itemize} 
     14 
     15\subsection {Changements par rapport à la version 2.0} 
    216 
    317\begin {itemize} 
  • trunk/doc/par-courbeR3.tex

    r2 r30  
    1 \section {Courbes de fonctions de $R$ vers $R^3$
     1\section {Courbes de fonctions de $R$ vers $R^3$ -- Tubes
    22 
    33%% \section{Fonctions R --> R\textsuperscript{3}} 
     
    3535\defFunction[algebraic]{helice}(t){3*cos(4*t)}{3*sin(4*t)}{t} 
    3636\psSolid[object=courbe, 
     37        r=0, 
    3738        range=0 6, 
    3839        linecolor=blue,linewidth=0.1, 
     
    4950\psSolid[object=courbe, 
    5051        range=0 6, 
     52        r=0, 
    5153        linecolor=blue, 
    5254        resolution=360, 
     
    6668\psset{range=-4 4} 
    6769\psSolid[object=courbe,linewidth=0.1, 
     70        r=0, 
    6871        linecolor=red, 
    6972        resolution=360, 
     
    7477\defFunction{sinRad}(t){t}{t Sin 3 mul}{3} 
    7578\psSolid[object=courbe,linewidth=0.1, 
     79        r=0, 
    7680        linecolor=blue, 
    7781        resolution=30, 
     
    8791\psSolid[object=grille,base=-4 4 -4 4]% 
    8892\psSolid[object=courbe,linewidth=0.1, 
     93        r=0, 
    8994        linecolor=red, 
    9095        resolution=360, 
     
    9398\psSolid[object=grille,base=-4 4 -4 4](0,0,3) 
    9499\psSolid[object=courbe, 
     100        r=0, 
    95101        linecolor=blue, 
    96102        resolution=360, 
     
    114120\psset{range=0 8} 
    115121\psSolid[object=courbe, 
     122        r=0, 
    116123        linecolor=blue, 
    117124        linewidth=0.05, 
     
    120127        function=helice_xy]% 
    121128\psSolid[object=courbe, 
     129        r=0, 
    122130        linecolor=green, 
    123131        linewidth=0.05, 
     
    126134        function=helice_xz]% 
    127135\psSolid[object=courbe, 
     136        r=0, 
    128137        linewidth=0.05, 
    129138        resolution=360, 
     
    131140        function=helice_yz]% 
    132141\psSolid[object=courbe, 
     142        r=0, 
    133143        linecolor=red, 
    134144        linewidth=0.1, 
     
    155165\psset{range=0 8} 
    156166\psSolid[object=courbe, 
     167        r=0, 
    157168        linecolor=blue, 
    158169        linewidth=0.05, 
     
    161172        function=helice_xy]% 
    162173\psSolid[object=courbe, 
     174        r=0, 
    163175        linecolor=green, 
    164176        linewidth=0.05, 
     
    167179        function=helice_xz]% 
    168180\psSolid[object=courbe, 
     181        r=0, 
    169182        linewidth=0.05, 
    170183        resolution=360, 
     
    172185        function=helice_yz]% 
    173186\psSolid[object=courbe, 
     187        r=0, 
    174188        linecolor=red, 
    175189        linewidth=0.1, 
  • trunk/doc/par-lignedeniveau.tex

    r2 r30  
    1 \section {Ligne de niveau
     1\section {Tracés d'intersections planes
    22 
    33Pour chaque objet de type \textsl {solid}, il est possible de tracer 
  • trunk/doc/par-prisme.tex

    r2 r30  
    133133\defFunction{F}(t){t cos 4 mul}{t sin 2 mul}{8} 
    134134\psSolid[object=courbe, 
     135   r=0, 
    135136   function=F,range=0 360, 
    136137   linewidth=2\pslinewidth, 
     
    159160\defFunction{F}(t){t cos 4 mul}{t sin 2 mul}{8} 
    160161\psSolid[object=courbe, 
     162   r=0, 
    161163   function=F,range=0 360, 
    162164   linewidth=2\pslinewidth, 
  • trunk/doc/pst-solides3d-doc.tex

    r2 r30  
    173173%\newpage 
    174174\tableofcontents 
    175 \newpage 
    176  
     175 
     176\newpage 
     177 
     178%\input \datapath par-plan 
     179%\end {document} 
    177180 
    178181\input \datapath par-constitution 
     
    187190\input \datapath par-positionnersolide 
    188191\input \datapath par-grille 
     192\input \datapath par-plan 
     193\input \datapath par-vecteur 
     194\input \datapath par-geode 
    189195 
    190196\chapter{Les options de \textbackslash{}psSolid} 
     
    195201\input \datapath par-enleverfacettes 
    196202\input \datapath par-pointagesommets 
     203\input \datapath par-tronque 
     204\input \datapath par-affinage 
     205\input \datapath par-chanfrein 
     206 
    197207\input \datapath par-couleurs 
    198208\input \datapath par-colorierfacettes 
     209\input \datapath par-opacity 
    199210\input \datapath par-definitionmaillage 
    200211\input \datapath par-modes 
    201212\input \datapath par-eclairageponctuel 
    202213\input \datapath par-lignedeniveau 
     214 
     215\chapter{Utilisation de fichiers externes} 
     216 
     217\input \datapath par-datfile 
     218\input \datapath par-offfile 
     219\input \datapath par-objfile 
    203220 
    204221\chapter{Fabriquer de nouveaux solides} 
     
    215232\input \datapath par-anneaux 
    216233\input \datapath par-surfacesparametrees 
     234 
    217235\chapter{Surfaces définies par une fonction $z=f(x,y)$} 
    218236 
     
    222240\chapter{Utilisation avancée} 
    223241\input \datapath par-nommersolide 
     242\input \datapath par-section 
    224243\input \datapath par-fusion 
    225244\input \datapath par-fusionjps 
  • trunk/pst-solides3d.tex

    r27 r30  
    1111\ifx\MultidoLoaded\endinput\else\input multido.tex \fi 
    1212% JPV & ML & AS 
    13 \def\fileversion{3.12
    14 \def\filedate{2008/05/18
     13\def\fileversion{3.13
     14\def\filedate{2008/05/29
    1515\message{`PSTSOLIDESIIID' v\fileversion, \filedate} 
    1616% 
     
    6565\define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme 
    6666\psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme 
     67\define@key[psset]{pst-solides3d}{plansection}{\def\pst@solides@plansection{#1}} % le plan de section 
     68\psset[pst-solides3d]{plansection=}% pas de section par defaut 
     69\define@key[psset]{pst-solides3d}{plansepare}{\def\pst@solides@plansepare{#1}} % le plan de separation 
     70\psset[pst-solides3d]{plansepare=}% pas de separation par defaut 
    6771\define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}% 
    6872\psset[pst-solides3d]{intersectionlinewidth=1}% 
     
    173177\define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}} 
    174178\psset[pst-solides3d]{file=}% pas de fichier par defaut 
     179%% nom de l'objet a charger (load) 
     180\define@key[psset]{pst-solides3d}{load}{\def\pst@solides@load{#1}} 
     181\psset[pst-solides3d]{load=}% pas de load par defaut 
    175182%% couleur face pour affinage 
    176183\define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}} 
     
    251258surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% 
    252259surfaceparametree,texte,trigospherique,vecteur,ligne,objfile,datfile,surface*,% 
    253 plan,offfile,geode
     260plan,offfile,geode,load
    254261%% Reservation de macros correspondants aux objects 
    255262\pst@solides@reservednames{object} 
     
    386393/solidintersectionplan [ \pst@solides@intersectionplan ] def 
    387394/axe  { \pst@solides@axe } def 
     395/plansection  [ \pst@solides@plansection ] def 
    388396/function  (\pst@solides@function) def 
    389397/definition  (\pst@solides@definition) def 
     
    418426\fi 
    419427% 
     428\ifx\pst@solides@plansepare\@empty 
     429    \else 
     430/plansepare {\pst@solides@plansepare} def 
     431\fi 
     432% 
    420433\ifx\pst@solides@transform\@empty 
    421434    \else 
     
    425438\ifx\pst@solides@name\@empty 
    426439    \else 
    427 /solidname /\pst@solides@name\space def 
     440/solidname (\pst@solides@name) def 
    428441\fi 
    429442\ifx\pst@solides@file\@empty 
    430443    \else 
    431444/solidfilename (\pst@solides@file) def 
     445\fi 
     446% 
     447\ifx\pst@solides@load\@empty 
     448    \else 
     449/solidloadname {\pst@solides@load} def 
    432450\fi 
    433451% 
     
    664682 
    665683%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     684%% Vecteur normal a un plan 
     685%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
     686\def\Normale{\pst@object{Normale}} 
     687\def\Normale@i(#1,#2,#3){% 
     688% #1 rayon 
     689% #2 longitude 
     690% #3 latitude 
     691\pst@killglue% 
     692\begingroup% 
     693\use@par% 
     694\pstVerb{/latitude #3 def 
     695         /longitude #2 def 
     696         /Rayon #1 def 
     697         /xP Rayon #2 cos #3 cos mul mul def 
     698         /yP Rayon #2 sin #3 cos mul mul def 
     699         /zP Rayon #3 sin mul def}% 
     700\psSolid[object=vecteur,RotZ=#2,RotY=-#3, 
     701         args=1.7 0 0](xP,yP,zP) 
     702  \endgroup% 
     703  \ignorespaces% 
     704} 
     705%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    666706%% les axes IIId 
    667707%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    668 \def\axesIIID(#1,#2,#3)(#4,#5,#6){% axes 3d 
    669   \psPoint(0,0,0){O} 
     708\def\axesIIID{\pst@object{axesIIID}} 
     709\def\axesIIID@i(#1,#2,#3)(#4,#5,#6){% axes 3d 
     710% #1 rayon 
     711% #2 longitude 
     712% #3 latitude 
     713\pst@killglue% 
     714\begingroup% 
     715\use@par% 
     716   \psPoint(0,0,0){O} 
    670717    \psPoint(#1,0,0){X} 
    671718    \psPoint(0,#2,0){Y} 
     
    683730%    \uput[l](O){$O$} 
    684731    \uput[dl](X'){$x$}\uput[r](Y'){$y$} 
    685     \uput[u](Z'){$z$}} 
     732    \uput[u](Z'){$z$} 
     733  \endgroup% 
     734  \ignorespaces% 
     735
     736 
     737%% \def\axesIIID(#1,#2,#3)(#4,#5,#6){% axes 3d 
     738%%   \psPoint(0,0,0){O} 
     739%%     \psPoint(#1,0,0){X} 
     740%%     \psPoint(0,#2,0){Y} 
     741%%     \psPoint(0,0,#3){Z} 
     742%%     \psPoint(#4,0,0){X'} 
     743%%     \psPoint(0,#5,0){Y'} 
     744%%     \psPoint(0,0,#6){Z'} 
     745%%     \psline[linestyle=dashed](O)(X) 
     746%%     \psline[linestyle=dashed](O)(Y) 
     747%%     \psline[linestyle=dashed](O)(Z) 
     748%%     \psline{->}(X)(X') 
     749%%     \psline{->}(Y)(Y') 
     750%%     \psline{->}(Z)(Z') 
     751%% %    \psdots(X)(Y)(Z) 
     752%% %    \uput[l](O){$O$} 
     753%%     \uput[dl](X'){$x$}\uput[r](Y'){$y$} 
     754%%     \uput[u](Z'){$z$}} 
    686755 
    687756 
  • trunk/solides.pro

    r29 r30  
    11%! 
    22% PostScript prologue for pst-solides3d.tex. 
    3 % Version 3.16, 2008/05/25 
     3% Version 3.17, 2008/05/29 
    44% 
    55%% COPYRIGHT 2008 by Jean-Paul Vignault, Manuel Luque 
     
    22702270} def 
    22712271 
     2272%%%%% ### symplan3d ### 
     2273%% syntaxe : M eqplan/plantype symplan3d --> M' 
     2274%% ou M' symetrique de M par rapport au plan P defini par eqplan/plantype 
     2275/symplan3d { 
     227613 dict begin 
     2277   dup isplan { 
     2278      plan2eq /args exch def 
     2279   } { 
     2280      /args exch def 
     2281   } ifelse 
     2282   /z exch def 
     2283   /y exch def 
     2284   /x exch def 
     2285   args aload pop 
     2286   /d1 exch def 
     2287   /c1 exch def 
     2288   /b1 exch def 
     2289   /a1 exch def 
     2290   /n_U a1 dup mul b1 dup mul add c1 dup mul add sqrt def 
     2291   /a a1 n_U div def 
     2292   /b b1 n_U div def 
     2293   /c c1 n_U div def 
     2294   /d d1 n_U div def 
     2295   /u a x mul b y mul add c z mul add d add def 
     2296   x 2 a mul u mul sub 
     2297   y 2 b mul u mul sub 
     2298   z 2 c mul u mul sub 
     2299end 
     2300} def 
     2301 
    22722302%%%%% ### vecteur3d ### 
    22732303%% creation du vecteur AB a partir de A et B 
     
    42244254 
    42254255%%%%% ### drawsolid ### 
     4256/solidlightOn { 
     4257   /s@lidlight true def 
     4258} def 
     4259/solidlightOff { 
     4260   /s@lidlight false def 
     4261} def 
     4262solidlightOff 
     4263 
    42264264%% syntaxe : solid i solidfacevisible? --> true si la face est visible 
    42274265/solidfacevisible? { 
     
    42604298      FC i get length 1 ge { 
    42614299         /fillstyle FC i get ( fill) append cvx 
     4300         solidgrid not { 
     4301            FC i get cvx exec 
     4302         } if 
    42624303         true 
    42634304      } { 
     
    42714312} def 
    42724313 
    4273 %% syntaxe : A solid i dessinefacevisibl
    4274 /dessinefacevisible { 
    4275 8 dict begin 
     4314%% syntaxe : solid i dessinefacecache
     4315/dessinefacecachee { 
     431611 dict begin 
    42764317   /i exch def 
    42774318   /solid exch def 
    4278    /A exch def 
    42794319   solid issolid not { 
    4280       (Error : mauvais type d argument dans dessinefacevisible) == 
     4320      (Error : mauvais type d argument dans dessinefacecachee) == 
    42814321      quit 
    42824322   } if 
     4323 
    42834324   /F solid solidgetfaces def 
    42844325   /S solid solidgetsommets def 
    42854326 
    4286    solid i solidfacevisible? { 
     4327   %% face cachee => on prend chacune des aretes de la face et on 
     4328   %% la dessine 
     4329   4 dict begin 
    42874330      /n F i get length def %% nb de sommets de la face 
    4288  
    4289       startest { 
    4290          %% choix de la couleur 
    4291          /lightcolor where { 
    4292             pop 
    4293             /coeff 
    4294                lightintensity 
    4295                solid i solidnormaleface normalize3d 
    4296                solid i solidcentreface lightsrc vecteur3d normalize3d 
    4297                scalprod3d mul 
    4298                0 max 1 min 
    4299             def 
    4300             /fillstyle { 
    4301                 lightcolor {coeff mul} apply setcolor fill 
    4302             } def 
    4303             solidgrid not { 
    4304                lightcolor {coeff mul} apply setcolor 
    4305             } if 
    4306          } { 
    4307             /lightsrc where { 
    4308                pop 
    4309                /coeff 
    4310                   lightintensity 
    4311                   solid i solidnormaleface normalize3d 
    4312                   solid i solidcentreface lightsrc vecteur3d normalize3d 
    4313                   scalprod3d mul 
    4314                   0 max 1 min 
    4315                def 
    4316                /lacouleur [ 
    4317                   gsave 
    4318                      solid solidgetfcolors i get cvx exec currentrgbcolor 
    4319                   grestore 
    4320                ] def 
    4321                /fillstyle { 
    4322                   lacouleur {coeff mul} apply setcolor fill 
    4323                } def 
    4324                solidgrid not { 
    4325                   lacouleur {coeff mul} apply setcolor 
    4326                } if 
    4327             } { 
    4328                solid i affectecouleursolid_facei 
    4329             } ifelse 
    4330  
    4331          } ifelse 
    4332       } if 
    4333  
     4331      0 1 n 1 sub { 
     4332         /k exch def 
     4333         /k1 F i k get_ij def              %% indice sommet1 
     4334         /k2 F i k 1 add n mod get_ij def  %% indice sommet2 
     4335         gsave 
     4336            currentlinewidth .5 mul setlinewidth 
     4337            pointilles 
     4338            [S k1 getp3d 
     4339            S k2 getp3d sortp3d] ligne3d 
     4340         grestore 
     4341      } for 
     4342 
     4343   %% trace de la ligne de niveau 
     4344   solidintersectiontype 0 ge { 
    43344345      /face_a_dessiner [  %% face visible : F [i] 
    43354346         0 1 n 1 sub { 
     
    43384349         } for 
    43394350      ] def  
    4340       face_a_dessiner polygone3d 
    4341  
    4342       %% on marque les aretes 
    4343       aretescachees { 
    4344          0 1 n 1 sub { 
    4345             /j exch def 
    4346             /k1 F i j get_ij def              %% indice sommet1 
    4347             /k2 F i j 1 add n mod get_ij def  %% indice sommet2 
    4348             A k1 k2 true put_ij 
    4349             A k2 k1 true put_ij 
    4350          } for 
    4351       } if 
    4352  
    4353  
    4354       %% trace de la ligne de niveau 
    4355       solidintersectiontype 0 ge { 
    4356          0 1 solidintersectionplan length 1 sub { 
    4357             /k exch def 
    4358             /lignedeniveau [] def 
    4359             gsave 
    4360                k solidintersectionlinewidth length lt { 
    4361                   solidintersectionlinewidth k get setlinewidth 
    4362                } { 
    4363                   solidintersectionlinewidth 0 get setlinewidth 
    4364                } ifelse 
    4365                k solidintersectioncolor length lt { 
    4366                   solidintersectioncolor k get cvx exec 
    4367                } { 
    4368                   solidintersectioncolor 0 get cvx exec 
    4369                } ifelse 
    4370                0 1 n 1 sub { 
    4371                   /j exch def 
    4372                   face_a_dessiner j getp3d 
    4373                   face_a_dessiner j 1 add n mod getp3d 
    4374                   solidintersectionplan k get segment_inter_plan { 
    4375                   1 dict begin 
    4376                      /table exch def 
     4351      0 1 solidintersectionplan length 1 sub { 
     4352         /k exch def 
     4353         /lignedeniveau [] def 
     4354         gsave 
     4355            pointilles 
     4356            k solidintersectionlinewidth length lt { 
     4357               solidintersectionlinewidth k get setlinewidth 
     4358            } { 
     4359               solidintersectionlinewidth 0 get setlinewidth 
     4360            } ifelse 
     4361            k solidintersectioncolor length lt { 
     4362               solidintersectioncolor k get cvx exec 
     4363            } { 
     4364               solidintersectioncolor 0 get cvx exec 
     4365            } ifelse 
     4366            0 1 n 1 sub { 
     4367               /j exch def 
     4368               face_a_dessiner j getp3d 
     4369               face_a_dessiner j 1 add n mod getp3d 
     4370               solidintersectionplan k get segment_inter_plan { 
     4371               1 dict begin 
     4372                  /table exch def 
     4373                  table length 6 eq { 
     4374                     /lignedeniveau table store 
     4375                     exit 
     4376                  } { 
    43774377                     /lignedeniveau [  
    43784378                        lignedeniveau aload pop  
    43794379                        table 0 getp3d 
    4380                         table length 4 ge { 
    4381                            table 1 getp3d 
    4382                         } if 
    43834380                     ] store 
    4384                   end 
    4385                   } if 
    4386                } for 
    4387                 
    4388                %% dessin de la ligne 
    4389                lignedeniveau length 4 ge { 
    4390                   solid i solidisinface { 
    4391                      pointilles  
    4392                   } if 
    4393                   lignedeniveau ligne3d 
     4381                  } ifelse 
     4382               end 
    43944383               } if 
    4395             grestore 
    4396          } for          
    4397       } if 
    4398        
    4399    } if 
    4400 end 
    4401 } def 
    4402  
    4403 %% syntaxe : A solid i dessinefacecachee 
    4404 /dessinefacecachee { 
    4405 6 dict begin 
     4384            } for 
     4385             
     4386            %% dessin de la ligne 
     4387            lignedeniveau length 4 ge { 
     4388               [lignedeniveau aload pop sortp3d] ligne3d 
     4389            } if 
     4390         grestore 
     4391      } for          
     4392   } if 
     4393    
     4394   end 
     4395end 
     4396} def 
     4397 
     4398%% syntaxe : solid i dessinefacevisible 
     4399/dessinefacevisible { 
     44008 dict begin 
    44064401   /i exch def 
    44074402   /solid exch def 
    44084403   solid issolid not { 
    4409       (Error : mauvais type d argument dans dessinefacecachee) == 
     4404      (Error : mauvais type d argument dans dessinefacevisible) == 
    44104405      quit 
    44114406   } if 
    4412    /A exch def 
    4413  
    44144407   /F solid solidgetfaces def 
    44154408   /S solid solidgetsommets def 
    44164409 
    4417    solid i solidfacevisible? not { 
    4418       %% face cachee => on prend chacune des aretes de la face et on 
    4419       %% regarde si elle est deja dessinee. 
    4420       4 dict begin 
    4421          /n F i get length def %% nb de sommets de la face 
    4422          0 1 n 1 sub { 
     4410   /n F i get length def %% nb de sommets de la face 
     4411 
     4412   startest { 
     4413      s@lidlight { 
     4414         /coeff 
     4415            lightintensity 
     4416            solid i solidnormaleface normalize3d 
     4417            solid i solidcentreface lightsrc vecteur3d normalize3d 
     4418            scalprod3d mul 
     4419            0 max 1 min 
     4420         def 
     4421         /lightcolor where { 
     4422            pop 
     4423            /lacouleur lightcolor def 
     4424         } { 
     4425            /lacouleur [ 
     4426               gsave 
     4427                  solid solidgetfcolors i get cvx exec currentrgbcolor 
     4428               grestore 
     4429            ] def 
     4430         } ifelse 
     4431         /fillstyle { 
     4432             lacouleur {coeff mul} apply setcolor fill 
     4433         } def 
     4434         solidgrid not { 
     4435            lacouleur {coeff mul} apply setcolor 
     4436         } if 
     4437      } { 
     4438         n 2 eq { 
     4439            1 dict begin 
     4440               solidgridOff 
     4441               solid i affectecouleursolid_facei 
     4442            end 
     4443         } { 
     4444            solid i affectecouleursolid_facei 
     4445         } ifelse 
     4446      } ifelse 
     4447   } if 
     4448 
     4449   /face_a_dessiner [  %% face visible : F [i] 
     4450      0 1 n 1 sub { 
     4451         /j exch def 
     4452         solid j i solidgetsommetface 
     4453      } for 
     4454   ] def  
     4455   face_a_dessiner polygone3d 
     4456 
     4457   %% trace de la ligne de niveau 
     4458   solidintersectiontype 0 ge { 
     4459      0 1 solidintersectionplan length 1 sub { 
    44234460         /k exch def 
    4424             /k1 F i k get_ij def              %% indice sommet1 
    4425             /k2 F i k 1 add n mod get_ij def  %% indice sommet2 
    4426             A k1 k2 get_ij not { 
    4427                gsave 
    4428                   currentlinewidth .5 mul setlinewidth 
    4429                   pointilles 
    4430                   [S k1 getp3d 
    4431                   S k2 getp3d] ligne3d 
    4432                   A k1 k2 true put_ij 
    4433                   A k2 k1 true put_ij 
    4434                grestore 
    4435             } if 
    4436          } for 
    4437  
    4438       %% trace de la ligne de niveau 
    4439       solidintersectiontype 0 ge { 
    4440          /face_a_dessiner [  %% face visible : F [i] 
     4461         /lignedeniveau [] def 
     4462         gsave 
     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 
    44414473            0 1 n 1 sub { 
    44424474               /j exch def 
    4443                solid j i solidgetsommetface 
     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                  /lignedeniveau [  
     4481                     lignedeniveau aload pop  
     4482                     table 0 getp3d 
     4483                     table length 4 ge { 
     4484                        table 1 getp3d 
     4485                     } if 
     4486                  ] store 
     4487               end 
     4488               } if 
    44444489            } for 
    4445          ] def  
    4446          0 1 solidintersectionplan length 1 sub { 
    4447             /k exch def 
    4448             /lignedeniveau [] def 
    4449             gsave 
    4450                pointilles 
    4451                k solidintersectionlinewidth length lt { 
    4452                   solidintersectionlinewidth k get setlinewidth 
    4453                } { 
    4454                   solidintersectionlinewidth 0 get setlinewidth 
    4455                } ifelse 
    4456                k solidintersectioncolor length lt { 
    4457                   solidintersectioncolor k get cvx exec 
    4458                } { 
    4459                   solidintersectioncolor 0 get cvx exec 
    4460                } ifelse 
    4461                0 1 n 1 sub { 
    4462                   /j exch def 
    4463                   face_a_dessiner j getp3d 
    4464                   face_a_dessiner j 1 add n mod getp3d 
    4465                   solidintersectionplan k get segment_inter_plan { 
    4466                   1 dict begin 
    4467                      /table exch def 
    4468                      table length 6 eq { 
    4469                         /lignedeniveau table store 
    4470                         exit 
    4471                      } { 
    4472                         /lignedeniveau [  
    4473                            lignedeniveau aload pop  
    4474                            table 0 getp3d 
    4475                         ] store 
    4476                      } ifelse 
    4477                   end 
    4478                   } if 
    4479                } for 
    4480                 
    4481                %% dessin de la ligne 
    4482                lignedeniveau length 4 ge { 
    4483                   [lignedeniveau aload pop sortp3d] ligne3d 
     4490             
     4491            %% dessin de la ligne 
     4492            lignedeniveau length 4 ge { 
     4493               solid i solidisinface { 
     4494                  pointilles  
    44844495               } if 
    4485             grestore 
    4486          } for          
    4487       } if 
     4496               lignedeniveau ligne3d 
     4497            } if 
     4498         grestore 
     4499      } for          
     4500   } if 
    44884501       
    4489       end 
    4490    } if 
    44914502end 
    44924503} def 
     
    45274538      /S exch def 
    45284539      /n S length 3 idiv def 
    4529       %% tableau des aretes 
    4530       /A [ 
    4531          aretescachees { 
    4532             n { 
    4533                [n {false} repeat] 
    4534             } repeat 
    4535          } if 
    4536        ] def 
    45374540 
    45384541      currentdict /ordre known not { 
     
    45604563         /i ordre k get def 
    45614564         gsave 
    4562          A solid i dessinefacevisible 
     4565            solid i solidfacevisible? { 
     4566               solid i dessinefacevisible 
     4567            } if 
    45634568         grestore 
    45644569      } for 
     
    45674572            /k exch def 
    45684573            /i ordre k get def 
    4569             A solid i dessinefacecachee 
     4574            gsave 
     4575               solid i solidfacevisible? not { 
     4576                  solid i dessinefacecachee 
     4577               } if  
     4578            grestore 
    45704579         } for 
    45714580      } if 
     4581 
    45724582%%       %% si on veut repasser les traits des faces visibles 
    45734583%%       0 1 F length 1 sub { 
     
    45774587%%          1 dict begin 
    45784588%%             /startest false def 
    4579 %%             A solid i dessinefacevisible 
     4589%%             solid i solidfacevisible? { 
     4590%%             solid i dessinefacevisible 
     4591%%             } if 
    45804592%%          end 
    45814593%%          grestore 
     
    54945506} def 
    54955507 
    5496 %% syntaxe : solid eqplan solidplansection --> solid2 
     5508%% syntaxe : solid eqplan/plantype solidplansection --> solid2 
    54975509/solidplansection { 
    5498551010 dict begin 
    5499    /eqplan exch def 
     5511   dup isplan { 
     5512      plan2eqplan 
     5513      /eqplan exch def 
     5514   } { 
     5515      /eqplan exch def 
     5516   } ifelse 
    55005517   dupsolid /result exch def 
    55015518   /solid exch def 
     
    56345651   } ifelse 
    56355652 
    5636  
    56375653   %% restera a traiter le cas limite ou la nouvelle face existe deja 
    56385654   %% tester si max(indicestries) < nb sommets avant section 
     
    56565672} def 
    56575673 
    5658 %% syntaxe : solid eqplan solideqplansepare --> solid1 solid2 
    5659 /solideqplansepare { 
     5674/solideqplansepare {solidplansepare} def 
     5675     
     5676%% syntaxe : solid eqplan/plantype solidplansepare --> solid1 solid2 
     5677/solidplansepare { 
    5660567810 dict begin 
    5661    /eqplan exch def 
     5679   dup isplan { 
     5680      plan2eq 
     5681      /eqplan exch def 
     5682   } { 
     5683      /eqplan exch def 
     5684   } ifelse 
    56625685   eqplan solidplansection 
    56635686   /solid exch def 
     
    79808003      {CX CY CZ translatepoint3d} solidtransform 
    79818004   } if 
     8005   plansection length 0 gt { 
     8006      0 1 plansection length 1 sub { 
     8007         /i exch def 
     8008         plansection i get solidplansection 
     8009      } for 
     8010   } if 
    79828011   /rmfaces rmfaces bubblesort reverse store 
    79838012   0 1 rmfaces length 1 sub { 
     
    80278056      } ifelse 
    80288057   } if 
     8058   tx@Dict /plansepare known { 
     8059      plansepare solidplansepare 
     8060      tx@Dict /plansepare undef 
     8061      tx@Dict /solidname known { 
     8062         solidname (1) append cvlit exch def 
     8063         solidname (0) append cvlit exch def 
     8064         tx@Dict /solidname undef 
     8065      } { 
     8066         /solid1 exch def 
     8067         /solid2 exch def 
     8068      } ifelse 
     8069   } if 
    80298070   solidhollow { 
    80308071      dup videsolid 
     
    80568097   } ifelse 
    80578098   tx@Dict /solidname known { 
    8058       solidname exch bind def 
     8099      solidname cvlit exch bind def 
    80598100      tx@Dict /solidname undef 
    80608101   } { 
     
    84758516   gere_pstricks_opt 
    84768517%   noir 
    8477 %   setTimes  
     8518   setTimes  
    84788519%   (Test) 0 0 l@pl@n cctextp3d 
     8520   l@pl@n planquadrillage 
    84798521   l@pl@n planmarks 
    84808522} def 
     
    84978539/pst-geode { 
    84988540   ngrid aload pop newgeode 
     8541   gere_pstricks_opt 
     8542} def 
     8543 
     8544/pst-load { 
     8545   solidloadname  
     8546   /activationgestioncouleurs false def 
    84998547   gere_pstricks_opt 
    85008548} def 
  • trunk/tests/index.txt

    r27 r30  
    1212test_12 : lecture / ecriture de fichier off 
    1313test_13 : intersection solide/plan 
     14test_14 : nommer un solide 
  • trunk/tests/test_03.tex

    r6 r30  
    1515\maketitle 
    1616 
     17\section {Tube avec PSTricks} 
     18 
    1719%\psset{lightsrc=10 20 30,SphericalCoor=true,viewpoint=50 20 30} 
    1820\psset{SphericalCoor=true,viewpoint=50 20 30} 
    1921 
    2022\begin{center} 
    21 \psset{unit=1.5} 
    2223\psset{lightsrc=10 0 10,SphericalCoor=true,viewpoint=50 -20 30,Decran=50} 
    23 \begin{pspicture*}(-5,-4)(6,9) 
    24 \psframe(-5,-4)(6,9) 
     24\begin{pspicture*}(-5,-4)(6,3) 
     25\psframe(-5,-4)(6,3) 
     26\defFunction{F}(t){t Cos 2 mul}{t Sin 2 mul}{2 t mul Sin 1 mul} 
     27\psSolid[object=courbe, 
     28   r=0.25, 
     29   function=F, 
     30   range=0 2 pi mul, 
     31   fillcolor=red, 
     32   ngrid=120 12, 
     33
     34\end{pspicture*} 
     35\end{center} 
     36 
     37\section {Tube avec jps} 
     38 
     39%\psset{lightsrc=10 20 30,SphericalCoor=true,viewpoint=50 20 30} 
     40\psset{SphericalCoor=true,viewpoint=50 20 30} 
     41 
     42\begin{center} 
     43\psset{lightsrc=10 0 10,SphericalCoor=true,viewpoint=50 -20 30,Decran=50} 
     44\begin{pspicture*}(-5,-4)(6,3) 
     45\psframe(-5,-4)(6,3) 
    2546\codejps{ 
    2647/a 2 def 
     
    4566} def 
    4667% 
    47 /g'' { 
    48 3 dict begin 
    49    /t exch def 
    50    t Cos a neg mul %% #rpn# -a*Cos(t) 
    51    t Sin a neg mul %% #rpn# -a*Sin(t) 
    52    2 t mul Sin -4 b mul mul %% #rpn# -4*b*Sin(2*t) 
    53 end 
    54 } def 
    55 % 
    56680 pi 2 mul {g} CourbeR3 
    5769% stop 
     
    6476%solidgridOff 
    6577% 
    66 {0 pi 2 mul (g) .25 [120 12] newtube} exec 
     780 pi 2 mul (g) .25 [120 12] newtube 
    6779dup (rouge) outputcolors 
    6880drawsolid** 
  • trunk/tests/test_10.tex

    r29 r30  
    1818\psset{SphericalCoor=true,viewpoint=50 20 30} 
    1919 
    20 \section {Test separe
     20\section {Test section avec PSTricks
    2121 
    2222\begin{center} 
     
    2525\begin{pspicture*}(-5,-4)(6,9) 
    2626\psframe(-5,-4)(6,9) 
     27\psSolid[object=cylindre, 
     28   ngrid=1 12, 
     29   r=2, 
     30   plansection={ 
     31      [0 0 1 -1] 
     32      [0 0 1 -2] 
     33      [0 0 1 -3] 
     34      [1 0 -1 2] 
     35