\csname PSTSOLIDESIIIDLoaded\endcsname
\let\PSTSOLIDESIIIDLoaded\endinput
% Requires PSTricks, pst-node, multido packages
\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi
\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi
\ifx\PSTMultidoLoaded\endinput\else\input multido.tex\fi
\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey \fi
% JPV & ML
\def\fileversion{0.1}
\def\filedate{2006/08/23}
\message{`PSTSOLIDESIIID' v\fileversion, \filedate}
%
\pstheader{solides.pro}

\edef\PstAtCode{\the\catcode`\@} \catcode`\@=11\relax
\pst@addfams{pst-solides3d}
\SpecialCoor
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% point de vue et rotations de l'objet
\define@key[psset]{pst-solides3d}{THETA}{\def\pst@VIIID@THETA{#1}} % longitude
\define@key[psset]{pst-solides3d}{PHI}{\def\pst@VIIID@PHI{#1}}  % latitude
\define@key[psset]{pst-solides3d}{Dobs}{\def\pst@VIIID@Dobs{#1}} % distance observateur
\define@key[psset]{pst-solides3d}{Decran}{\def\pst@VIIID@Decran{#1}} % distance de l'écran
\define@key[psset]{pst-solides3d}{RotX}{\def\psk@IIID@RotX{#1}} % rotation autour de Ox en degrés
\define@key[psset]{pst-solides3d}{RotY}{\def\psk@IIID@RotY{#1}} % rotation autour de Oy en degrés
\define@key[psset]{pst-solides3d}{RotZ}{\def\psk@IIID@RotZ{#1}} % rotation autour de Oz en degrés

\psset[pst-solides3d]{RotZ=0,RotX=0,RotY=0,%
                THETA=70,PHI=30,Dobs=50,Decran=50}%
% paramètres propres à chaque objet
\define@key[psset]{pst-solides3d}{nF}{\def\pst@VIIID@nF{#1}} % nombre de facettes > 20
\define@key[psset]{pst-solides3d}{nH}{\def\pst@VIIID@nH{#1}} % nombre de mailles en hauteur
\define@key[psset]{pst-solides3d}{r0}{\def\pst@VIIID@rO{#1}} % rayon intérieur tore
\define@key[psset]{pst-solides3d}{r1}{\def\pst@VIIID@rI{#1}} % rayon moyen tore
\psset[pst-solides3d]{nF=20,nH=10,r1=4,r0=1.5}


% teinte de l'objet
%%\define@key[psset]{pst-solides3d}{hsbcolor}{\def\pst@VIIID@hsbcolor{#1}} % couleur H et B de (H S B)

% teinte de l'objet
% à partir de PSTricks
\definecolor{couleurface}{rgb}{1 1 0}
\def\psset@couleurface#1{\pst@getcolor{#1}\pscouleurface}
\psset@couleurface{couleurface}

% source de la lumière
\define@key[psset]{pst-solides3d}{thetaLight}{\def\pst@VIIID@thetaLight{#1}} % longitude
\define@key[psset]{pst-solides3d}{phiLight}{\def\pst@VIIID@phiLight{#1}}  % latitude
\define@key[psset]{pst-solides3d}{dLight}{\def\pst@VIIID@dLight{#1}} % distance source

\psset[pst-solides3d]{thetaLight=70,phiLight=30,dLight=1e4}%,hsbcolor=0.17 0.5}%

% nature de l'objet
\define@key[psset]{pst-solides3d}{object}{\def\psk@IIID@object{#1}} %
\psset[pst-solides3d]{object=tore}%

\pst@def{optionsIIID}<%
/cm {\pst@number\psunit mul} def
% le point de vue
/THETA \pst@VIIID@THETA\space def
/PHI \pst@VIIID@PHI\space def
/Dobs \pst@VIIID@Dobs\space def % distance observateur
/Decran \pst@VIIID@Decran\space def % distance de l'écran
%
/RotX \psk@IIID@RotX\space def
/RotY \psk@IIID@RotY\space def
/RotZ \psk@IIID@RotZ\space def
/r1 \pst@VIIID@rI\space def % pour le tore
/r0 \pst@VIIID@rO\space def % pour le tore
%
/xLight {\pst@VIIID@thetaLight\space cos
         \pst@VIIID@phiLight\space cos mul
         \pst@VIIID@dLight\space mul} bind def
/yLight {\pst@VIIID@thetaLight\space sin
         \pst@VIIID@phiLight\space cos mul
         \pst@VIIID@dLight\space mul} bind def
/zLight {\pst@VIIID@phiLight\space sin
         \pst@VIIID@dLight\space mul} bind def
%/H_S {\pst@VIIID@hsbcolor} def
/fillcolor  {\pst@usecolor\pscouleurface currentrgbcolor} def
>%

\def\psSolid{\pst@object{psSolid}}
\def\psSolid@i(#1,#2,#3){{%{{%
  \begin@ClosedObj
    \use@par
    \addto@pscode{%
    1 setlinejoin
    \tx@optionsIIID
    SolidesDict begin
    /CX #1 def
    /CY #2 def
    /CZ #3 def
% nature du solide
\psk@IIID@object\space
%
 end
}% fin du code ps
    \end@ClosedObj%
}}
\makeatother
