prs@tcsc3b2.tcsc.com (Paul Stath) (02/07/91)
I seem to have a problem with the 'clip' operator. The path I am clipping doesn't seem to affect later marks placed on the page using the 'arc' operator. If any of you PostScript gurus have an idea why this doesn't work, please enlighten me. If it is a bug in our PostScript Interp, please advise me on a fix that will work instead. The image is supposed to be a cross shaped object with a pair of rings suspended above it. The idea is to make the rings look like they are shadows, thus the clipping operation to remove the edges of the rings that don't fit on the cross shape. To debug this, I have used the 'clippath' operator to make the current path the same as the clipping area. I then filled it with black to see exactly the area I was clipping. No matter what I do, the rings are not clipped! This is driving me crazy. I might be a problem with the interpreter, so please run it through YOUR laser, and tell me what comes out. Thanks. --------Code follows------------Code follows------------Code follows------------ %! /#copies 1 def %% landScape: Rotates the page to landscape mode /LandScape { 630 0 translate 90 rotate } def % Draw cross /Cross { 0 2 72 mul rlineto 1 72 mul neg 0 rlineto 0 1 72 mul rlineto 1 72 mul 0 rlineto 0 1 72 mul rlineto 1 72 mul 0 rlineto 0 1 72 mul neg rlineto 1 72 mul 0 rlineto 0 1 72 mul neg rlineto 1 72 mul neg 0 rlineto 0 3 72 mul neg rlineto 1 72 mul neg 0 rlineto closepath } def LandScape % Turn paper to Landscape position 0.8 0.8 scale % Draw cross shadow 7 90 mul 4.5 90 mul moveto 11.25 11.25 neg rmoveto gsave Cross gsave 0 setgray fill grestore newpath grestore % Draw cross 7 90 mul 4.5 90 mul moveto gsave Cross gsave 1 setgray fill grestore stroke grestore % Draw circle shadows gsave 7 90 mul 4.5 90 mul moveto Cross clip newpath 7 90 mul 4.5 90 mul moveto 36.25 180 rmoveto 11.25 11.25 neg rmoveto 0.45 90 mul % Ring radius /Rad 0.45 90 mul def currentpoint % save current point on stack 0.25 Rad mul Rad sub 0 rmoveto % Move to center of circle currentpoint % save center of circle on stack Rad 0 rmoveto % Move to edge of circle Rad 0 360 arc % Draw circle currentlinewidth dup 2.5 mul setlinewidth stroke setlinewidth gsave 1 setgray stroke grestore moveto % return to point saved on stack currentpoint % draw second circle over first 0.75 Rad mul 0 rmoveto currentpoint Rad 0 rmoveto Rad 0 360 arc currentlinewidth dup 2.5 mul setlinewidth stroke setlinewidth gsave 1 setgray stroke grestore moveto % Now interlock the first ring with the second ring 0.25 Rad mul Rad sub 0 rmoveto currentpoint 0 Rad neg rmoveto Rad 270 360 arc currentlinewidth dup 2.5 mul setlinewidth stroke setlinewidth gsave 1 setgray stroke grestore clippath stroke grestore showpage