| 1 | %% |
|---|
| 2 | %% COPYRIGHT 2008,2009 by Manuel Luque, Arnaud Schmittbuhl, |
|---|
| 3 | %% Jean-Paul Vignault, Herbert Voss. |
|---|
| 4 | %% |
|---|
| 5 | %% This work may be distributed and/or modified under the |
|---|
| 6 | %% conditions of the LaTeX Project Public License, either version 1.3 |
|---|
| 7 | %% of this license or (at your option) any later version. |
|---|
| 8 | %% The latest version of this license is in |
|---|
| 9 | %% http://www.latex-project.org/lppl.txt |
|---|
| 10 | %% and version 1.3 or later is part of all distributions of LaTeX |
|---|
| 11 | %% version 2003/12/01 or later. |
|---|
| 12 | %% |
|---|
| 13 | %% This work has the LPPL maintenance status "maintained". |
|---|
| 14 | % |
|---|
| 15 | %% This work consists of the file pstricks.tex, PostScript macros |
|---|
| 16 | %% for Generic TeX. |
|---|
| 17 | %% See the PSTricks User's Guide for description. |
|---|
| 18 | % |
|---|
| 19 | % etex detection by looking for the \ifcsname macro |
|---|
| 20 | \expandafter\ifx\csname ifcsname\endcsname\relax |
|---|
| 21 | \newlinechar`\^^J |
|---|
| 22 | \message{^^J*****************************************} |
|---|
| 23 | \message{etex is needed to work with pst-solides3d} |
|---|
| 24 | \message{*****************************************} |
|---|
| 25 | \catcode`\ =11\relax |
|---|
| 26 | \Compile With etex Please |
|---|
| 27 | \fi |
|---|
| 28 | \csname PSTSOLIDESIIIDLoaded\endcsname |
|---|
| 29 | \let\PSTSOLIDESIIIDLoaded\endinput |
|---|
| 30 | % Requires PSTricks, pst-xkey and pst-node packages |
|---|
| 31 | \ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi |
|---|
| 32 | \ifx\PSTnodesLoaded\endinput\else\input pst-node \fi |
|---|
| 33 | \ifx\PSTXKeyLoaded\endinput\else \input pst-xkey \fi |
|---|
| 34 | \ifx\MultidoLoaded\endinput\else \input multido.tex \fi |
|---|
| 35 | % JPV & ML & AS & HV |
|---|
| 36 | \def\fileversion{4.15} |
|---|
| 37 | \def\filedate{2009/12/13} |
|---|
| 38 | \message{`PSTSOLIDESIIID' v\fileversion, \filedate} |
|---|
| 39 | % |
|---|
| 40 | \pstheader{solides.pro} |
|---|
| 41 | |
|---|
| 42 | \edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax |
|---|
| 43 | \pst@addfams{pst-solides3d} |
|---|
| 44 | \SpecialCoor |
|---|
| 45 | % |
|---|
| 46 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 47 | %% Definition des differentes variables pour PSTricks |
|---|
| 48 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 49 | % |
|---|
| 50 | %%%%%%%%%%%%%%%%% variables numeriques %%%%%%%%%%%%%%%%% |
|---|
| 51 | % |
|---|
| 52 | % point de vue et rotations de l'objet |
|---|
| 53 | % distance de l'ecran a l'observateur |
|---|
| 54 | % |
|---|
| 55 | \define@key[psset]{pst-solides3d}{viewpoint}{\def\pst@solides@viewpoint{#1}}% position de l'observateur |
|---|
| 56 | \psset[pst-solides3d]{viewpoint=10 10 10}% coordonnees cartesiennes |
|---|
| 57 | \define@key[psset]{pst-solides3d}{Decran}{\def\pst@solides@Decran{#1}}% distance de l'ecran |
|---|
| 58 | \define@key[psset]{pst-solides3d}{RotX}{\def\psk@solides@RotX{#1}}% rotation autour de Ox en degres |
|---|
| 59 | \define@key[psset]{pst-solides3d}{RotY}{\def\psk@solides@RotY{#1}}% rotation autour de Oy en degres |
|---|
| 60 | \define@key[psset]{pst-solides3d}{RotZ}{\def\psk@solides@RotZ{#1}}% rotation autour de Oz en degres |
|---|
| 61 | \psset[pst-solides3d]{RotZ=0,RotX=0,RotY=0,Decran=50}% valeurs par defaut |
|---|
| 62 | % parametres propres a chaque objet |
|---|
| 63 | \define@key[psset]{pst-solides3d}{resolution}{\def\pst@solides@resolution{#1}} % nb points par courbe |
|---|
| 64 | \define@key[psset]{pst-solides3d}{no}{\def\pst@solides@no{#1}} % numero face du solide |
|---|
| 65 | \define@key[psset]{pst-solides3d}{phi}{\def\pst@solides@phi{#1}} % angle calotte sphere |
|---|
| 66 | \define@key[psset]{pst-solides3d}{theta}{\def\pst@solides@theta{#1}} % angle calotte sphere |
|---|
| 67 | \define@key[psset]{pst-solides3d}{r0}{\def\pst@solides@rO{#1}} % rayon interieur tore |
|---|
| 68 | \define@key[psset]{pst-solides3d}{r1}{\def\pst@solides@rI{#1}} % rayon moyen tore |
|---|
| 69 | \define@key[psset]{pst-solides3d}{R}{\def\pst@solides@R{#1}} % rayon moyen tore |
|---|
| 70 | \define@key[psset]{pst-solides3d}{r}{\def\pst@solides@r{#1}} % rayon de la sphere circonscrite |
|---|
| 71 | \define@key[psset]{pst-solides3d}{a}{\def\pst@solides@a{#1}} % arete du cube (1 du parallelepipede) |
|---|
| 72 | \define@key[psset]{pst-solides3d}{b}{\def\pst@solides@b{#1}} % arete 2 du parallelepipede |
|---|
| 73 | \define@key[psset]{pst-solides3d}{c}{\def\pst@solides@c{#1}} % arete 3 du parallelepipede |
|---|
| 74 | \define@key[psset]{pst-solides3d}{h}{\def\pst@solides@h{#1}} % hauteur du cylindre, du cone, du prisme |
|---|
| 75 | \define@key[psset]{pst-solides3d}{chanfreincoeff}{\def\pst@solides@chanfreincoeff{#1}} % coeff de chanfreinage |
|---|
| 76 | \define@key[psset]{pst-solides3d}{trunccoeff}{\def\pst@solides@trunccoeff{#1}} % coeff de troncature |
|---|
| 77 | \define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} % coeff de affinage |
|---|
| 78 | \define@key[psset]{pst-solides3d}{dualregcoeff}{\def\pst@solides@dualregcoeff{#1}} % coeff de dual |
|---|
| 79 | \define@key[psset]{pst-solides3d}{intersectiontype}{\def\pst@solides@intersectiontype{#1}} % |
|---|
| 80 | % |
|---|
| 81 | %% les affectations par defaut |
|---|
| 82 | \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,% |
|---|
| 83 | trunccoeff=.25,chanfreincoeff=.8,affinagecoeff=.8,dualregcoeff=1,intersectiontype=-1} |
|---|
| 84 | % |
|---|
| 85 | %%%%%%%%%%%%%%%%% variables complexes %%%%%%%%%%%%%%%%% |
|---|
| 86 | % |
|---|
| 87 | \define@key[psset]{pst-solides3d}{base}{\def\pst@solides@base{#1}} % base du prisme |
|---|
| 88 | \psset[pst-solides3d]{base=-1 -1 1 -1 0 1}% coordonnees d'un triangle, base triangulaire par defaut |
|---|
| 89 | \define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} % axe du prisme |
|---|
| 90 | \psset[pst-solides3d]{axe=0 0 1}% vecteur definissant la direction de l'axe du prisme |
|---|
| 91 | \define@key[psset]{pst-solides3d}{plansection}{\def\pst@solides@plansection{#1}} % le plan de section |
|---|
| 92 | \psset[pst-solides3d]{plansection=}% pas de section par defaut |
|---|
| 93 | \define@key[psset]{pst-solides3d}{plansepare}{\def\pst@solides@plansepare{#1}} % le plan de separation |
|---|
| 94 | \psset[pst-solides3d]{plansepare=}% pas de separation par defaut |
|---|
| 95 | \define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}% |
|---|
| 96 | \psset[pst-solides3d]{intersectionlinewidth=1}% |
|---|
| 97 | \define@key[psset]{pst-solides3d}{intersectioncolor}{\def\pst@solides@intersectioncolor{#1}}% |
|---|
| 98 | \psset[pst-solides3d]{intersectioncolor=(rouge)}% |
|---|
| 99 | \define@key[psset]{pst-solides3d}{intersectionplan}{\def\pst@solides@intersectionplan{#1}}% |
|---|
| 100 | \psset[pst-solides3d]{intersectionplan=[0 0 1 0]}% |
|---|
| 101 | \define@key[psset]{pst-solides3d}{definition}{\def\pst@solides@definition{#1}} % |
|---|
| 102 | \psset[pst-solides3d]{definition=}% |
|---|
| 103 | \define@key[psset]{pst-solides3d}{args}{\def\pst@solides@args{#1}} % |
|---|
| 104 | \psset[pst-solides3d]{args=}% |
|---|
| 105 | \define@key[psset]{pst-solides3d}{transform}{\def\pst@solides@transform{#1}} % |
|---|
| 106 | \psset[pst-solides3d]{transform=}% |
|---|
| 107 | \define@key[psset]{pst-solides3d}{zcolor}{\def\pst@solides@zcolor{#1}} % |
|---|
| 108 | \psset[pst-solides3d]{zcolor=}% |
|---|
| 109 | \define@key[psset]{pst-solides3d}{tablez}{\def\pst@solides@tablez{#1}} % |
|---|
| 110 | \psset[pst-solides3d]{tablez=}% |
|---|
| 111 | |
|---|
| 112 | \def\Sol@Section{% |
|---|
| 113 | R h 2 div neg % sommet 1 |
|---|
| 114 | R h 2 div % sommet 2 |
|---|
| 115 | r h 2 div % sommet 3 |
|---|
| 116 | r h 2 div neg % sommet 4 |
|---|
| 117 | } |
|---|
| 118 | \define@key[psset]{pst-solides3d}{section}{\def\pst@solides@section{#1}} % section de l'objet de revolution |
|---|
| 119 | \psset[pst-solides3d]{section=\Sol@Section}% coordonnees des sommets de la section |
|---|
| 120 | |
|---|
| 121 | %% decalage pourle prisme |
|---|
| 122 | \define@key[psset]{pst-solides3d}{decal}{\def\pst@solides@decal{#1}} |
|---|
| 123 | \psset[pst-solides3d]{decal=-2}% decalage par defaut |
|---|
| 124 | |
|---|
| 125 | % teinte des faces exterieures de l'objet a partir de PSTricks |
|---|
| 126 | % donnee par filcollor |
|---|
| 127 | % teinte des faces interieures de l'objet a partir de PSTricks |
|---|
| 128 | \define@key[psset]{pst-solides3d}{incolor}{\pst@getcolor{#1}\psincolor} |
|---|
| 129 | \psset[pst-solides3d]{incolor=green} |
|---|
| 130 | % |
|---|
| 131 | %% couleurs definies par l'utilisateur |
|---|
| 132 | \define@key[psset]{pst-solides3d}{color1}{\pst@getcolor{#1}\pscolora} |
|---|
| 133 | \psset[pst-solides3d]{color1=cyan} |
|---|
| 134 | % |
|---|
| 135 | \define@key[psset]{pst-solides3d}{color2}{\pst@getcolor{#1}\pscolorb} |
|---|
| 136 | \psset[pst-solides3d]{color2=magenta} |
|---|
| 137 | % |
|---|
| 138 | \define@key[psset]{pst-solides3d}{color3}{\pst@getcolor{#1}\pscolorc} |
|---|
| 139 | \psset[pst-solides3d]{color3=blue} |
|---|
| 140 | % |
|---|
| 141 | \define@key[psset]{pst-solides3d}{color4}{\pst@getcolor{#1}\pscolord} |
|---|
| 142 | \psset[pst-solides3d]{color4=red} |
|---|
| 143 | % |
|---|
| 144 | % resolution du trace |
|---|
| 145 | \newcount\test@mode |
|---|
| 146 | \define@key[psset]{pst-solides3d}{mode}{% resolution : mode=0,1,2, 3,4 ou 5 |
|---|
| 147 | \test@mode=#1\relax% |
|---|
| 148 | \ifnum\test@mode>4% |
|---|
| 149 | \typeout{mode must be 0,1,2,3 or 4 and not `\the\test@mode'. Value 4 forced.}\test@mode=4% |
|---|
| 150 | \fi% |
|---|
| 151 | \edef\pst@solides@mode{\the\test@mode}}% |
|---|
| 152 | \psset[pst-solides3d]{mode=2}% |
|---|
| 153 | % |
|---|
| 154 | %%%%%%%%%%%%%%%%% variables booleennes %%%%%%%%%%%%%%%%% |
|---|
| 155 | % |
|---|
| 156 | %\define@boolkey[psset]{pst-solides3d}[Pst@]{SphericalCoor}[true]{% |
|---|
| 157 | % \ifPst@SphericalCoor |
|---|
| 158 | % \def\pst@solides@viewpoint{ 17.320509 45 35.264389 }% |
|---|
| 159 | % \fi} |
|---|
| 160 | %\psset{SphericalCoor=false} |
|---|
| 161 | % |
|---|
| 162 | \define@boolkey[psset]{pst-solides3d}[Pst@]{isolatin}[false]{} |
|---|
| 163 | \psset{isolatin=true} |
|---|
| 164 | \define@boolkey[psset]{pst-solides3d}[Pst@]{affinagerm}[false]{} |
|---|
| 165 | \psset{affinagerm=true} |
|---|
| 166 | \define@boolkey[psset]{pst-solides3d}[Pst@]{chanfrein}[true]{} |
|---|
| 167 | \psset{chanfrein=false} |
|---|
| 168 | \define@boolkey[psset]{pst-solides3d}[Pst@]{grid}[false]{} |
|---|
| 169 | \psset{grid=true} |
|---|
| 170 | \define@boolkey[psset]{pst-solides3d}[Pst@]{dualreg}[true]{} |
|---|
| 171 | \psset{dualreg=false} |
|---|
| 172 | \define@boolkey[psset]{pst-solides3d}[Pst@]{geode}[true]{} |
|---|
| 173 | \psset{geode=false} |
|---|
| 174 | \define@boolkey[psset]{pst-solides3d}[Pst@]{hollow}[true]{} |
|---|
| 175 | \psset{hollow=false} |
|---|
| 176 | \define@boolkey[psset]{pst-solides3d}[Pst@]{biface}[true]{} |
|---|
| 177 | \psset{biface=true}% |
|---|
| 178 | \define@boolkey[psset]{pst-solides3d}[Pst@]{axesboxed}[true]{} |
|---|
| 179 | \psset{axesboxed=false}% |
|---|
| 180 | \define@boolkey[psset]{pst-solides3d}[Pst@]{planmarks}[true]{} |
|---|
| 181 | \psset{planmarks=false}% |
|---|
| 182 | \define@boolkey[psset]{pst-solides3d}[Pst@]{plangrid}[true]{} |
|---|
| 183 | \psset{plangrid=false}% |
|---|
| 184 | \define@boolkey[psset]{pst-solides3d}[Pst@]{showbase}[true]{} |
|---|
| 185 | \psset{showbase=false}% |
|---|
| 186 | \define@boolkey[psset]{pst-solides3d}[Pst@]{showBase}[true]{} |
|---|
| 187 | \psset{showBase=false}% |
|---|
| 188 | \define@boolkey[psset]{pst-solides3d}[Pst@]{deactivatecolor}[true]{} |
|---|
| 189 | \psset{deactivatecolor=false}% |
|---|
| 190 | |
|---|
| 191 | %% faces a enlever |
|---|
| 192 | \define@key[psset]{pst-solides3d}{rm}{\def\pst@solides@CoordinatesRm{#1}} |
|---|
| 193 | \psset[pst-solides3d]{rm=}% pas de faces par defaut |
|---|
| 194 | %% nom de la variable de sauvegarde du solide considere |
|---|
| 195 | \define@key[psset]{pst-solides3d}{name}{\def\pst@solides@name{#1}} |
|---|
| 196 | \psset[pst-solides3d]{name=}% pas de nom par defaut |
|---|
| 197 | %% nom de la variable de sauvegarde du solide sur lequel on doit projeter |
|---|
| 198 | \define@key[psset]{pst-solides3d}{solidname}{\def\pst@solides@solidname{#1}} |
|---|
| 199 | \psset[pst-solides3d]{solidname=}% pas de nom par defaut |
|---|
| 200 | %% nom du fichier externe |
|---|
| 201 | \define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}} |
|---|
| 202 | \psset[pst-solides3d]{file=}% pas de fichier par defaut |
|---|
| 203 | %% nom de l'objet de type plan |
|---|
| 204 | \define@key[psset]{pst-solides3d}{planname}{\def\pst@solides@planname{#1}} |
|---|
| 205 | \psset[pst-solides3d]{planname=}% pas de nom par defaut |
|---|
| 206 | %% nom de l'objet a charger (load) |
|---|
| 207 | \define@key[psset]{pst-solides3d}{load}{\def\pst@solides@load{#1}} |
|---|
| 208 | \psset[pst-solides3d]{load=}% pas de load par defaut |
|---|
| 209 | %% couleur face pour affinage |
|---|
| 210 | \define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}} |
|---|
| 211 | \psset[pst-solides3d]{fcolor=}% pas de couleur par defaut |
|---|
| 212 | %% couleurs de faces isolees |
|---|
| 213 | \define@key[psset]{pst-solides3d}{fcol}{\def\pst@solides@fcol{#1}} |
|---|
| 214 | \psset[pst-solides3d]{fcol=}% pas de faces par defaut |
|---|
| 215 | %% les degrades ``hue'' |
|---|
| 216 | \define@key[psset]{pst-solides3d}{hue}{\def\pst@solides@hue{#1}} |
|---|
| 217 | \psset[pst-solides3d]{hue=}% pas de degrade externe par defaut |
|---|
| 218 | \define@key[psset]{pst-solides3d}{inhue}{\def\pst@solides@inhue{#1}} |
|---|
| 219 | \psset[pst-solides3d]{inhue=}% pas de degrade interne par defaut |
|---|
| 220 | \define@key[psset]{pst-solides3d}{inouthue}{\def\pst@solides@inouthue{#1}} |
|---|
| 221 | \psset[pst-solides3d]{inouthue=}% pas de degrade total par defaut |
|---|
| 222 | %% definition des faces et des sommets d'un nouveau solide |
|---|
| 223 | \define@key[psset]{pst-solides3d}{sommets}{\def\pst@solides@sommets{#1}} |
|---|
| 224 | \psset[pst-solides3d]{sommets=}% pas de sommet par defaut |
|---|
| 225 | %% \define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}} |
|---|
| 226 | %% \psset[pst-solides3d]{faces=}% pas de face par defaut |
|---|
| 227 | \define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}} |
|---|
| 228 | \psset[pst-solides3d]{faces={}}% valeurs par defaut |
|---|
| 229 | %% numerotation des faces |
|---|
| 230 | \define@key[psset]{pst-solides3d}{numfaces}{\def\pst@solides@numfaces{#1}} |
|---|
| 231 | \psset[pst-solides3d]{numfaces=}% pas de numerotation par defaut |
|---|
| 232 | %% troncature des sommets |
|---|
| 233 | \define@key[psset]{pst-solides3d}{trunc}{\def\pst@solides@trunc{#1}} |
|---|
| 234 | \psset[pst-solides3d]{trunc=}% pas de troncature par defaut |
|---|
| 235 | %% affinage des faces |
|---|
| 236 | \define@key[psset]{pst-solides3d}{affinage}{\def\pst@solides@affinage{#1}} |
|---|
| 237 | \psset[pst-solides3d]{affinage=}% pas de affinage par defaut |
|---|
| 238 | %% numerotation des sommets |
|---|
| 239 | \define@key[psset]{pst-solides3d}{num}{\def\pst@solides@num{#1}} |
|---|
| 240 | \psset[pst-solides3d]{num=}% pas de numerotation defaut |
|---|
| 241 | %% pointage des sommets |
|---|
| 242 | \define@key[psset]{pst-solides3d}{show}{\def\pst@solides@show{#1}} |
|---|
| 243 | \psset[pst-solides3d]{show=}% pas de pointage par defaut |
|---|
| 244 | %% maillage de l'utilisateur |
|---|
| 245 | \define@key[psset]{pst-solides3d}{ngrid}{\def\pst@solides@ngrid{#1}} |
|---|
| 246 | \psset[pst-solides3d]{ngrid=20 20}% pas de faces par defaut |
|---|
| 247 | |
|---|
| 248 | % source de la lumiere : |
|---|
| 249 | \define@key[psset]{pst-solides3d}{lightsrc}{\def\pst@solides@CoordinatesLight{#1}} |
|---|
| 250 | \psset[pst-solides3d]{lightsrc=}% pas de coordonnees par defaut |
|---|
| 251 | % intensite de la lumiere |
|---|
| 252 | \define@key[psset]{pst-solides3d}{lightintensity}{\def\pst@solides@lightintensity{#1}} |
|---|
| 253 | \psset[pst-solides3d]{lightintensity=2} |
|---|
| 254 | |
|---|
| 255 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 256 | %% Code \@for (Stolen from LaTeX file: latex.ltx) |
|---|
| 257 | %% thanks to Herbert Voss |
|---|
| 258 | \expandafter\ifx\csname @latexerr\endcsname\relax% do we have LaTeX? |
|---|
| 259 | \immediate\write17{We are running tex and have to define some LaTeX commands ...} |
|---|
| 260 | \def\@fornoop#1\@@#2#3{} |
|---|
| 261 | \long\def\@for#1:=#2\do#3{% |
|---|
| 262 | \expandafter\def\expandafter\@fortmp\expandafter{#2}% |
|---|
| 263 | \ifx\@fortmp\@empty \else |
|---|
| 264 | \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi} |
|---|
| 265 | \long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else |
|---|
| 266 | #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi} |
|---|
| 267 | \long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil |
|---|
| 268 | \expandafter\@fornoop \else |
|---|
| 269 | #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}% |
|---|
| 270 | \fi |
|---|
| 271 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 272 | %% Reservation des noms de macros |
|---|
| 273 | % #1=type de reservation (action, object...) associee a une liste qui |
|---|
| 274 | % doit forcement etre du type pst@solides@list@#1 |
|---|
| 275 | \def\pst@solides@reservednames#1{% |
|---|
| 276 | \edef\@tempa{\csname pst@solides@list@#1\endcsname} |
|---|
| 277 | \@for \name:=\@tempa\do{% |
|---|
| 278 | \expandafter\def\csname pst@solides@#1@\name\endcsname{}% |
|---|
| 279 | }} |
|---|
| 280 | % type de dessin |
|---|
| 281 | \def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid,writeoff} |
|---|
| 282 | %% Reservation de macros correspondants aux actions |
|---|
| 283 | \pst@solides@reservednames{action} |
|---|
| 284 | \define@key[psset]{pst-solides3d}{action}{% |
|---|
| 285 | \ifcsname pst@solides@action@#1\endcsname |
|---|
| 286 | \def\pst@solides@action{#1}% |
|---|
| 287 | \else |
|---|
| 288 | \@pstrickserr{This action is not authorized, the procedure draw** is |
|---|
| 289 | chosen by default}{}% |
|---|
| 290 | \fi} |
|---|
| 291 | % type par defaut = faces vues remplies |
|---|
| 292 | \psset[pst-solides3d]{action=draw**}% |
|---|
| 293 | % |
|---|
| 294 | % choix de la police et de la taille des caracteres en cm !! |
|---|
| 295 | \define@key[psset]{pst-solides3d}{PSfont}{\def\pst@solides@PSfont{/#1 }} |
|---|
| 296 | \define@key[psset]{pst-solides3d}{fontsize}{\def\pst@solides@fontsize{#1 }} |
|---|
| 297 | \psset[pst-solides3d]{PSfont=Times-Roman,fontsize=10} |
|---|
| 298 | |
|---|
| 299 | % nature de l'objet |
|---|
| 300 | \def\pst@solides@list@object{% |
|---|
| 301 | tore,cube,tetrahedron,octahedron,icosahedron,dodecahedron,sphere,% |
|---|
| 302 | cylindre,cylindrecreux,cone,conecreux,tronccone,troncconecreux,% |
|---|
| 303 | grille,prisme,anneau,parallelepiped,prismecreux,ruban,calottesphere,face,% |
|---|
| 304 | Surface,surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,% |
|---|
| 305 | surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,% |
|---|
| 306 | plan,offfile,geode,load,plantype,point,pie,droite,polygone,cercle,rightangle} |
|---|
| 307 | % |
|---|
| 308 | %% Reservation de macros correspondants aux objects |
|---|
| 309 | \pst@solides@reservednames{object} |
|---|
| 310 | \define@key[psset]{pst-solides3d}{object}{% |
|---|
| 311 | \ifcsname pst@solides@object@#1\endcsname |
|---|
| 312 | \def\psk@solides@object{pst-#1}% |
|---|
| 313 | \else |
|---|
| 314 | \@pstrickserr{The solid #1 is not defined, the solid by default is |
|---|
| 315 | drawn}{}% |
|---|
| 316 | \fi} |
|---|
| 317 | %% Ajout de solides la liste des objets |
|---|
| 318 | \def\addtosolideslistobject#1{% |
|---|
| 319 | % ajouter les nouveaux objets la liste |
|---|
| 320 | \expandafter\def\expandafter\pst@solides@list@object\expandafter% |
|---|
| 321 | {\pst@solides@list@object,#1}% |
|---|
| 322 | % Reserver le nom des nouveaux objets |
|---|
| 323 | \edef\@tempa{#1}% |
|---|
| 324 | \@for \name:=\@tempa\do{% |
|---|
| 325 | \expandafter\def\csname pst@solides@object@\name\endcsname{}% |
|---|
| 326 | }} |
|---|
| 327 | % solide par defaut |
|---|
| 328 | \psset[pst-solides3d]{object=tore}% |
|---|
| 329 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 330 | % |
|---|
| 331 | % pour le quadrillage 3d |
|---|
| 332 | \define@key[psset]{pst-solides3d}{spotX}{\def\pst@solides@@spotX{#1}}% |
|---|
| 333 | \define@key[psset]{pst-solides3d}{spotY}{\def\pst@solides@@spotY{#1}}% |
|---|
| 334 | \define@key[psset]{pst-solides3d}{spotZ}{\def\pst@solides@@spotZ{#1}}% |
|---|
| 335 | \define@key[psset]{pst-solides3d}{QZ}{\def\pst@solides@@QZ{#1}}% |
|---|
| 336 | \define@key[psset]{pst-solides3d}{Zmin}{\def\pst@solides@@Zmin{#1 }}% |
|---|
| 337 | \define@key[psset]{pst-solides3d}{Zmax}{\def\pst@solides@@Zmax{#1 }}% |
|---|
| 338 | \psset[pst-solides3d]{spotX=dr,spotY=dl,spotZ=l,QZ=0,Zmin=-4,Zmax=4} |
|---|
| 339 | % spotX, Y, Z vaut de 0 a 360 degres pour placer les valeurs correctement |
|---|
| 340 | % QZ translation du quadrillage suivant l'axe Oz |
|---|
| 341 | |
|---|
| 342 | \define@key[psset]{pst-solides3d}{stepX}{\pst@getint{#1}\psk@solides@stepX} |
|---|
| 343 | \define@key[psset]{pst-solides3d}{stepY}{\pst@getint{#1}\psk@solides@stepY} |
|---|
| 344 | \define@key[psset]{pst-solides3d}{stepZ}{\pst@getint{#1}\psk@solides@stepZ} |
|---|
| 345 | \define@key[psset]{pst-solides3d}{ticklength}{\pst@checknum{#1}\psk@solides@ticklength} |
|---|
| 346 | %\define@key[psset]{pst-solides3d}{Dx}{\pst@checknum{#1}\psk@solides@Dx } |
|---|
| 347 | %\define@key[psset]{pst-solides3d}{Dy}{\pst@checknum{#1}\psk@solides@Dy } |
|---|
| 348 | %\define@key[psset]{pst-solides3d}{Dz}{\pst@checknum{#1}\psk@solides@Dz } |
|---|
| 349 | \psset[pst-solides3d]{stepX=1,stepY=1,stepZ=1,ticklength=0.2}% the step for the axes labels |
|---|
| 350 | |
|---|
| 351 | \def\gridIIID{\pst@object{gridIIID}} |
|---|
| 352 | %% usage : \gridIIID[options](x_min,x_max)(y_min,y_max) |
|---|
| 353 | \def\gridIIID@i(#1,#2)(#3,#4){% |
|---|
| 354 | \@ifnextchar[{\gridIIID@ii(#1,#2)(#3,#4)}{\gridIIID@ii(#1,#2)(#3,#4)[2,2,3]}} |
|---|
| 355 | \def\gridIIID@ii(#1,#2)(#3,#4)[#5,#6,#7]{% |
|---|
| 356 | \pst@killglue% |
|---|
| 357 | \begingroup% |
|---|
| 358 | \use@par% |
|---|
| 359 | \psSolid[object=parallelepiped, |
|---|
| 360 | intersectiontype=-1, |
|---|
| 361 | a={#2 #1 sub},b={#4 #3 sub}, |
|---|
| 362 | c={\pst@solides@@Zmax \pst@solides@@Zmin sub}, |
|---|
| 363 | action=draw](0,0,\pst@solides@@Zmax \pst@solides@@Zmin add 2 div )% |
|---|
| 364 | \ifnum#1<0 \pst@cnta=-#1 \def\pst@minus{-}\else\pst@cnta=#1 \def\pst@minus{}\fi |
|---|
| 365 | \divide\pst@cnta by \psk@solides@stepX |
|---|
| 366 | \multido{\ix=\psk@solides@stepX+\psk@solides@stepX}{\pst@cnta}{% |
|---|
| 367 | \psPoint(\pst@minus\ix,#4,\pst@solides@@Zmin){X1}% |
|---|
| 368 | \psPoint(\pst@minus\ix,#4 \psk@solides@ticklength\space add,\pst@solides@@Zmin){X2}% |
|---|
| 369 | \psline(X1)(X2)% |
|---|
| 370 | \uput[\pst@solides@@spotX](X1){\small\pst@minus\ix}}% |
|---|
| 371 | \ifnum#2<0 \pst@cnta=-#2 \def\pst@minus{-}\else\pst@cnta=#2 \def\pst@minus{}\fi |
|---|
| 372 | \divide\pst@cnta by \psk@solides@stepX% |
|---|
| 373 | \advance\pst@cnta by \@ne |
|---|
| 374 | \multido{\ix=0+\psk@solides@stepX}{\the\pst@cnta}{% |
|---|
| 375 | \psPoint(\pst@minus\ix,#4,\pst@solides@@Zmin){X1} |
|---|
| 376 | \psPoint(\pst@minus\ix,#4 \psk@solides@ticklength\space add,\pst@solides@@Zmin){X2} |
|---|
| 377 | \psline(X1)(X2) |
|---|
| 378 | \uput[\pst@solides@@spotX](X1){\small\pst@minus\ix}} |
|---|
| 379 | % |
|---|
| 380 | \ifnum#3<0 \pst@cnta=-#3 \def\pst@minus{-}\else\pst@cnta=#3 \def\pst@minus{}\fi |
|---|
| 381 | \divide\pst@cnta by \psk@solides@stepY |
|---|
| 382 | \multido{\iy=\psk@solides@stepY+\psk@solides@stepY}{\pst@cnta}{% |
|---|
| 383 | \psPoint(#2,\pst@minus\iy,\pst@solides@@Zmin){Y1} |
|---|
| 384 | \psPoint(#2 \psk@solides@ticklength\space add,\pst@minus\iy,\pst@solides@@Zmin){Y2} |
|---|
| 385 | \psline(Y1)(Y2) |
|---|
| 386 | \uput[\pst@solides@@spotY](Y1){\small\pst@minus\iy}} |
|---|
| 387 | \ifnum#4<0 \pst@cnta=-#4 \def\pst@minus{-}\else\pst@cnta=#4 \def\pst@minus{}\fi |
|---|
| 388 | \divide\pst@cnta by \psk@solides@stepY |
|---|
| 389 | \advance\pst@cnta by \@ne |
|---|
| 390 | \multido{\iy=0+\psk@solides@stepY}{\pst@cnta}{% |
|---|
| 391 | \psPoint(#2,\pst@minus\iy,\pst@solides@@Zmin){Y1} |
|---|
| 392 | \psPoint(#2 \psk@solides@ticklength\space add,\pst@minus\iy,\pst@solides@@Zmin){Y2} |
|---|
| 393 | \psline(Y1)(Y2) |
|---|
| 394 | \uput[\pst@solides@@spotY](Y1){\small\pst@minus\iy}} |
|---|
| 395 | % |
|---|
| 396 | \pst@cnta=\pst@solides@@Zmin \pst@cntb=\pst@solides@@Zmax |
|---|
| 397 | \ifnum\pst@cnta=\pst@cntb\else% same z values? |
|---|
| 398 | \pst@cnta=\pst@solides@@Zmin |
|---|
| 399 | \ifnum\pst@cnta<0 \pst@cnta=-\pst@cnta \def\pst@minus{-} |
|---|
| 400 | \else\def\pst@minus{}\fi% |
|---|
| 401 | \divide\pst@cnta by \psk@solides@stepZ |
|---|
| 402 | \multido{\iz=\psk@solides@stepZ+\psk@solides@stepZ}{\pst@cnta}{% |
|---|
| 403 | \psPoint(#2,#3,\pst@minus\iz){Z1} |
|---|
| 404 | \psPoint(#2,#3 \psk@solides@ticklength\space sub,\pst@minus\iz){Z2} |
|---|
| 405 | \psline(Z1)(Z2) |
|---|
| 406 | \uput[\pst@solides@@spotZ](Z1){\small\pst@minus\iz}} |
|---|
| 407 | \pst@cnta=\pst@solides@@Zmax % |
|---|
| 408 | \ifnum\pst@cnta<0 \pst@cnta=-\pst@pst@cnta \def\pst@minus{-} |
|---|
| 409 | \else\def\pst@minus{}\fi% |
|---|
| 410 | \divide\pst@cnta by \psk@solides@stepZ |
|---|
| 411 | \advance\pst@cnta by \@ne |
|---|
| 412 | \multido{\iz=0+\psk@solides@stepZ}{\pst@cnta}{% |
|---|
| 413 | \psPoint(#2,#3,\pst@minus\iz){Z1} |
|---|
| 414 | \psPoint(#2,#3 \psk@solides@ticklength\space sub,\pst@minus\iz){Z2} |
|---|
| 415 | \psline(Z1)(Z2) |
|---|
| 416 | \uput[\pst@solides@@spotZ](Z1){\small\pst@minus\iz}} |
|---|
| 417 | \fi |
|---|
| 418 | % |
|---|
| 419 | \psPoint(0,0,\pst@solides@@Zmax #7 add){Z'} |
|---|
| 420 | \psPoint(#2 #5 add,0,0){X'} |
|---|
| 421 | \psPoint(0,#4 #6 add, 0){Y'} |
|---|
| 422 | \psPoint(0,0,\pst@solides@@Zmax){Z} |
|---|
| 423 | \psPoint(#2,0,0){X} |
|---|
| 424 | \psPoint(0,#4,0){Y} |
|---|
| 425 | \psPoint(0,0,0){O} |
|---|
| 426 | \uput[\pst@solides@@spotY](X'){$x$} |
|---|
| 427 | \uput[\pst@solides@@spotX](Y'){$y$} |
|---|
| 428 | \uput[u](Z'){$z$} |
|---|
| 429 | \ifPst@showOrigin |
|---|
| 430 | \psline[linestyle=dashed](O)(X) |
|---|
| 431 | \psline[linestyle=dashed](O)(Y) |
|---|
| 432 | \psline[linestyle=dashed](O)(Z) |
|---|
| 433 | \fi |
|---|
| 434 | %\psset{linewidth=2\pslinewidth} |
|---|
| 435 | \psline{->}(Z)(Z')\psline{->}(Y)(Y')\psline{->}(X)(X') |
|---|
| 436 | \endgroup% |
|---|
| 437 | \ignorespaces% |
|---|
| 438 | } |
|---|
| 439 | % |
|---|
| 440 | \@ifundefined{pst@linetype}{\def\pst@linetype{0}}{}% preventing errors hv 2009-07-03 |
|---|
| 441 | % |
|---|
| 442 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 443 | %% code insere dans le .ps |
|---|
| 444 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 445 | %% |
|---|
| 446 | \pst@def{optionssolides}<% |
|---|
| 447 | /PSfont {\pst@solides@PSfont} def |
|---|
| 448 | /pst@fill { \psk@opacityalpha .setopacityalpha fill } def |
|---|
| 449 | /strokeopacity \psk@opacityalpha def |
|---|
| 450 | /fillopacity \psk@opacityalpha def |
|---|
| 451 | /xunit {\pst@number\psunit } def |
|---|
| 452 | %% /cm {\pst@number\psunit mul} def |
|---|
| 453 | %% /cm_1 {\pst@number\psunit div} def |
|---|
| 454 | /decal \pst@solides@decal\space def % decalage |
|---|
| 455 | /viewpointXYZ {\pst@solides@viewpoint} def |
|---|
| 456 | /Decran \pst@solides@Decran\space def % distance de l'ecran |
|---|
| 457 | % |
|---|
| 458 | /RotX \psk@solides@RotX\space def |
|---|
| 459 | /RotY \psk@solides@RotY\space def |
|---|
| 460 | /RotZ \psk@solides@RotZ\space def |
|---|
| 461 | % |
|---|
| 462 | /fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def |
|---|
| 463 | % |
|---|
| 464 | /projectionsifacevisible \ifPst@visibility true \else false \fi def |
|---|
| 465 | % |
|---|
| 466 | /R \pst@solides@R\space def % pour le tore |
|---|
| 467 | /r1 \pst@solides@rI\space def % pour le tore |
|---|
| 468 | /r0 \pst@solides@rO\space def % pour le tore |
|---|
| 469 | /resolution \pst@solides@resolution\space def % pour le nb de points par courbe |
|---|
| 470 | /phi \pst@solides@phi\space def % pour la calotte spherique |
|---|
| 471 | /theta \pst@solides@theta\space def % pour la calotte spherique |
|---|
| 472 | /r \pst@solides@r\space def % rayon sphere circonscrite |
|---|
| 473 | /a \pst@solides@a\space def % arete du cube (1 du parallelepipede) |
|---|
| 474 | /b \pst@solides@b\space def % arete 2 du parallelepipede |
|---|
| 475 | /c \pst@solides@c\space def % arete 3 du parallelepipede |
|---|
| 476 | /h \pst@solides@h\space def % hauteur du cylindre, du cone, du prisme |
|---|
| 477 | /trunccoeff \pst@solides@trunccoeff\space def % coeff de troncature |
|---|
| 478 | /chanfreincoeff \pst@solides@chanfreincoeff\space def % coeff de chanfreinage |
|---|
| 479 | /affinagecoeff \pst@solides@affinagecoeff\space def % coeff de affinage |
|---|
| 480 | /dualregcoeff \pst@solides@dualregcoeff\space def % coeff de dual |
|---|
| 481 | /solidintersectiontype \pst@solides@intersectiontype\space def % type d'intersection |
|---|
| 482 | /section {\pst@solides@section} def % section de l'objet de revolution |
|---|
| 483 | /base [ \pst@solides@base ] def |
|---|
| 484 | /solidintersectionlinewidth [ \pst@solides@intersectionlinewidth ] def |
|---|
| 485 | /solidintersectioncolor [ \pst@solides@intersectioncolor ] def |
|---|
| 486 | /solidintersectionplan [ \pst@solides@intersectionplan ] def |
|---|
| 487 | /axe { \pst@solides@axe } def |
|---|
| 488 | /plansection [ \pst@solides@plansection ] def |
|---|
| 489 | \ifx\pst@solides@function\@empty\else |
|---|
| 490 | /function (\pst@solides@function) def |
|---|
| 491 | \fi |
|---|
| 492 | % |
|---|
| 493 | /definition (\pst@solides@definition) def |
|---|
| 494 | /args { \pst@solides@args} def |
|---|
| 495 | /Mode \pst@solides@mode\space def % resolution du trace |
|---|
| 496 | /lightintensity \pst@solides@lightintensity\space def % intensite de la lumiere |
|---|
| 497 | /tablez [\pst@solides@tablez] def |
|---|
| 498 | /zcolor [\pst@solides@zcolor] def |
|---|
| 499 | % |
|---|
| 500 | /solidlinewidth {\pst@number\pslinewidth} def |
|---|
| 501 | /linecolor {\pst@usecolor\pslinecolor} def |
|---|
| 502 | /linestyle {\pslinestyle} def |
|---|
| 503 | /fillcolor {\pst@usecolor\psfillcolor currentrgbcolor} def |
|---|
| 504 | /fillincolor {\pst@usecolor\psincolor currentrgbcolor} def |
|---|
| 505 | % |
|---|
| 506 | /color1 {\pst@usecolor\pscolora } def |
|---|
| 507 | /color2 {\pst@usecolor\pscolorb } def |
|---|
| 508 | /color3 {\pst@usecolor\pscolorc } def |
|---|
| 509 | /color4 {\pst@usecolor\pscolord } def |
|---|
| 510 | % |
|---|
| 511 | /range [ \pst@solides@range ] def |
|---|
| 512 | /action (\pst@solides@action) def |
|---|
| 513 | /texte (\pst@solides@text) def |
|---|
| 514 | /pos (\pst@solides@pos) def |
|---|
| 515 | /proj-fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def |
|---|
| 516 | % |
|---|
| 517 | \ifx\pst@solides@CoordinatesLight\@empty\else |
|---|
| 518 | /lightsrc {\pst@solides@CoordinatesLight} def |
|---|
| 519 | \fi |
|---|
| 520 | % |
|---|
| 521 | /rmfaces [\pst@solides@CoordinatesRm] def |
|---|
| 522 | % |
|---|
| 523 | \ifx\pst@solides@plansepare\@empty\else |
|---|
| 524 | /plansepare {\pst@solides@plansepare} def |
|---|
| 525 | \fi |
|---|
| 526 | % |
|---|
| 527 | \ifx\pst@solides@transform\@empty\else |
|---|
| 528 | /pst-transformoption { \pst@solides@transform} def |
|---|
| 529 | \fi |
|---|
| 530 | % |
|---|
| 531 | \ifx\pst@solides@name\@empty\else |
|---|
| 532 | /solidname (\pst@solides@name) def |
|---|
| 533 | \fi |
|---|
| 534 | \ifx\pst@solides@file\@empty\else |
|---|
| 535 | /solidfilename (\pst@solides@file) def |
|---|
| 536 | \fi |
|---|
| 537 | % |
|---|
| 538 | \ifx\pst@solides@planname\@empty\else |
|---|
| 539 | /solidplanname (\pst@solides@planname) def |
|---|
| 540 | \fi |
|---|
| 541 | % |
|---|
| 542 | \ifx\pst@solides@load\@empty\else |
|---|
| 543 | /solidloadname {\pst@solides@load} def |
|---|
| 544 | \fi |
|---|
| 545 | % |
|---|
| 546 | \ifx\pst@solides@fcolor\@empty\else |
|---|
| 547 | /solidfcolor (\pst@solides@fcolor) def |
|---|
| 548 | \fi |
|---|
| 549 | % |
|---|
| 550 | /fcol [\pst@solides@fcol] def |
|---|
| 551 | /solidhue [\pst@solides@hue] def |
|---|
| 552 | /solidinouthue [\pst@solides@inouthue] def |
|---|
| 553 | /solidinhue [\pst@solides@inhue] def |
|---|
| 554 | /origin {\pst@solides@origin} def |
|---|
| 555 | % |
|---|
| 556 | %% |
|---|
| 557 | %% /solidhue \ifPst@hue true \else false \fi def |
|---|
| 558 | % |
|---|
| 559 | /sommets [\pst@solides@sommets] def |
|---|
| 560 | /faces [\pst@solides@faces] def |
|---|
| 561 | /solidshow [\pst@solides@show] def |
|---|
| 562 | /solidnum [\pst@solides@num] def |
|---|
| 563 | /solidnumf [\pst@solides@numfaces] def |
|---|
| 564 | /solidtrunc [\pst@solides@trunc] def |
|---|
| 565 | /solidaffinage [\pst@solides@affinage] def |
|---|
| 566 | /ngrid [\pst@solides@ngrid] def |
|---|
| 567 | % |
|---|
| 568 | /isolatin \ifPst@isolatin true \else false \fi def |
|---|
| 569 | /affinagerm \ifPst@affinagerm true \else false \fi def |
|---|
| 570 | /chanfrein \ifPst@chanfrein true \else false \fi def |
|---|
| 571 | /solidgrid \ifPst@grid true \else false \fi def |
|---|
| 572 | /solidplanmarks \ifPst@planmarks true \else false \fi def |
|---|
| 573 | /solidplangrid \ifPst@plangrid true \else false \fi def |
|---|
| 574 | /solidshowbase3d \ifPst@showBase true \else false \fi def |
|---|
| 575 | /activationgestioncouleurs \ifPst@deactivatecolor false \else true \fi def |
|---|
| 576 | /solidshowbase \ifPst@showbase true \else false \fi def |
|---|
| 577 | /soliddualreg \ifPst@dualreg true \else false \fi def |
|---|
| 578 | /solidgeode \ifPst@geode true \else false \fi def |
|---|
| 579 | /solidhollow \ifPst@hollow true \else false \fi def |
|---|
| 580 | /solidbiface \ifPst@biface true \else false \fi def |
|---|
| 581 | % |
|---|
| 582 | %% |
|---|
| 583 | %% /solidnum \ifPst@num true \else false \fi def |
|---|
| 584 | % |
|---|
| 585 | %\ifPst@SphericalCoor |
|---|
| 586 | % viewpointXYZ /PHI ED /THETA ED /Dobs ED |
|---|
| 587 | % % CoefficientsMT |
|---|
| 588 | % %% pour la 3D conventionnelle |
|---|
| 589 | % %% Dony : graphisme scientifique : page 187 |
|---|
| 590 | % %% Editeur : Masson |
|---|
| 591 | % /XpointVue {Dobs Cos1Cos2 mul} bind def |
|---|
| 592 | % /YpointVue {Dobs Sin1Cos2 mul} bind def |
|---|
| 593 | % /ZpointVue {Dobs Sin2 mul} bind def |
|---|
| 594 | % XpointVue YpointVue ZpointVue /viewpoint defpoint3d |
|---|
| 595 | %\else |
|---|
| 596 | viewpointXYZ /ZpointVue ED /YpointVue ED /XpointVue ED |
|---|
| 597 | /THETA {YpointVue XpointVue atan} bind def |
|---|
| 598 | /PHI {ZpointVue XpointVue dup mul YpointVue dup mul add sqrt atan} bind def |
|---|
| 599 | /Dobs {XpointVue dup mul YpointVue dup mul add ZpointVue dup mul add sqrt} bind def |
|---|
| 600 | % CoefficientsMT |
|---|
| 601 | XpointVue YpointVue ZpointVue /viewpoint defpoint3d |
|---|
| 602 | %\fi |
|---|
| 603 | > |
|---|
| 604 | |
|---|
| 605 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 606 | %% la macro \psSolid |
|---|
| 607 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 608 | |
|---|
| 609 | \define@boolkey[psset]{pst-solides3d}[Pst@]{solidmemory}[true]{} |
|---|
| 610 | \psset{solidmemory=false} |
|---|
| 611 | % |
|---|
| 612 | \let\composeSolid\use@pscode |
|---|
| 613 | \let\endpspictureS@lid\endpspicture% redefine \endpspicture (hv) |
|---|
| 614 | \def\endpspicture{\ifPst@solidmemory\use@pscode\fi\endpspictureS@lid} |
|---|
| 615 | |
|---|
| 616 | \def\psSolid{\pst@object{psSolid}} |
|---|
| 617 | \def\psSolid@i{\@ifnextchar({\psSolid@ii}{\psSolid@iv{ 0. 0. 0. }}} |
|---|
| 618 | \def\psSolid@ii(#1){\expandafter\psSolid@iii#1,,,\@nil} |
|---|
| 619 | \def\psSolid@iii#1,#2,#3,#4\@nil{% |
|---|
| 620 | \ifx\relax#2\relax\psSolid@iv{#1}\else\psSolid@iv{#1 #2 #3}\fi} |
|---|
| 621 | \def\psSolid@iv#1{% |
|---|
| 622 | \pst@killglue% |
|---|
| 623 | \begingroup |
|---|
| 624 | \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi% |
|---|
| 625 | \addto@pscode{ |
|---|
| 626 | 1 setlinejoin |
|---|
| 627 | \tx@optionssolides |
|---|
| 628 | SolidesDict begin |
|---|
| 629 | #1 |
|---|
| 630 | /CZ exch def |
|---|
| 631 | /CY exch def |
|---|
| 632 | /CX exch def |
|---|
| 633 | % nature du solide |
|---|
| 634 | \psk@solides@object\space |
|---|
| 635 | end |
|---|
| 636 | }% fin du code ps |
|---|
| 637 | \ifPst@solidmemory\else\end@ClosedObj\fi% |
|---|
| 638 | \endgroup% |
|---|
| 639 | \ignorespaces} |
|---|
| 640 | |
|---|
| 641 | |
|---|
| 642 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 643 | %% la macro \codejps |
|---|
| 644 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 645 | \def\codejps#1{{% |
|---|
| 646 | \define@key[psset]{pst-solides3d}{object}{\def\psk@solides@object{#1}}% |
|---|
| 647 | \psSolid[object={#1} exec](0,0,0)}}% |
|---|
| 648 | |
|---|
| 649 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 650 | %% la macro \psTransformPoint |
|---|
| 651 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 652 | % transformation d'un point |
|---|
| 653 | % \pstransformIIID[RotX=,...](x y z)(CX,CY,CZ) |
|---|
| 654 | % Rotation d'un point(x y z) |
|---|
| 655 | % autour des axes Ox, Oy et Oz |
|---|
| 656 | % suivie |
|---|
| 657 | % de la translation au point (CX,CY,CZ) |
|---|
| 658 | \def\psTransformPoint{\def\pst@par{}\pst@object{psTransformPoint}} |
|---|
| 659 | \def\psTransformPoint@i(#1)(#2,#3,#4)#5{{% coordonnees cartesiennes |
|---|
| 660 | \begin@SpecialObj |
|---|
| 661 | \pnode(! |
|---|
| 662 | \tx@optionssolides |
|---|
| 663 | SolidesDict begin |
|---|
| 664 | #1 RotX RotY RotZ rotateOpoint3d |
|---|
| 665 | #2 #3 #4 translatepoint3d |
|---|
| 666 | 3dto2d cm_1 exch cm_1 exch |
|---|
| 667 | end){#5}% |
|---|
| 668 | \end@SpecialObj |
|---|
| 669 | }\ignorespaces} |
|---|
| 670 | |
|---|
| 671 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 672 | %% la macro \psPoint |
|---|
| 673 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 674 | % placer un point en particulier |
|---|
| 675 | % \psPoint[options du point de vue](x y z) |
|---|
| 676 | \def\psPoint{\def\pst@par{}\pst@object{psPoint}} |
|---|
| 677 | \def\psPoint@i(#1,#2,#3)#4{{% coordonnees cartesiennes |
|---|
| 678 | % \begin@SpecialObj |
|---|
| 679 | \pnode(! |
|---|
| 680 | \tx@optionssolides |
|---|
| 681 | SolidesDict begin |
|---|
| 682 | #1 #2 #3 |
|---|
| 683 | 3dto2d cm_1 exch cm_1 exch |
|---|
| 684 | end){#4}% |
|---|
| 685 | % \end@SpecialObj |
|---|
| 686 | }\ignorespaces% |
|---|
| 687 | } |
|---|
| 688 | |
|---|
| 689 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 690 | %% Vecteur normal a un plan |
|---|
| 691 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 692 | \def\Normale{\pst@object{Normale}} |
|---|
| 693 | \def\Normale@i(#1,#2,#3){% |
|---|
| 694 | % #1 rayon |
|---|
| 695 | % #2 longitude |
|---|
| 696 | % #3 latitude |
|---|
| 697 | \pst@killglue% |
|---|
| 698 | \begingroup% |
|---|
| 699 | \use@par% |
|---|
| 700 | \pstVerb{/latitude #3 def |
|---|
| 701 | /longitude #2 def |
|---|
| 702 | /Rayon #1 def |
|---|
| 703 | /xP Rayon #2 cos #3 cos mul mul def |
|---|
| 704 | /yP Rayon #2 sin #3 cos mul mul def |
|---|
| 705 | /zP Rayon #3 sin mul def}% |
|---|
| 706 | \psSolid[object=vecteur,RotZ=#2,RotY=-#3, |
|---|
| 707 | args=1.7 0 0](xP,yP,zP) |
|---|
| 708 | \endgroup% |
|---|
| 709 | \ignorespaces% |
|---|
| 710 | } |
|---|
| 711 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 712 | %% les axes IIId |
|---|
| 713 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 714 | %% axisemph |
|---|
| 715 | %% thanks to Herbert Voss |
|---|
| 716 | |
|---|
| 717 | \define@boolkey[psset]{pst-solides3d}[Pst@]{showOrigin}[true]{} |
|---|
| 718 | \define@boolkey[psset]{pst-solides3d}[Pst@]{mathLabel}[true]{} |
|---|
| 719 | \psset[pst-solides3d]{showOrigin,mathLabel}% |
|---|
| 720 | |
|---|
| 721 | \def\pst@solides@axisnames@i#1,#2,#3,#4\@nil{% |
|---|
| 722 | \def\pst@solides@axesIIID@xname{#1} |
|---|
| 723 | \def\pst@solides@axesIIID@yname{#2} |
|---|
| 724 | \def\pst@solides@axesIIID@zname{#3}} |
|---|
| 725 | |
|---|
| 726 | \define@key[psset]{pst-solides3d}{axisnames}{% |
|---|
| 727 | \expandafter\pst@solides@axisnames@i#1,,,\@nil}% |
|---|
| 728 | \psset[pst-solides3d]{axisnames={x,y,z}} |
|---|
| 729 | |
|---|
| 730 | \define@key[psset]{pst-solides3d}{axisemph}{% |
|---|
| 731 | \def\pst@solides@axesIIID@emph{#1}} |
|---|
| 732 | \psset[pst-solides3d]{axisemph=} |
|---|
| 733 | |
|---|
| 734 | \def\axesIIID{\pst@object{axesIIID}} |
|---|
| 735 | \def\axesIIID@i(#1,#2,#3){% |
|---|
| 736 | \@ifnextchar({\axesIIID@ii(#1,#2,#3)}{\axesIIID@ii(0,0,0)(#1,#2,#3)}} |
|---|
| 737 | \def\axesIIID@ii(#1,#2,#3)(#4,#5,#6){% axes 3d |
|---|
| 738 | \pst@killglue% |
|---|
| 739 | \begingroup% |
|---|
| 740 | \addbefore@par{arrows=->}% |
|---|
| 741 | \use@par% |
|---|
| 742 | \psPoint(0,0,0){O} |
|---|
| 743 | \psPoint(#1,0,0){X} |
|---|
| 744 | \psPoint(0,#2,0){Y} |
|---|
| 745 | \psPoint(0,0,#3){Z} |
|---|
| 746 | \psPoint(#4,0,0){X'} |
|---|
| 747 | \psPoint(0,#5,0){Y'} |
|---|
| 748 | \psPoint(0,0,#6){Z'} |
|---|
| 749 | \psPoint(#4 \pst@number\pslabelsep \pst@number\psunit div add,0, 0) |
|---|
| 750 | {Xname} |
|---|
| 751 | \psPoint(0, #5 \pst@number\pslabelsep \pst@number\psunit div add, 0) |
|---|
| 752 | {Yname} |
|---|
| 753 | \psPoint(0, 0, #6 \pst@number\pslabelsep \pst@number\psunit div add) |
|---|
| 754 | {Zname} |
|---|
| 755 | \ifPst@showOrigin |
|---|
| 756 | \psline[linestyle=dashed,arrows=-](O)(X) |
|---|
| 757 | \psline[linestyle=dashed,arrows=-](O)(Y) |
|---|
| 758 | \psline[linestyle=dashed,arrows=-](O)(Z) |
|---|
| 759 | \fi |
|---|
| 760 | \psline(X)(X') |
|---|
| 761 | \psline(Y)(Y') |
|---|
| 762 | \psline(Z)(Z') |
|---|
| 763 | \rput(Xname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph |
|---|
| 764 | \pst@solides@axesIIID@xname\ifPst@mathLabel$\fi} |
|---|
| 765 | \rput(Yname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph |
|---|
| 766 | \pst@solides@axesIIID@yname\ifPst@mathLabel$\fi} |
|---|
| 767 | \rput(Zname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph |
|---|
| 768 | \pst@solides@axesIIID@zname\ifPst@mathLabel$\fi} |
|---|
| 769 | \endgroup% |
|---|
| 770 | \ignorespaces% |
|---|
| 771 | } |
|---|
| 772 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 773 | %% la macro \psSurface |
|---|
| 774 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 775 | \def\psSurface{\pst@object{psSurface}} |
|---|
| 776 | \def\psSurface@i(#1,#2)(#3,#4)#5{{% |
|---|
| 777 | %% \def\hue{0 1 #3 #1 sub \pst@solides@dx\space div |
|---|
| 778 | %% #4 #2 sub \pst@solides@dy\space div mul |
|---|
| 779 | %% {/iF ED iF [1 iF #3 #1 sub \pst@solides@dx\space div |
|---|
| 780 | %% #4 #2 sub \pst@solides@dy\space div |
|---|
| 781 | %% mul div sub 0.75 1] (sethsbcolor) astr2str} for} |
|---|
| 782 | \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi |
|---|
| 783 | \addto@pscode{% |
|---|
| 784 | 1 setlinejoin |
|---|
| 785 | \tx@optionssolides |
|---|
| 786 | SolidesDict begin |
|---|
| 787 | /CX 0 def /CY 0 def /CZ 0 def |
|---|
| 788 | /base [ #1 #3 #2 #4 ] def |
|---|
| 789 | \ifPst@algebraic |
|---|
| 790 | /fonction |
|---|
| 791 | (#5) tx@AlgToPs begin AlgToPs end cvx def |
|---|
| 792 | \else |
|---|
| 793 | /fonction { #5 } def |
|---|
| 794 | \fi |
|---|
| 795 | /f {2 dict begin |
|---|
| 796 | /y exch def |
|---|
| 797 | /x exch def |
|---|
| 798 | fonction |
|---|
| 799 | end } def |
|---|
| 800 | pst-Surface |
|---|
| 801 | end |
|---|
| 802 | }% fin du code ps |
|---|
| 803 | \ifPst@axesboxed |
|---|
| 804 | \gridIIID(#1,#3)(#2,#4) |
|---|
| 805 | \fi |
|---|
| 806 | \ifPst@solidmemory |
|---|
| 807 | \else |
|---|
| 808 | \end@ClosedObj% |
|---|
| 809 | \fi |
|---|
| 810 | }} |
|---|
| 811 | |
|---|
| 812 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 813 | %% la macro \defFunction |
|---|
| 814 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 815 | \def\defFunction{\@ifnextchar[{\defFunction@i}{\defFunction@i[]}}% |
|---|
| 816 | \def\defFunction@i[#1]#2(#3)#4#5#6{% |
|---|
| 817 | \pst@killglue |
|---|
| 818 | \global\Pst@solidmemorytrue |
|---|
| 819 | \begingroup |
|---|
| 820 | \psset{#1}% |
|---|
| 821 | \defFunction@ii{#3}\edef\@tempa{\the\toks@}% |
|---|
| 822 | \ifPst@algebraic |
|---|
| 823 | \toks@={}% |
|---|
| 824 | \def\@tempb{#4}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi |
|---|
| 825 | \def\@tempb{#5}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi |
|---|
| 826 | \def\@tempb{#6}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi |
|---|
| 827 | \codejps{% |
|---|
| 828 | /#2 { 3 dict begin \@tempa \the\toks@ |
|---|
| 829 | gere_pst-deffunction end } def }% 20080625 |
|---|
| 830 | \else |
|---|
| 831 | \codejps{% |
|---|
| 832 | /#2 { 3 dict begin \the\toks@ #4 #5 #6 |
|---|
| 833 | gere_pst-deffunction end } def }% 20080625 |
|---|
| 834 | \fi |
|---|
| 835 | \endgroup}% |
|---|
| 836 | % |
|---|
| 837 | \def\defFunction@ii#1{\defFunction@iii#1,,,\end}% |
|---|
| 838 | \def\defFunction@iii#1,#2,#3,#4\end{% |
|---|
| 839 | \toks@={}% |
|---|
| 840 | \def\arg@ii{#1}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi |
|---|
| 841 | \def\arg@ii{#2}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi |
|---|
| 842 | \def\arg@ii{#3}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi |
|---|
| 843 | \edef\@tmpPSDefns{\the\toks@ mark }% 20080625 |
|---|
| 844 | \global\toks@=\expandafter{\@tmpPSDefns}}% 20080625 |
|---|
| 845 | \def\store@toks@before#1{% |
|---|
| 846 | \edef\@tmpPSDefns{/#1 exch def \the\toks@}% |
|---|
| 847 | \global\toks@=\expandafter{\@tmpPSDefns}% |
|---|
| 848 | }% |
|---|
| 849 | \def\store@toks@after#1{% |
|---|
| 850 | \edef\@tmpPSDefns{\the\toks@ (#1) tx@AlgToPs begin AlgToPs end cvx }% |
|---|
| 851 | \global\toks@=\expandafter{\@tmpPSDefns}% |
|---|
| 852 | } |
|---|
| 853 | % |
|---|
| 854 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 855 | %% la macro de projection |
|---|
| 856 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 857 | |
|---|
| 858 | %% creation des variables pour PSTricks |
|---|
| 859 | \define@boolkey[psset]{pst-solides3d}[Pst@]{visibility}[false]{} |
|---|
| 860 | \psset{visibility=true} |
|---|
| 861 | \define@key[psset]{pst-solides3d}{normal}{\def\pst@solides@normal{#1}} |
|---|
| 862 | \psset[pst-solides3d]{normal=0 0 1} |
|---|
| 863 | % origine du plan |
|---|
| 864 | \define@key[psset]{pst-solides3d}{origine}{\def\pst@solides@origin{#1}} % origine du plan |
|---|
| 865 | \psset[pst-solides3d]{origine=0 0 0 }% |
|---|
| 866 | %% le range pour les fonctions numeriques |
|---|
| 867 | \define@key[psset]{pst-solides3d}{range}{\def\pst@solides@range{#1}} |
|---|
| 868 | \psset[pst-solides3d]{range=-5 5}% le range par defaut |
|---|
| 869 | %% le chemin a projeter |
|---|
| 870 | \define@key[psset]{pst-solides3d}{path}{\def\pst@solides@path{#1}}% |
|---|
| 871 | \psset[pst-solides3d]{path=newpath 0 0 moveto}% valeur par defaut |
|---|
| 872 | %% fonctions utilisees |
|---|
| 873 | \define@key[psset]{pst-solides3d}{function}{\def\pst@solides@function{#1}}% |
|---|
| 874 | \psset[pst-solides3d]{function=}% pas de valeur par defaut |
|---|
| 875 | % rotation du texte dans son plan |
|---|
| 876 | \define@key[psset]{pst-solides3d}{RotationAngleText}{\def\pst@solides@RotationAngleText{#1}} % origine du plan |
|---|
| 877 | \psset[pst-solides3d]{RotationAngleText=0 }% |
|---|
| 878 | % texte a projeter |
|---|
| 879 | \define@key[psset]{pst-solides3d}{text}{\def\pst@solides@text{#1}} |
|---|
| 880 | \psset[pst-solides3d]{text=}% pas de texte par defaut |
|---|
| 881 | % plan de projection |
|---|
| 882 | \define@key[psset]{pst-solides3d}{plan}{\def\pst@solides@plan{#1}} |
|---|
| 883 | \psset[pst-solides3d]{plan=}% pas de plan par defaut |
|---|
| 884 | % position du texte a projeter |
|---|
| 885 | \define@key[psset]{pst-solides3d}{pos}{\def\pst@solides@pos{#1}} |
|---|
| 886 | \psset[pst-solides3d]{pos=cc}% centre par defaut |
|---|
| 887 | |
|---|
| 888 | %% transcription et inclusion des variables dans le fichier postscript |
|---|
| 889 | \pst@def{psProjection}<% |
|---|
| 890 | /projectionsifacevisible \ifPst@visibility true \else false \fi def |
|---|
| 891 | /isolatin \ifPst@isolatin true \else false \fi def |
|---|
| 892 | /solidlinewidth {\pst@number\pslinewidth} def |
|---|
| 893 | /PSfont {\pst@solides@PSfont} def |
|---|
| 894 | /normale {\pst@solides@normal} bind def |
|---|
| 895 | /fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def |
|---|
| 896 | /origin {\pst@solides@origin} def |
|---|
| 897 | /RotationAngleText {\pst@solides@RotationAngleText} def |
|---|
| 898 | /range [ \pst@solides@range ] def |
|---|
| 899 | /path { \pst@solides@path } def |
|---|
| 900 | /function { \pst@solides@function } def |
|---|
| 901 | /texte (\pst@solides@text) def |
|---|
| 902 | /pos (\pst@solides@pos) def |
|---|
| 903 | /proj-definition (\pst@solides@definition) def |
|---|
| 904 | /proj-args { \pst@solides@args} def |
|---|
| 905 | /proj-action (\pst@solides@action) def |
|---|
| 906 | \ifx\pst@solides@name\@empty |
|---|
| 907 | \else |
|---|
| 908 | /projname (\pst@solides@name) def |
|---|
| 909 | \fi |
|---|
| 910 | \ifx\pst@solides@plan\@empty |
|---|
| 911 | \else |
|---|
| 912 | /planprojpst \pst@solides@plan \space def |
|---|
| 913 | \fi |
|---|
| 914 | \ifx\pst@solides@solidname\@empty |
|---|
| 915 | \else |
|---|
| 916 | /solidprojname {\pst@solides@solidname\space} def |
|---|
| 917 | \fi |
|---|
| 918 | /noface \pst@solides@no\space def % no de la face du solide |
|---|
| 919 | /resolution \pst@solides@resolution\space def % pour le nb de points par courbe |
|---|
| 920 | > |
|---|
| 921 | |
|---|
| 922 | %\makeatletter |
|---|
| 923 | %% la macro de projection |
|---|
| 924 | \def\psProjection{\def\pst@par{}\pst@object{psProjection}} |
|---|
| 925 | \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0,0)}} |
|---|
| 926 | \def\psProjection@ii(#1){\expandafter\psProjection@iii#1,,\@nil} |
|---|
| 927 | \def\psProjection@iii#1,#2,#3\@nil{{% |
|---|
| 928 | \addbefore@par{pos=cc,range=0 360}% |
|---|
| 929 | \def\pst@tempA{#2}% |
|---|
| 930 | \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi% |
|---|
| 931 | \addto@pscode{% |
|---|
| 932 | \tx@optionssolides |
|---|
| 933 | SolidesDict begin |
|---|
| 934 | \tx@psProjection |
|---|
| 935 | /CX 0 def |
|---|
| 936 | /CY 0 def |
|---|
| 937 | /CZ 0 def |
|---|
| 938 | #1/xorigine exch def |
|---|
| 939 | \ifx\pst@tempA\@empty |
|---|
| 940 | /yorigine xorigine def |
|---|
| 941 | /xorigine exch def\space\else |
|---|
| 942 | \pst@tempA\space /yorigine exch def |
|---|
| 943 | \fi |
|---|
| 944 | % nature du solide : texte, chemin, courbe |
|---|
| 945 | proj-\psk@solides@object\space |
|---|
| 946 | end |
|---|
| 947 | }%<- fin du code ps |
|---|
| 948 | \psk@fillstyle |
|---|
| 949 | \pst@stroke |
|---|
| 950 | \addto@pscode{newpath}% |
|---|
| 951 | \ifPst@solidmemory\else\end@ClosedObj\fi |
|---|
| 952 | }}% |
|---|
| 953 | %\makeatother |
|---|
| 954 | |
|---|
| 955 | |
|---|
| 956 | %% 27/06/08 %% %% la macro de projection |
|---|
| 957 | %% 27/06/08 %% \def\psProjection{\def\pst@par{}\pst@object{psProjection}} |
|---|
| 958 | %% 27/06/08 %% \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.,0.)}} |
|---|
| 959 | %% 27/06/08 %% \def\psProjection@ii(#1,#2,#3){{% |
|---|
| 960 | %% 27/06/08 %% \use@par |
|---|
| 961 | %% 27/06/08 %% \ifPst@solidmemory |
|---|
| 962 | %% 27/06/08 %% \else |
|---|
| 963 | %% 27/06/08 %% \begin@ClosedObj |
|---|
| 964 | %% 27/06/08 %% \fi |
|---|
| 965 | %% 27/06/08 %% \addto@pscode{% |
|---|
| 966 | %% 27/06/08 %% \tx@optionssolides |
|---|
| 967 | %% 27/06/08 %% SolidesDict begin |
|---|
| 968 | %% 27/06/08 %% \tx@psProjection |
|---|
| 969 | %% 27/06/08 %% /CX 0 def |
|---|
| 970 | %% 27/06/08 %% /CY 0 def |
|---|
| 971 | %% 27/06/08 %% /CZ 0 def |
|---|
| 972 | %% 27/06/08 %% /xorigine #1 def |
|---|
| 973 | %% 27/06/08 %% /yorigine #2 def |
|---|
| 974 | %% 27/06/08 %% /zorigine #3 def |
|---|
| 975 | %% 27/06/08 %% % nature du solide : texte, chemin, courbe |
|---|
| 976 | %% 27/06/08 %% proj-\psk@solides@object\space |
|---|
| 977 | %% 27/06/08 %% end |
|---|
| 978 | %% 27/06/08 %% }%<- fin du code ps |
|---|
| 979 | %% 27/06/08 %% \psk@fillstyle |
|---|
| 980 | %% 27/06/08 %% \pst@stroke |
|---|
| 981 | %% 27/06/08 %% \ifPst@solidmemory |
|---|
| 982 | %% 27/06/08 %% \else |
|---|
| 983 | %% 27/06/08 %% \end@ClosedObj |
|---|
| 984 | %% 27/06/08 %% \fi |
|---|
| 985 | %% 27/06/08 %% }} |
|---|
| 986 | |
|---|
| 987 | %% 28/06/08 %% \makeatletter |
|---|
| 988 | %% 28/06/08 %% %% la macro de projection |
|---|
| 989 | %% 28/06/08 %% \def\psProjection{\def\pst@par{}\pst@object{psProjection}} |
|---|
| 990 | %% 28/06/08 %% \def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0.,0.)}} |
|---|
| 991 | %% 28/06/08 %% \def\psProjection@ii(#1,#2){{% |
|---|
| 992 | %% 28/06/08 %% \def\@tempb{#2}% |
|---|
| 993 | %% 28/06/08 %% \use@par |
|---|
| 994 | %% 28/06/08 %% \ifPst@solidmemory |
|---|
| 995 | %% 28/06/08 %% \else |
|---|
| 996 | %% 28/06/08 %% \begin@ClosedObj |
|---|
| 997 | %% 28/06/08 %% \fi |
|---|
| 998 | %% 28/06/08 %% \addto@pscode{% |
|---|
| 999 | %% 28/06/08 %% \tx@optionssolides |
|---|
| 1000 | %% 28/06/08 %% SolidesDict begin |
|---|
| 1001 | %% 28/06/08 %% \tx@psProjection |
|---|
| 1002 | %% 28/06/08 %% /CX 0 def |
|---|
| 1003 | %% 28/06/08 %% /CY 0 def |
|---|
| 1004 | %% 28/06/08 %% /CZ 0 def |
|---|
| 1005 | %% 28/06/08 %% \ifx\@tempb\@empty |
|---|
| 1006 | %% 28/06/08 %% #1 /yorigine exch def /xorigine exch def |
|---|
| 1007 | %% 28/06/08 %% \else |
|---|
| 1008 | %% 28/06/08 %% #1 #2 /yorigine exch def /xorigine exch def |
|---|
| 1009 | %% 28/06/08 %% \fi |
|---|
| 1010 | %% 28/06/08 %% % nature du solide : texte, chemin, courbe |
|---|
| 1011 | %% 28/06/08 %% proj-\psk@solides@object\space |
|---|
| 1012 | %% 28/06/08 %% end |
|---|
| 1013 | %% 28/06/08 %% }%<- fin du code ps |
|---|
| 1014 | %% 28/06/08 %% \psk@fillstyle |
|---|
| 1015 | %% 28/06/08 %% \pst@stroke |
|---|
| 1016 | %% 28/06/08 %% \ifPst@solidmemory |
|---|
| 1017 | %% 28/06/08 %% \else |
|---|
| 1018 | %% 28/06/08 %% \end@ClosedObj |
|---|
| 1019 | %% 28/06/08 %% \fi |
|---|
| 1020 | %% 28/06/08 %% }} |
|---|
| 1021 | %% 28/06/08 %% \makeatother |
|---|
| 1022 | |
|---|
| 1023 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 1024 | %% \psLineIIID est |
|---|
| 1025 | %% adapt de la macro \pstThreeDLine du package pst-3dplot (H.Voss) |
|---|
| 1026 | %% http://tug.ctan.org/tex-archive/graphics/pstricks/contrib/pst-3dplot |
|---|
| 1027 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 1028 | |
|---|
| 1029 | \def\cartesianIIID@coor#1,#2,#3,#4\@nil{\edef\pst@coor{#1 #2 #3 }} |
|---|
| 1030 | \def\NormalIIIDCoor{% |
|---|
| 1031 | \def\pst@@getcoor##1{\pst@expandafter\cartesianIIID@coor{##1}, ,\@nil}% |
|---|
| 1032 | \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}% |
|---|
| 1033 | }% |
|---|
| 1034 | |
|---|
| 1035 | \def\psLineIIID{\NormalIIIDCoor\pst@object{lineIIID}} |
|---|
| 1036 | \def\lineIIID@i{% |
|---|
| 1037 | \pst@killglue% |
|---|
| 1038 | \pst@getarrows{% |
|---|
| 1039 | \begin@OpenObj% |
|---|
| 1040 | \pst@getcoors[\lineIIID@ii% |
|---|
| 1041 | }% |
|---|
| 1042 | } |
|---|
| 1043 | \def\lineIIID@ii{% |
|---|
| 1044 | \addto@pscode{% |
|---|
| 1045 | \tx@optionssolides |
|---|
| 1046 | SolidesDict begin |
|---|
| 1047 | counttomark |
|---|
| 1048 | /n exch def /n3 n 3 div cvi def |
|---|
| 1049 | n3 { |
|---|
| 1050 | n -3 roll |
|---|
| 1051 | 3dto2d |
|---|
| 1052 | xunit mul exch xunit mul exch |
|---|
| 1053 | /n n 1 sub def |
|---|
| 1054 | } repeat |
|---|
| 1055 | end |
|---|
| 1056 | \pst@cp\space \psline@iii\space \tx@Line |
|---|
| 1057 | }% |
|---|
| 1058 | \end@OpenObj% |
|---|
| 1059 | \ignorespaces% |
|---|
| 1060 | \SpecialCoor% |
|---|
| 1061 | } |
|---|
| 1062 | |
|---|
| 1063 | \def\psPolygonIIID{\NormalIIIDCoor\pst@object{polygonIIID}} |
|---|
| 1064 | \def\polygonIIID@i{% |
|---|
| 1065 | \pst@killglue% |
|---|
| 1066 | \pst@getarrows{% |
|---|
| 1067 | \begin@ClosedObj% |
|---|
| 1068 | \pst@getcoors[\polygonIIID@ii% |
|---|
| 1069 | }% |
|---|
| 1070 | } |
|---|
| 1071 | \def\polygonIIID@ii{% |
|---|
| 1072 | \addto@pscode{% |
|---|
| 1073 | \tx@optionssolides |
|---|
| 1074 | SolidesDict begin |
|---|
| 1075 | counttomark |
|---|
| 1076 | /n exch def /n3 n 3 div cvi def |
|---|
| 1077 | n3 { |
|---|
| 1078 | n -3 roll |
|---|
| 1079 | 3dto2d |
|---|
| 1080 | xunit mul exch xunit mul exch |
|---|
| 1081 | /n n 1 sub def |
|---|
| 1082 | } repeat |
|---|
| 1083 | end |
|---|
| 1084 | \pst@cp\space \psline@iii\space \tx@Polygon |
|---|
| 1085 | }% |
|---|
| 1086 | \end@ClosedObj% |
|---|
| 1087 | \ignorespaces% |
|---|
| 1088 | \SpecialCoor% |
|---|
| 1089 | } |
|---|
| 1090 | |
|---|
| 1091 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |
|---|
| 1092 | \catcode`\@=\PstAtCode\relax |
|---|
| 1093 | |
|---|
| 1094 | |
|---|
| 1095 | \endinput |
|---|