/*----------------------------------------------------------------------*/ /* (C) Copyright 1994, Stefanos Kiakas */ /* All rights reserved. */ /*----------------------------------------------------------------------*/ defineps Source( int level; float x, y ) level 60 lt { /water_level 0 def /tap_level 0 def } { /water_level level 40 sub def /tap_level level 40 sub def } ifelse /draw_pipe { 0.0 setgray 5 setlinewidth 1 setlinejoin %---------------------------------------------------------------------- % Draw lower right hand of pipe. %---------------------------------------------------------------------- newpath x 25 add y 43 add moveto 0 5 rlineto 25 -14 rlineto stroke %---------------------------------------------------------------------- % Draw upper left hand of pipe. %---------------------------------------------------------------------- newpath x 5 add y 50 add moveto 0 -25 rlineto 20 0 rlineto 0 5 rlineto 25 -15 rlineto stroke } def /draw_handle { 0.0 setgray 1 setlinewidth newpath x 2 add y 21 add tap_level sub moveto 0 -4 rlineto 26 0 rlineto 0 4 rlineto -26 0 rlineto closepath stroke } def /draw_inside { 2 setlinewidth newpath %---------------------------------------------------------------------- % Draw square and fill it. %---------------------------------------------------------------------- x 9 add y 49 add tap_level sub moveto 0 -10 rlineto 13 0 rlineto 0 10 rlineto -13 0 rlineto closepath gsave 0.5 setgray fill grestore 0.25 setgray stroke %---------------------------------------------------------------------- % Draw stem that leads to handle. %---------------------------------------------------------------------- 5 setlinewidth newpath x 15 add y 50 add 10 sub tap_level sub moveto 0 -18 rlineto stroke tap_level 2 mod 1 eq { newpath x 15 add y 50 add 30 sub tap_level sub moveto 0 -2 rlineto stroke } { newpath x 10 add y 50 add 30 sub tap_level sub moveto 0 -2 rlineto stroke newpath x 20 add y 50 add 30 sub tap_level sub moveto 0 -2 rlineto stroke } ifelse } def /draw_water_flow { 0 setgray 3.0 setlinewidth newpath water_level 10 lt { /water_level_0 water_level def } { /water_level_0 10 def } ifelse x 8 add y 49 add moveto 0 water_level_0 neg rlineto 15 0 rlineto 0 water_level_0 rlineto closepath fill water_level 10 gt { water_level 15 le { /fill_level_a water_level def } { /fill_level_a 15 def } ifelse newpath x 22 add y 50 add 6 sub moveto 0 -20 rlineto fill_level_a 10 sub 0 rlineto 0 20 rlineto closepath fill } if water_level 15 gt { /fill_level water_level 15 sub def newpath x 25 add y 50 add moveto 0 -20 rlineto 5 fill_level mul -3 fill_level mul rlineto 0 20 rlineto closepath fill newpath x 25 add fill_level 5 mul add y 50 add fill_level 3 mul sub moveto 0 -20 rlineto 5 8 rlineto -5 12 rlineto closepath fill } if } def draw_pipe tap_level 11 gt { /tap_level 11 def } if draw_handle draw_inside draw_water_flow endps