[comp.lang.postscript] Garden... NeWS

rhess@mas1.UUCP (Rich Hess) (05/16/88)

The following NeWS file, garden.ps, was created using the flower routine 
previously submitted by reid@decwrl.dec.com (Brian Reid).  When you run this 
file thru psh, it will create a simple "garden" of what seems to be a variety 
of flowers across the bottom of the NeWS root window.  The variety is 
generated by using random scaling (both x & y) of the flowers and random 
jumps to the next flower location.  Run the file several times to create 
denser looking "gardens".  

--------------------------------<cut here>-------------------------------------
% [ garden.ps ]
%   original:	rhess	[ 5-5-88 ]				[ NeWS 1.1 ]
% -----------------------------------------------------------------------------
% draw a 1-unit-high flower rooted at the current point
%		(Brian Reid, April 1985)

 /flower {
    gsave 1 200 div dup scale currentpoint translate
 % stem
    0 10 moveto -6 7  -7 70  2 95 curveto
    6 105  17 152  12 183 curveto
    gsave 1 setgray 9 setlinewidth stroke grestore
    7 setlinewidth stroke
 % right leaf
    newpath -20 0 moveto 10 0 lineto
    13 35  43 90  71 120 curveto
    40 105 -3 40 -20 0 curveto
    gsave 1 setgray fill grestore 2 setlinewidth stroke
 % left leaf
    -20 0 moveto 10 0 lineto
    0 40 -30 96 -55 140 curveto
    -35 85  -19 35  -20 0 curveto
    gsave 1 setgray fill grestore 2 setlinewidth stroke
 % petals
    gsave 12 183 translate 1 0.7 scale
      /npetals 4 def /petalangle 360 npetals div def
      1 setlinewidth /petlength 55 def
      /dy petalangle sin petlength mul def petalangle 2 div rotate
      npetals
       {newpath 0 0 moveto petlength dy petlength dy neg 0 0 curveto 
	gsave 1 setgray fill grestore stroke petalangle rotate}
      repeat
      newpath 0 0 12 0 360 arc fill
    grestore
  grestore
 } bind def

% -----------------------------------------------------------------------------

/garden {	% - => -		% create a garden of flowers... [rhess]
	gsave
	  100 0 moveto			% starting point...
	  30 30 scale			% default scaling...
	  gsave
	    framebuffer setcanvas
	    clippath pathbbox	
	    pop exch pop exch pop	% width of the framebuffer...
	  grestore
	  100 sub 			% stop 100 pixels from right edge...
	  30 div			% scaled stop point...
	  { dup 			% save a copy of the stop point...
	    currentpoint pop
	    exch gt			% is x beyond the stop point?...
	    { pop exit }		% [yes] exit...
	    { gsave			% [no] 
		random 2 mul random 2 mul scale	% scale both x & y...(random)
		flower 				% draw the flower...
	      grestore	
	      random 0 rmoveto }		% jump to next point...(random)
	    ifelse
	  } loop
	grestore
	} def

% do it... --------------------------------------------------------------------

garden

% ------------------------------------------------------------------------<eof>