\makeatletter \pstheader{cylindre.pro} \define@key[psset]{pst-V3D}{nF}{\def\pst@VIIID@nF{#1}} % nombre de facettes > 20 \define@key[psset]{pst-V3D}{nH}{\def\pst@VIIID@nH{#1}} % nombre de mailles en hauteur \newif\ifPst@interior% \define@key[psset]{pst-V3D}{interior}[false]{\@nameuse{Pst@interior#1}} \psset[pst-V3D]{interior=false} \newif\ifPst@cylindre% \define@key[psset]{pst-V3D}{cylindre}[true]{\@nameuse{Pst@cylindre#1}} \psset[pst-V3D]{cylindre=true} \psset[pst-V3D]{nF=20,nH=5}% \define@key[psset]{pst-V3D}{colorbase}{\def\psk@IIID@colorbase{#1}} % couleur de la base RGB \psset[pst-V3D]{colorbase=0.8 0.8 0.8} \def\psCylindre{\pst@object{psCylindre}} \def\psCylindre@i(#1,#2,#3)#4#5{{% % (#1,#2,#3) coordonnées du centre % #4 rayon #5 hauteur \begin@ClosedObj% \use@par \addto@pscode{% 1 setlinejoin \tx@parametresIIID CylindreDict begin /incrementANGLE {360 \pst@VIIID@nF\space div} bind def /Hcylindre #5 def /incrementHAUTEUR Hcylindre \pst@VIIID@nH\space div def /Rcylindre #4 def /CX #1 def /CY #2 def /CZ #3 def /PointsApresTransformations { 3 dict begin M11 Xpoint mul M12 Ypoint mul add M13 Zpoint mul add CX add M21 Xpoint mul M22 Ypoint mul add M23 Zpoint mul add CY add M31 Xpoint mul M32 Ypoint mul add M33 Zpoint mul add CZ add end } def /ChangeSigne {1 mul} def /condition {PSfacette 0 ge} def \ifPst@cylindre% cylindre \fi % Face_superieure Face_inferieure \ifPst@interior H_S exch /h ED /s ED /ChangeSigne { -1 mul } def /H_S { h dup mul s 2 div } def /condition {PSfacette 0 le} def PSfaceSup 0 ge { gsave FaceSup clip cylindre grestore %FaceSup %0 setgray stroke } if PSfaceInf 0 ge { FaceInf clip cylindre %FaceInf %0 setgray stroke } if \else PSfaceSup 0 ge { gsave FaceSup H_S 1 sethsbcolor fill FaceSup 0 setgray stroke grestore } if PSfaceInf 0 ge { FaceInf H_S 1 sethsbcolor fill FaceInf 0 setgray stroke } if \fi end }% fin du code ps \showpointsfalse \end@ClosedObj}} \makeatother %