home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / AppKit / BusyBox / Gauge.psw < prev    next >
Text File  |  1990-10-26  |  2KB  |  93 lines

  1. /*
  2.  * Gauge.psw, Postscript code for drawing analog gauge.
  3.  * Author: Bruce Blumberg, NeXT Developer Support Group.
  4.  * Originally written for 0.6 mid 1988, modified for 1.0 by Ali Ozer.
  5.  * Cleaned and spiffed up for 2.0 by Julie Zelenski.
  6.  * You may freely copy, distribute and reuse the code in this example.  
  7.  * NeXT disclaims any warranty of any kind, expressed or implied, as to 
  8.  * its fitness for any particular use.
  9.  */
  10.  
  11. /* PSWdrawBorder draws the border and background of the gauge face.
  12.  */
  13. defineps PSWdrawBorder(float x; float y; float radius)
  14.     0.835 setgray
  15.     x y radius 1.5 add 0 360 arc
  16.     fill 
  17.     1.0 setlinewidth
  18.     1.0 setgray
  19.     x y radius 2 add 50 220 arc
  20.     stroke
  21.     1.5 setlinewidth
  22.     .333 setgray
  23.     x y radius 2 add 220 50 arc
  24.     stroke
  25.     1.0 setlinewidth
  26.     0.0 setgray
  27.     x y radius 1.5 add 220 50 arc
  28.     stroke
  29. endps
  30.  
  31. /* PSWdrawTicks draws a tick mark at each increment around the circle 
  32.  * from the start to the stop angle.
  33.  */
  34. defineps PSWdrawTicks(float x; float y; float radius; float increment; float start; float stop)
  35.     0 setgray
  36.     .5 setlinewidth
  37.     gsave
  38.     x y translate
  39.     start rotate
  40.     start increment stop {
  41.         newpath
  42.         radius 0 moveto
  43.         -3 0 rlineto
  44.         closepath
  45.         stroke
  46.         increment neg rotate
  47.     } for
  48.     grestore
  49. endps
  50.  
  51. /* PSWdrawString simply draws string at specific location 
  52.  */
  53. defineps PSWdraw(Ing(float x; float y; char *str)
  54.     0 setgray
  55.     x y moveto
  56.     (str) show
  57. endps
  58.  
  59. /* PSWmakeHand defines a PS function that will subsequently be used
  60.  * to draw the hand at different angles as the value changes.
  61.  */
  62. defineps PSWmakeHand(float length)
  63.     /mhand {
  64.     0 setgray
  65.     0 setlinewidth
  66.     newpath
  67.         0 3.5 moveto
  68.         0 0 3.5 90 270 arc
  69.         length 3.5 rlineto
  70.         length neg 3.5 rlineto
  71.     closepath 
  72.     fill
  73.     newpath
  74.         0 2 moveto
  75.         0 0 1.5 0 360 arc
  76.         closepath
  77.         1 setgray
  78.     closepath
  79.     fill
  80.     } def
  81. endps
  82.  
  83. /* PSWdrawHand translate and rotates the coordinate system, then uses
  84.  * mhand to draw the gauge hand.
  85.  */
  86.               
  87. defineps PSWdrawHand(float x; float y; float ang)
  88.     gsave
  89.     x y translate
  90.     ang rotate
  91.     mhand
  92.     grestore
  93. endps