\makeatletter \pstheader{portion-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} \psset[pst-V3D]{nF=20,nH=5}% \define@key[psset]{pst-V3D}{anglebegin}{\def\pst@VIIID@anglebegin{#1}} % angle de début \define@key[psset]{pst-V3D}{angleend}{\def\pst@VIIID@angleend{#1}} % angle de fin \psset[pst-V3D]{anglebegin=0,angleend=180}% \def\psCylindricalPortion{\pst@object{psCylindricalPortion}} \def\psCylindricalPortion@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 CylindricalPortionDict begin /Hcylindre #5 def /incrementHAUTEUR Hcylindre \pst@VIIID@nH\space div def /Rcylindre #4 def /CX #1 def /CY #2 def /CZ #3 def /anglebegin \pst@VIIID@anglebegin\space def /angleend \pst@VIIID@angleend\space def /incrementANGLE {angleend anglebegin sub \pst@VIIID@nF\space div} bind def /pas {angleend anglebegin sub angleend anglebegin sub abs div} bind 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 cylindricalportion Face_superieure Face_inferieure Plat \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 PSplat 0 ge { gsave PlatDraw clip cylindricalportion grestore } if PSfaceSup 0 ge { gsave FaceSup clip cylindricalportion grestore %FaceSup %0 setgray stroke } if PSfaceInf 0 ge { FaceInf clip cylindricalportion %FaceInf %0 setgray stroke } if \else PSfaceSup 0 ge { gsave FaceSup H_S 1 sethsbcolor fill newpath FaceSup closepath 0 setgray stroke grestore } if PSfaceInf 0 ge { FaceInf H_S 1 sethsbcolor fill FaceInf 0 setgray stroke } if PSplat 0 ge { PlatDraw H_S 1 sethsbcolor fill PlatDraw 0 setgray stroke } if \fi end }% fin du code ps \showpointsfalse \end@ClosedObj}} \makeatother %