\expandafter\ifx\csname ifcsname\endcsname\relax
\newlinechar`\^^J
\message{^^J*****************************************}
\message{etex is needed to work with pst-solides3d}
\message{*****************************************}
\catcode`\ =11\relax
\Compile With etex Please
\fi
\csname PSTSOLIDESIIIDLoaded\endcsname
\let\PSTSOLIDESIIIDLoaded\endinput
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi
\ifx\PSTnodesLoaded\endinput\else\input pst-node \fi
\ifx\MultidoLoaded\endinput\else\input multido.tex \fi
\def\fileversion{4.0}
\def\filedate{2008/07/06}
\message{`PSTSOLIDESIIID' v\fileversion, \filedate}
\pstheader{solides.pro}
\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
\pst@addfams{pst-solides3d}
\SpecialCoor
\define@key[psset]{pst-solides3d}{viewpoint}{\def\pst@solides@viewpoint{#1}}\psset[pst-solides3d]{viewpoint=10 10 10}\define@key[psset]{pst-solides3d}{Decran}{\def\pst@solides@Decran{#1}}\define@key[psset]{pst-solides3d}{RotX}{\def\psk@solides@RotX{#1}}\define@key[psset]{pst-solides3d}{RotY}{\def\psk@solides@RotY{#1}}\define@key[psset]{pst-solides3d}{RotZ}{\def\psk@solides@RotZ{#1}}\psset[pst-solides3d]{RotZ=0,RotX=0,RotY=0,Decran=50}\define@key[psset]{pst-solides3d}{resolution}{\def\pst@solides@resolution{#1}} \define@key[psset]{pst-solides3d}{no}{\def\pst@solides@no{#1}} \define@key[psset]{pst-solides3d}{phi}{\def\pst@solides@phi{#1}} \define@key[psset]{pst-solides3d}{theta}{\def\pst@solides@theta{#1}} \define@key[psset]{pst-solides3d}{r0}{\def\pst@solides@rO{#1}} \define@key[psset]{pst-solides3d}{r1}{\def\pst@solides@rI{#1}} \define@key[psset]{pst-solides3d}{R}{\def\pst@solides@R{#1}} \define@key[psset]{pst-solides3d}{r}{\def\pst@solides@r{#1}} \define@key[psset]{pst-solides3d}{a}{\def\pst@solides@a{#1}} \define@key[psset]{pst-solides3d}{b}{\def\pst@solides@b{#1}} \define@key[psset]{pst-solides3d}{c}{\def\pst@solides@c{#1}} \define@key[psset]{pst-solides3d}{h}{\def\pst@solides@h{#1}} \define@key[psset]{pst-solides3d}{chanfreincoeff}{\def\pst@solides@chanfreincoeff{#1}} \define@key[psset]{pst-solides3d}{trunccoeff}{\def\pst@solides@trunccoeff{#1}} \define@key[psset]{pst-solides3d}{affinagecoeff}{\def\pst@solides@affinagecoeff{#1}} \define@key[psset]{pst-solides3d}{dualregcoeff}{\def\pst@solides@dualregcoeff{#1}} \define@key[psset]{pst-solides3d}{intersectiontype}{\def\pst@solides@intersectiontype{#1}} \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,trunccoeff=.25,chanfreincoeff=.8,affinagecoeff=.8,dualregcoeff=1,intersectiontype=-1}
\define@key[psset]{pst-solides3d}{base}{\def\pst@solides@base{#1}} \psset[pst-solides3d]{base=-1 -1 1 -1 0 1}\define@key[psset]{pst-solides3d}{axe}{\def\pst@solides@axe{#1}} \psset[pst-solides3d]{axe=0 0 1}\define@key[psset]{pst-solides3d}{plansection}{\def\pst@solides@plansection{#1}} \psset[pst-solides3d]{plansection=}\define@key[psset]{pst-solides3d}{plansepare}{\def\pst@solides@plansepare{#1}} \psset[pst-solides3d]{plansepare=}\define@key[psset]{pst-solides3d}{intersectionlinewidth}{\def\pst@solides@intersectionlinewidth{#1}}\psset[pst-solides3d]{intersectionlinewidth=1}\define@key[psset]{pst-solides3d}{intersectioncolor}{\def\pst@solides@intersectioncolor{#1}}\psset[pst-solides3d]{intersectioncolor=(rouge)}\define@key[psset]{pst-solides3d}{intersectionplan}{\def\pst@solides@intersectionplan{#1}}\psset[pst-solides3d]{intersectionplan=[0 0 1 0]}\define@key[psset]{pst-solides3d}{definition}{\def\pst@solides@definition{#1}} \psset[pst-solides3d]{definition=}\define@key[psset]{pst-solides3d}{args}{\def\pst@solides@args{#1}} \psset[pst-solides3d]{args=}\define@key[psset]{pst-solides3d}{transform}{\def\pst@solides@transform{#1}} \psset[pst-solides3d]{transform=}
\def\Section{ R h 2 div neg R h 2 div r h 2 div r h 2 div neg }
\define@key[psset]{pst-solides3d}{section}{\def\pst@solides@section{#1}} \psset[pst-solides3d]{section=\Section}
\define@key[psset]{pst-solides3d}{decal}{\def\pst@solides@decal{#1}}
\psset[pst-solides3d]{decal=-2}
\define@key[psset]{pst-solides3d}{incolor}{\pst@getcolor{#1}\psincolor}
\psset[pst-solides3d]{incolor=green}
\define@key[psset]{pst-solides3d}{color1}{\pst@getcolor{#1}\pscolora}
\psset[pst-solides3d]{color1=cyan}
\define@key[psset]{pst-solides3d}{color2}{\pst@getcolor{#1}\pscolorb}
\psset[pst-solides3d]{color2=magenta}
\define@key[psset]{pst-solides3d}{color3}{\pst@getcolor{#1}\pscolorc}
\psset[pst-solides3d]{color3=blue}
\define@key[psset]{pst-solides3d}{color4}{\pst@getcolor{#1}\pscolord}
\psset[pst-solides3d]{color4=red}
\newcount\test@mode
\define@key[psset]{pst-solides3d}{mode}{ \test@mode=#1\relax \ifnum\test@mode>4 \typeout{mode must be 0,1,2,3 or 4 and not `\the\test@mode'. Value 4 forced.}\test@mode=4 \fi\edef\pst@solides@mode{\the\test@mode}}\psset[pst-solides3d]{mode=2}\define@boolkey[psset]{pst-solides3d}[Pst@]{SphericalCoor}[true]{}
\psset{SphericalCoor=false}
\define@boolkey[psset]{pst-solides3d}[Pst@]{affinagerm}[false]{}
\psset{affinagerm=true}
\define@boolkey[psset]{pst-solides3d}[Pst@]{chanfrein}[true]{}
\psset{chanfrein=false}
\define@boolkey[psset]{pst-solides3d}[Pst@]{grid}[false]{}
\psset{grid=true}
\define@boolkey[psset]{pst-solides3d}[Pst@]{dualreg}[true]{}
\psset{dualreg=false}
\define@boolkey[psset]{pst-solides3d}[Pst@]{geode}[true]{}
\psset{geode=false}
\define@boolkey[psset]{pst-solides3d}[Pst@]{hollow}[true]{}
\psset{hollow=false}
\define@boolkey[psset]{pst-solides3d}[Pst@]{biface}[true]{}
\psset{biface=true}\define@boolkey[psset]{pst-solides3d}[Pst@]{axesboxed}[true]{}
\psset{axesboxed=false}\define@boolkey[psset]{pst-solides3d}[Pst@]{planmarks}[true]{}
\psset{planmarks=false}\define@boolkey[psset]{pst-solides3d}[Pst@]{plangrid}[true]{}
\psset{plangrid=false}\define@boolkey[psset]{pst-solides3d}[Pst@]{showbase}[true]{}
\psset{showbase=false}\define@boolkey[psset]{pst-solides3d}[Pst@]{showBase}[true]{}
\psset{showBase=false}\define@boolkey[psset]{pst-solides3d}[Pst@]{deactivatecolor}[true]{}
\psset{deactivatecolor=false}
\define@key[psset]{pst-solides3d}{rm}{\def\pst@solides@CoordinatesRm{#1}}
\psset[pst-solides3d]{rm=}\define@key[psset]{pst-solides3d}{name}{\def\pst@solides@name{#1}}
\psset[pst-solides3d]{name=}\define@key[psset]{pst-solides3d}{solidname}{\def\pst@solides@solidname{#1}}
\psset[pst-solides3d]{solidname=}\define@key[psset]{pst-solides3d}{file}{\def\pst@solides@file{#1}}
\psset[pst-solides3d]{file=}\define@key[psset]{pst-solides3d}{planname}{\def\pst@solides@planname{#1}}
\psset[pst-solides3d]{planname=}\define@key[psset]{pst-solides3d}{load}{\def\pst@solides@load{#1}}
\psset[pst-solides3d]{load=}\define@key[psset]{pst-solides3d}{fcolor}{\def\pst@solides@fcolor{#1}}
\psset[pst-solides3d]{fcolor=}\define@key[psset]{pst-solides3d}{fcol}{\def\pst@solides@fcol{#1}}
\psset[pst-solides3d]{fcol=}\define@key[psset]{pst-solides3d}{hue}{\def\pst@solides@hue{#1}}
\psset[pst-solides3d]{hue=}\define@key[psset]{pst-solides3d}{inhue}{\def\pst@solides@inhue{#1}}
\psset[pst-solides3d]{inhue=}\define@key[psset]{pst-solides3d}{inouthue}{\def\pst@solides@inouthue{#1}}
\psset[pst-solides3d]{inouthue=}\define@key[psset]{pst-solides3d}{sommets}{\def\pst@solides@sommets{#1}}
\psset[pst-solides3d]{sommets=}\define@key[psset]{pst-solides3d}{faces}{\def\pst@solides@faces{#1}}
\psset[pst-solides3d]{faces={}}\define@key[psset]{pst-solides3d}{numfaces}{\def\pst@solides@numfaces{#1}}
\psset[pst-solides3d]{numfaces=}\define@key[psset]{pst-solides3d}{trunc}{\def\pst@solides@trunc{#1}}
\psset[pst-solides3d]{trunc=}\define@key[psset]{pst-solides3d}{affinage}{\def\pst@solides@affinage{#1}}
\psset[pst-solides3d]{affinage=}\define@key[psset]{pst-solides3d}{num}{\def\pst@solides@num{#1}}
\psset[pst-solides3d]{num=}\define@key[psset]{pst-solides3d}{show}{\def\pst@solides@show{#1}}
\psset[pst-solides3d]{show=}\define@key[psset]{pst-solides3d}{ngrid}{\def\pst@solides@ngrid{#1}}
\psset[pst-solides3d]{ngrid=}
\define@key[psset]{pst-solides3d}{lightsrc}{\def\pst@solides@CoordinatesLight{#1}}
\psset[pst-solides3d]{lightsrc=}\define@key[psset]{pst-solides3d}{lightintensity}{\def\pst@solides@lightintensity{#1}}
\psset[pst-solides3d]{lightintensity=2}
\expandafter\ifx\csname @latexerr\endcsname\relax \immediate\write17{We are running tex and have to define some LaTeX commands ...}
\def\@fornoop#1\@@#2#3{}
\long\def\@for#1:=#2\do#3{ \expandafter\def\expandafter\@fortmp\expandafter{#2} \ifx\@fortmp\@empty \else
\expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}
\long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
#5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}
\long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
\expandafter\@fornoop \else
#4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}\fi
\def\pst@solides@reservednames#1{\edef\@tempa{\csname pst@solides@list@#1\endcsname}
\@for \name:=\@tempa\do{ \expandafter\def\csname pst@solides@#1@\name\endcsname{}}}
\def\pst@solides@list@action{none,draw,draw*,draw**,writeobj,writesolid,writeoff}
\pst@solides@reservednames{action}
\define@key[psset]{pst-solides3d}{action}{ \ifcsname pst@solides@action@#1\endcsname
\def\pst@solides@action{#1} \else
\@pstrickserr{This action is not authorized, the procedure draw** is
chosen by default}{} \fi}
\psset[pst-solides3d]{action=draw**}\define@key[psset]{pst-solides3d}{PSfont}{\def\pst@solides@PSfont{/#1 }}
\define@key[psset]{pst-solides3d}{fontsize}{\def\pst@solides@fontsize{#1 }}
\psset[pst-solides3d]{PSfont=Times-Roman,fontsize=10}
\def\pst@solides@list@object{tore,cube,tetrahedron,octahedron,icosahedron,dodecahedron,sphere,cylindre,cylindrecreux,cone,conecreux,tronccone,troncconecreux,grille,prisme,anneau,parallelepiped,prismecreux,ruban,calottesphere,face,surface,calottespherecreuse,polygoneregulier,fusion,new,chemin,courbeR2,courbe,surfaceparametree,texte,trigospherique,vecteur,line,objfile,datfile,surface*,plan,offfile,geode,load,plantype,point,pie,droite,polygone,cercle,rightangle}
\pst@solides@reservednames{object}
\define@key[psset]{pst-solides3d}{object}{ \ifcsname pst@solides@object@#1\endcsname
\def\psk@solides@object{pst-#1} \else
\@pstrickserr{The solid #1 is not defined, the solid by default is
drawn}{} \fi}
\def\addtosolideslistobject#1{\expandafter\def\expandafter\pst@solides@list@object\expandafter {\pst@solides@list@object,#1} \edef\@tempa{#1} \@for \name:=\@tempa\do{ \expandafter\def\csname pst@solides@object@\name\endcsname{} }}
\psset[pst-solides3d]{object=tore}\define@key[psset]{pst-solides3d}{spotX}{\def\pst@solides@@spotX{#1}}\define@key[psset]{pst-solides3d}{spotY}{\def\pst@solides@@spotY{#1}}\define@key[psset]{pst-solides3d}{spotZ}{\def\pst@solides@@spotZ{#1}}\define@key[psset]{pst-solides3d}{QZ}{\def\pst@solides@@QZ{#1}}\define@key[psset]{pst-solides3d}{Zmin}{\def\pst@solides@@Zmin{#1}}\define@key[psset]{pst-solides3d}{Zmax}{\def\pst@solides@@Zmax{#1}}\psset[pst-solides3d]{spotX=dr,spotY=dl,spotZ=l,QZ=0,Zmin=-4,Zmax=4}
\def\gridIIID{\pst@object{gridIIID}}
\def\gridIIID@i(#1,#2)(#3,#4){ \pst@killglue \begingroup \use@par\psSolid[object=parallelepiped,
intersectiontype=-1,
a={#2 #1 sub},b={#4 #3 sub},c={\pst@solides@@Zmax\space \pst@solides@@Zmin\space sub},action=draw](0,0,\pst@solides@@QZ)
\pst@cnta=#2 \advance\pst@cnta by -#1 \advance\pst@cnta by 1
\multido{\ix=#1+1}{\pst@cnta}{ \psPoint(\ix\space,#4,\pst@solides@@Zmin){X1}
\psPoint(\ix\space,#4 .2 add,\pst@solides@@Zmin){X2}
\psline(X1)(X2)
\uput[\pst@solides@@spotX](X1){\small\ix}}
\pst@cnta=#4 \advance\pst@cnta by -#3 \advance\pst@cnta by 1\multido{\iy=#3+1}{\pst@cnta}{ \psPoint(#2,\iy\space,\pst@solides@@Zmin){Y1}
\psPoint(#2 .2 add,\iy\space,\pst@solides@@Zmin){Y2}
\psline(Y1)(Y2)
\uput[\pst@solides@@spotY](Y1){\small\iy}}
\pst@cnta=\pst@solides@@Zmax \advance\pst@cnta by -\pst@solides@@Zmin \advance\pst@cnta by 1
\multido{\iz=\pst@solides@@Zmin+1}{\pst@cnta}{ \psPoint(#2,#3,\iz\space){Z1}
\psPoint(#2,#3 .2 sub,\iz\space){Z2}
\psline(Z1)(Z2)
\uput[\pst@solides@@spotZ](Z1){\small\iz}}
\psPoint(0,0,\pst@solides@@Zmax\space 3 add){Z'}
\psPoint(#2 2 add,0,0){X'}
\psPoint(0,#4 2 add, 0){Y'}
\psPoint(0,0,\pst@solides@@Zmax){Z}
\psPoint(#2,0,0){X}
\psPoint(0,#4,0){Y}
\psPoint(0,0,0){O}
\uput[\pst@solides@@spotY](X'){$x$}
\uput[\pst@solides@@spotX](Y'){$y$}
\uput[u](Z'){$z$}
\psline[linestyle=dashed](O)(X)
\psline[linestyle=dashed](O)(Y)
\psline[linestyle=dashed](O)(Z)
\psline{->}(Z)(Z')\psline{->}(Y)(Y')\psline{->}(X)(X')
\endgroup \ignorespaces}
\pst@def{optionssolides}</pst@fill { \psk@opacityalpha .setopacityalpha fill } def
/strokeopacity \psk@opacityalpha def
/fillopacity \psk@opacityalpha def
/xunit {\pst@number\psunit } def
/decal \pst@solides@decal\space def /viewpointXYZ {\pst@solides@viewpoint} def
/Decran \pst@solides@Decran\space def /RotX \psk@solides@RotX\space def
/RotY \psk@solides@RotY\space def
/RotZ \psk@solides@RotZ\space def
/fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def
\ifPst@visibility
/projectionsifacevisible true def
\else
/projectionsifacevisible false def
\fi
/R \pst@solides@R\space def /r1 \pst@solides@rI\space def /r0 \pst@solides@rO\space def /resolution \pst@solides@resolution\space def /phi \pst@solides@phi\space def /theta \pst@solides@theta\space def /r \pst@solides@r\space def /a \pst@solides@a\space def /b \pst@solides@b\space def /c \pst@solides@c\space def /h \pst@solides@h\space def /trunccoeff \pst@solides@trunccoeff\space def /chanfreincoeff \pst@solides@chanfreincoeff\space def /affinagecoeff \pst@solides@affinagecoeff\space def /dualregcoeff \pst@solides@dualregcoeff\space def /solidintersectiontype \pst@solides@intersectiontype\space def /section {\pst@solides@section} def /base [ \pst@solides@base ] def
/solidintersectionlinewidth [ \pst@solides@intersectionlinewidth ] def
/solidintersectioncolor [ \pst@solides@intersectioncolor ] def
/solidintersectionplan [ \pst@solides@intersectionplan ] def
/axe { \pst@solides@axe } def
/plansection [ \pst@solides@plansection ] def
\ifx\pst@solides@function\@empty
\else
/function (\pst@solides@function) def
\fi
/definition (\pst@solides@definition) def
/args { \pst@solides@args} def
/Mode \pst@solides@mode\space def /lightintensity \pst@solides@lightintensity\space def /solidlinewidth {\pst@number\pslinewidth} def
/linecolor {\pst@usecolor\pslinecolor} def
/linestyle {\pslinestyle} def
/fillcolor {\pst@usecolor\psfillcolor currentrgbcolor} def
/fillincolor {\pst@usecolor\psincolor currentrgbcolor} def
/color1 {\pst@usecolor\pscolora } def
/color2 {\pst@usecolor\pscolorb } def
/color3 {\pst@usecolor\pscolorc } def
/color4 {\pst@usecolor\pscolord } def
/range [ \pst@solides@range ] def
/action (\pst@solides@action) def
/texte (\pst@solides@text) def
/pos (\pst@solides@pos) def
/proj-fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def
\ifx\pst@solides@CoordinatesLight\@empty
\else
/lightsrc {\pst@solides@CoordinatesLight} def
\fi
\ifx\pst@solides@CoordinatesRm\@empty
/rmfaces [] def
\else
/rmfaces [\pst@solides@CoordinatesRm] def
\fi
\ifx\pst@solides@plansepare\@empty
\else
/plansepare {\pst@solides@plansepare} def
\fi
\ifx\pst@solides@transform\@empty
\else
/pst-transformoption { \pst@solides@transform} def
\fi
\ifx\pst@solides@name\@empty
\else
/solidname (\pst@solides@name) def
\fi
\ifx\pst@solides@file\@empty
\else
/solidfilename (\pst@solides@file) def
\fi
\ifx\pst@solides@planname\@empty
\else
/solidplanname (\pst@solides@planname) def
\fi
\ifx\pst@solides@load\@empty
\else
/solidloadname {\pst@solides@load} def
\fi
\ifx\pst@solides@fcolor\@empty
\else
/solidfcolor (\pst@solides@fcolor) def
\fi
\ifx\pst@solides@fcol\@empty
/fcol [] def
\else
/fcol [\pst@solides@fcol] def
\fi
\ifx\pst@solides@hue\@empty
/solidhue [] def
\else
/solidhue [\pst@solides@hue] def
\fi
\ifx\pst@solides@inouthue\@empty
/solidinouthue [] def
\else
/solidinouthue [\pst@solides@inouthue] def
\fi
\ifx\pst@solides@inhue\@empty
/solidinhue [] def
\else
/solidinhue [\pst@solides@inhue] def
\fi
/origin {\pst@solides@origin} def
\ifx\pst@solides@sommets\@empty
/sommets [] def
\else
/sommets [\pst@solides@sommets] def
\fi
\ifx\pst@solides@faces\@empty
/faces [] def
\else
/faces [\pst@solides@faces] def
\fi
\ifx\pst@solides@show\@empty
/solidshow [] def
\else
/solidshow [\pst@solides@show] def
\fi
\ifx\pst@solides@num\@empty
/solidnum [] def
\else
/solidnum [\pst@solides@num] def
\fi
\ifx\pst@solides@numfaces\@empty
/solidnumf [] def
\else
/solidnumf [\pst@solides@numfaces] def
\fi
\ifx\pst@solides@trunc\@empty
/solidtrunc [] def
\else
/solidtrunc [\pst@solides@trunc] def
\fi
\ifx\pst@solides@affinage\@empty
/solidaffinage [] def
\else
/solidaffinage [\pst@solides@affinage] def
\fi
\ifx\pst@solides@ngrid\@empty
/ngrid [] def
\else
/ngrid [\pst@solides@ngrid] def
\fi
\ifPst@affinagerm
/affinagerm true def
\else
/affinagerm false def
\fi
\ifPst@chanfrein
/chanfrein true def
\else
/chanfrein false def
\fi
\ifPst@grid
/solidgrid true def
\else
/solidgrid false def
\fi
\ifPst@planmarks
/solidplanmarks true def
\else
/solidplanmarks false def
\fi
\ifPst@plangrid
/solidplangrid true def
\else
/solidplangrid false def
\fi
\ifPst@showBase
/solidshowbase3d true def
\else
/solidshowbase3d false def
\fi
\ifPst@deactivatecolor
/activationgestioncouleurs false def
\else
/activationgestioncouleurs true def
\fi
\ifPst@showbase
/solidshowbase true def
\else
/solidshowbase false def
\fi
\ifPst@dualreg
/soliddualreg true def
\else
/soliddualreg false def
\fi
\ifPst@geode
/solidgeode true def
\else
/solidgeode false def
\fi
\ifPst@hollow
/solidhollow true def
\else
/solidhollow false def
\fi
\ifPst@biface
/solidbiface true def
\else
/solidbiface false def
\fi
\ifPst@SphericalCoor
viewpointXYZ /PHI ED /THETA ED /Dobs ED
/XpointVue {Dobs Cos1Cos2 mul} bind def
/YpointVue {Dobs Sin1Cos2 mul} bind def
/ZpointVue {Dobs Sin2 mul} bind def
XpointVue YpointVue ZpointVue /viewpoint defpoint3d
\else
viewpointXYZ /ZpointVue ED /YpointVue ED /XpointVue ED
/THETA {YpointVue XpointVue atan} bind def
/PHI {ZpointVue XpointVue dup mul YpointVue dup mul add sqrt atan} bind def
/Dobs {XpointVue dup mul YpointVue dup mul add ZpointVue dup mul add sqrt} bind def
XpointVue YpointVue ZpointVue /viewpoint defpoint3d
\fi
>
\define@boolkey[psset]{pst-solides3d}[Pst@]{solidmemory}[true]{}
\psset{solidmemory=false}
\def\psSolid{\def\pst@par{}\pst@object{psSolid}}
\def\psSolid@i{\@ifnextchar({\psSolid@ii}{\psSolid@ii(0.,0.,0.)}}
\def\psSolid@ii(#1,#2,#3){{ \use@par
\ifPst@solidmemory
\else
\begin@ClosedObj
\fi
\addto@pscode{ 1 setlinejoin
\tx@optionssolides
SolidesDict begin
#1 #2 #3
/CZ exch def
/CY exch def
/CX exch def
\psk@solides@object\space
end
}\ifPst@solidmemory
\else
\end@ClosedObj\fi
\ignorespaces
}}
\def\composeSolid{\use@pscode}
\def\codejps#1{{\define@key[psset]{pst-solides3d}{object}{\def\psk@solides@object{#1}}
\psSolid[object={#1} exec](0,0,0)}}
\def\psTransformPoint{\def\pst@par{}\pst@object{psTransformPoint}}
\def\psTransformPoint@i(#1)(#2,#3,#4)#5{{ \begin@SpecialObj
\pnode(!
\tx@optionssolides
SolidesDict begin
#1 RotX RotY RotZ rotateOpoint3d
#2 #3 #4 translatepoint3d
3dto2d cm_1 exch cm_1 exch
end){#5} \end@SpecialObj
}\ignorespaces}
\def\psPoint{\def\pst@par{}\pst@object{psPoint}}
\def\psPoint@i(#1,#2,#3)#4{{ \begin@SpecialObj
\pnode(!
\tx@optionssolides
SolidesDict begin
#1 #2 #3
3dto2d cm_1 exch cm_1 exch
end){#4} \end@SpecialObj
}\ignorespaces}
\def\Normale{\pst@object{Normale}}
\def\Normale@i(#1,#2,#3){\pst@killglue\begingroup\use@par\pstVerb{/latitude #3 def
/longitude #2 def
/Rayon #1 def
/xP Rayon #2 cos #3 cos mul mul def
/yP Rayon #2 sin #3 cos mul mul def
/zP Rayon #3 sin mul def}\psSolid[object=vecteur,RotZ=#2,RotY=-#3,
args=1.7 0 0](xP,yP,zP)
\endgroup \ignorespaces}
\define@boolkey[psset]{pst-solides3d}[Pst@]{showOrigin}[true]{}
\define@boolkey[psset]{pst-solides3d}[Pst@]{mathLabel}[true]{}
\psset[pst-solides3d]{showOrigin,mathLabel}
\def\pst@solides@axisnames@i#1,#2,#3,#4\@nil{ \def\pst@solides@axesIIID@xname{#1}
\def\pst@solides@axesIIID@yname{#2}
\def\pst@solides@axesIIID@zname{#3}}
\define@key[psset]{pst-solides3d}{axisnames}{ \expandafter\pst@solides@axisnames@i#1,,,\@nil}\psset[pst-solides3d]{axisnames={x,y,z}}
\define@key[psset]{pst-solides3d}{axisemph}{ \def\pst@solides@axesIIID@emph{#1}}
\psset[pst-solides3d]{axisemph=}
\def\axesIIID{\pst@object{axesIIID}}
\def\axesIIID@i(#1,#2,#3)(#4,#5,#6){ \pst@killglue \begingroup \addbefore@par{arrows=->} \use@par \psPoint(0,0,0){O}
\psPoint(#1,0,0){X}
\psPoint(0,#2,0){Y}
\psPoint(0,0,#3){Z}
\psPoint(#4,0,0){X'}
\psPoint(0,#5,0){Y'}
\psPoint(0,0,#6){Z'}
\psPoint(#4 \pst@number\pslabelsep \pst@number\psunit div add,0, 0)
{Xname}
\psPoint(0, #5 \pst@number\pslabelsep \pst@number\psunit div add, 0)
{Yname}
\psPoint(0, 0, #6 \pst@number\pslabelsep \pst@number\psunit div add)
{Zname}
\ifPst@showOrigin
\psline[linestyle=dashed,arrows=-](O)(X)
\psline[linestyle=dashed,arrows=-](O)(Y)
\psline[linestyle=dashed,arrows=-](O)(Z)
\fi
\psline(X)(X')
\psline(Y)(Y')
\psline(Z)(Z')
\rput(Xname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph
\pst@solides@axesIIID@xname\ifPst@mathLabel$\fi}
\rput(Yname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph
\pst@solides@axesIIID@yname\ifPst@mathLabel$\fi}
\rput(Zname){\ifPst@mathLabel$\fi\pst@solides@axesIIID@emph
\pst@solides@axesIIID@zname\ifPst@mathLabel$\fi}
\endgroup \ignorespaces}
\define@boolkey[psset]{pst-solides3d}[Pst@]{algebraic}[true]{}
\psset[pst-solides3d]{algebraic=false}\def\psSurface{\pst@object{psSurface}}
\def\psSurface@i(#1,#2)(#3,#4)#5{{ \use@par
\ifPst@solidmemory
\else
\begin@ClosedObj
\fi
\addto@pscode{ 1 setlinejoin
\tx@optionssolides
SolidesDict begin
/CX 0 def /CY 0 def /CZ 0 def
/base [ #1 #3 #2 #4 ] def
\ifPst@algebraic
/fonction
(#5) tx@AlgToPs begin AlgToPs end cvx def
\else
/fonction { #5 } def
\fi
/f {2 dict begin
/y exch def
/x exch def
fonction
end } def
pst-surface
end
} \ifPst@axesboxed
\gridIIID(#1,#3)(#2,#4)
\fi
\ifPst@solidmemory
\else
\end@ClosedObj\fi
}}
\def\defFunction{\@ifnextchar[{\defFunction@i}{\defFunction@i[]}}
\def\defFunction@i[#1]#2(#3)#4#5#6{\bgroup
\pst@killglue
\psset{#1}
\defFunction@ii{#3}\edef\@tempa{\the\toks@} \ifPst@algebraic\toks@={} \def\@tempb{#4}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi
\def\@tempb{#5}\ifx\@tempb\@empty \else\store@toks@after\@tempb\fi
\def\@tempb{#6}\ifx\@tempb\@empty
\else\store@toks@after\@tempb\fi
\pstVerb{
/#2 { 3 dict begin \@tempa \the\toks@
gere_pst-deffunction end } def } \else
\pstVerb{
/#2 { 3 dict begin \the\toks@ #4 #5 #6
gere_pst-deffunction end } def } \fi
\egroup}
\def\defFunction@ii#1{\defFunction@iii#1,,,\end}
\def\defFunction@iii#1,#2,#3,#4\end{%
\toks@={} \def\arg@ii{#1}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi
\def\arg@ii{#2}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi
\def\arg@ii{#3}\ifx\arg@ii\@empty \else\store@toks@before\arg@ii\fi
\edef\@tmpPSDefns{\the\toks@ mark } \global\toks@=\expandafter{\@tmpPSDefns}}\def\store@toks@before#1{ \edef\@tmpPSDefns{/#1 exch def \the\toks@} \global\toks@=\expandafter{\@tmpPSDefns}}
\def\store@toks@after#1{ \edef\@tmpPSDefns{\the\toks@ (#1) tx@AlgToPs begin AlgToPs end cvx } \global\toks@=\expandafter{\@tmpPSDefns}}
\define@boolkey[psset]{pst-solides3d}[Pst@]{visibility}[false]{}
\psset{visibility=true}
\define@key[psset]{pst-solides3d}{normal}{\def\pst@solides@normal{#1}}
\psset[pst-solides3d]{normal=0 0 1}
\define@key[psset]{pst-solides3d}{origine}{\def\pst@solides@origin{#1}} \psset[pst-solides3d]{origine=0 0 0 }\define@key[psset]{pst-solides3d}{range}{\def\pst@solides@range{#1}}
\psset[pst-solides3d]{range=-5 5}\define@key[psset]{pst-solides3d}{path}{\def\pst@solides@path{#1}}\psset[pst-solides3d]{path=newpath 0 0 moveto}\define@key[psset]{pst-solides3d}{function}{\def\pst@solides@function{#1}}\psset[pst-solides3d]{function=}\define@key[psset]{pst-solides3d}{RotationAngleText}{\def\pst@solides@RotationAngleText{#1}} \psset[pst-solides3d]{RotationAngleText=0 }\define@key[psset]{pst-solides3d}{text}{\def\pst@solides@text{#1}}
\psset[pst-solides3d]{text=}\define@key[psset]{pst-solides3d}{plan}{\def\pst@solides@plan{#1}}
\psset[pst-solides3d]{plan=}\define@key[psset]{pst-solides3d}{pos}{\def\pst@solides@pos{#1}}
\psset[pst-solides3d]{pos=cc}
\pst@def{psProjection}<\ifPst@visibility
/projectionsifacevisible true def
\else
/projectionsifacevisible false def
\fi
/solidlinewidth {\pst@number\pslinewidth} def
/PSfont {\pst@solides@PSfont} def
/normale {\pst@solides@normal} bind def
/fontsize {\pst@solides@fontsize\space \pst@number\psunit mul 28.45 div } bind def
/origin {\pst@solides@origin} def
/RotationAngleText {\pst@solides@RotationAngleText} def
/range [ \pst@solides@range ] def
/path { \pst@solides@path } def
/function { \pst@solides@function } def
/texte (\pst@solides@text) def
/pos (\pst@solides@pos) def
/proj-definition (\pst@solides@definition) def
/proj-args { \pst@solides@args} def
/proj-action (\pst@solides@action) def
\ifx\pst@solides@name\@empty
\else
/projname (\pst@solides@name) def
\fi
\ifx\pst@solides@plan\@empty
\else
/planprojpst \pst@solides@plan \space def
\fi
\ifx\pst@solides@solidname\@empty
\else
/solidprojname {\pst@solides@solidname\space} def
\fi
/noface \pst@solides@no\space def /resolution \pst@solides@resolution\space def >
\def\psProjection{\def\pst@par{}\pst@object{psProjection}}
\def\psProjection@i{\@ifnextchar({\psProjection@ii}{\psProjection@ii(0,0)}}
\def\psProjection@ii(#1){\expandafter\psProjection@iii#1,,\@nil}
\def\psProjection@iii#1,#2,#3\@nil{{ \def\pst@tempA{#2} \ifPst@solidmemory\use@par\else\begin@ClosedObj\fi
\addto@pscode{ \tx@optionssolides
SolidesDict begin
\tx@psProjection
/CX 0 def
/CY 0 def
/CZ 0 def
#1/xorigine exch def
\ifx\pst@tempA\@empty
/yorigine xorigine def
/xorigine exch def\space\else
\pst@tempA\space /yorigine exch def
\fi
proj-\psk@solides@object\space
end
} \psk@fillstyle
\pst@stroke
\ifPst@solidmemory\else\end@ClosedObj\fi
}}
\def\cartesianIIID@coor#1,#2,#3,#4\@nil{\edef\pst@coor{#1 #2 #3 }}
\def\NormalIIIDCoor{ \def\pst@@getcoor##1{\pst@expandafter\cartesianIIID@coor{##1}, ,\@nil} \def\psput@##1{\pst@@getcoor{##1}\leavevmode\psput@cartesian}}
\def\psLineIIID{\NormalIIIDCoor\pst@object{lineIIID}}
\def\lineIIID@i{ \pst@killglue \pst@getarrows{ \begin@OpenObj \pst@getcoors[\lineIIID@ii }}
\def\lineIIID@ii{ \addto@pscode{ \tx@optionssolides
SolidesDict begin
counttomark
/n exch def /n3 n 3 div cvi def
n3 {
n -3 roll
3dto2d
xunit mul exch xunit mul exch
/n n 1 sub def
} repeat
end
\pst@cp\space \psline@iii\space \tx@Line
} \end@OpenObj \ignorespaces \SpecialCoor}
\def\psPolygonIIID{\NormalIIIDCoor\pst@object{polygonIIID}}
\def\polygonIIID@i{ \pst@killglue \pst@getarrows{ \begin@ClosedObj \pst@getcoors[\polygonIIID@ii }}
\def\polygonIIID@ii{ \addto@pscode{ \tx@optionssolides
SolidesDict begin
counttomark
/n exch def /n3 n 3 div cvi def
n3 {
n -3 roll
3dto2d
xunit mul exch xunit mul exch
/n n 1 sub def
} repeat
end
\pst@cp\space \psline@iii\space \tx@Polygon
} \end@ClosedObj \ignorespaces \SpecialCoor}
\catcode`\@=\PstAtCode\relax
\endinput