%! % ** Copyright (C) 1989, 1990, 1992, 1994 by Aladdin Enterprises. ** % ** All rights reserved. ** % Test line rendering (stroke). % Exercise the miter limit. The left column of lines should bevel at % 90 degrees, the right column at 60 degrees. gsave 1.8 setlinewidth 0 setgray 15 15 scale -5 5 translate [1.415 2.0] { setmiterlimit 12 0 translate 0 0 moveto 10 30 360 { gsave 5 0 rlineto rotate 2.5 0 rlineto gsave 0 setlinewidth 1 0 0 setrgbcolor stroke grestore strokepath 0 setlinewidth stroke grestore 0 4 rmoveto } for } forall showpage grestore % Exercise all the combinations of cap and join styles % for one-line, two-line, and closed paths. gsave 2.0 setmiterlimit 2.0 setlinewidth 6 6 scale 5 20 translate {0 1 2} % line cap { setlinecap gsave {0 1 2} % line join { setlinejoin gsave { {3 7 lineto} {3 7 lineto 5 1 lineto} {3 7 lineto 5 3 lineto closepath} } { gsave 0 0 moveto exec gsave stroke grestore 0.5 setlinewidth 1 0 0 setrgbcolor stroke grestore 10 0 translate } forall grestore 35 0 translate } forall grestore 0 20 translate } forall showpage grestore % Here are some boundary conditions, contributed by Mark Rawling. gsave 1 setlinecap 2.6 setmiterlimit 3.0 setlinewidth 5 5 scale 10 20 translate % [ 0.5 sqrt dup dup dup neg exch 0 0 ] concat % 45 rotate {0 1 2} % line join { setlinejoin gsave 0 0 moveto 0 10 lineto 10 0 lineto gsave stroke grestore 15 0 translate 0 0 moveto 0 10 lineto 10 20 lineto gsave stroke grestore 15 0 translate 10 0 moveto 10 10 lineto 0 20 lineto gsave stroke grestore 15 0 translate 10 0 moveto 10 10 lineto 0 0 lineto gsave stroke grestore grestore gsave 0 20 translate 0 20 moveto 0 10 lineto 10 20 lineto gsave stroke grestore 15 0 translate 0 20 moveto 0 10 lineto 10 0 lineto gsave stroke grestore 15 0 translate 10 20 moveto 10 10 lineto 0 0 lineto gsave stroke grestore 15 0 translate 10 20 moveto 10 10 lineto 0 20 lineto gsave stroke grestore grestore 60 0 translate } forall showpage grestore % Test narrow lines at a variety of angles. gsave /rad 120 def /ray { gsave rotate 0 0 moveto rad 0 rlineto stroke grestore } def /star { newpath gsave gsave 0.5 setgray 0 0 rad 0 360 arc stroke grestore 0 90 359 { rotate 0 3 14 { ray } for 15 15 89 { ray } for } for grestore } def 0 setgray 150 150 translate [ [ 0 0.5 1 ] [ 1.5 2 2.5 ] [ 3 3.5 4 ] ] { gsave { setlinewidth star 250 0 translate } forall grestore 0 250 translate } forall grestore showpage % End quit