|
|
1.1 ! root 1: /* ! 2: * Clock.psw, Postscript code for drawing analog, digital and sundial clocks. ! 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, goddess of the sundial. ! 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 its ! 8: * fitness for any particular use. ! 9: */ ! 10: ! 11: ! 12: /* drawClockHand draws a line with the specified width and color. ! 13: * The line starts at 0, 0 and spans the specified length in the ! 14: * direction specified by angle. Despite its name, this function is ! 15: * a pretty generic line drawer. ! 16: */ ! 17: defineps PSWdrawClockHand (float x; float y; float angle; float length; float gray; float width) ! 18: gsave ! 19: x y translate ! 20: angle rotate ! 21: 0 0 moveto 0 length lineto ! 22: width setlinewidth ! 23: gray setgray ! 24: stroke ! 25: grestore ! 26: endps ! 27: ! 28: ! 29: /* drawAnalogFace draws the circular border and draws tick marks at ! 30: * 3,6,9 and 12 ! 31: */ ! 32: defineps PSWdrawAnalogFace (float x; float y; float radius) ! 33: gsave ! 34: x y translate ! 35: 1.0 setlinewidth ! 36: 1.0 setgray ! 37: 1 0 radius 0 360 arc ! 38: stroke ! 39: ! 40: .333 setgray ! 41: 0 0 radius 0 360 arc ! 42: stroke ! 43: ! 44: /tickLen radius 8 div neg def ! 45: 1 1 4 { ! 46: .333 setgray ! 47: radius 0.5 moveto ! 48: tickLen 0 rlineto ! 49: stroke ! 50: 1.0 setgray ! 51: radius -.5 moveto ! 52: tickLen 0 rlineto ! 53: stroke ! 54: 90 rotate ! 55: } for ! 56: grestore ! 57: endps ! 58: ! 59: /* drawSundialFace scales coordinate system to draw ellipse. Draws tick marks ! 60: * around the border every pi/2 degrees. ! 61: */ ! 62: defineps PSWdrawSundialFace (float x; float y; float radius) ! 63: gsave ! 64: x y translate ! 65: 1.6 .45 scale ! 66: 0 setlinewidth ! 67: .176 setgray ! 68: 0 -5 radius 0 360 arc fill ! 69: .835 setgray ! 70: 0 0 radius 1 sub 0 360 arc fill ! 71: .333 setgray ! 72: 0 0 radius 0 360 arc stroke ! 73: ! 74: /tickLen radius 4 div neg def ! 75: 1 1 8 { ! 76: 1.0 setgray ! 77: radius -.5 moveto ! 78: tickLen 0 rlineto stroke ! 79: .333 setgray ! 80: radius 0.5 moveto ! 81: tickLen 0 rlineto stroke ! 82: 45 rotate ! 83: } for ! 84: grestore ! 85: endps ! 86: ! 87: /* drawShadow draws the shadow of the sundial marker. ! 88: */ ! 89: defineps PSWdrawShadow (float cx; float cy; float x; float y; float triangle) ! 90: gsave ! 91: cx cy translate ! 92: 1.6 .45 scale ! 93: ! 94: triangle neg 0 moveto ! 95: .333 setgray ! 96: 1.5 setlinewidth ! 97: x y lineto ! 98: triangle 0 lineto ! 99: stroke ! 100: ! 101: triangle neg 0 moveto ! 102: 0 setgray ! 103: 0.5 setlinewidth ! 104: 0 triangle 11 mul lineto ! 105: triangle 0 lineto ! 106: stroke ! 107: grestore ! 108: endps ! 109: ! 110: ! 111: /* drawSweep draws the second hand for the sundial (in the translated ! 112: * and scaled coordinate system. ! 113: */ ! 114: defineps PSWdrawSweep (float x; float y; float angle;float length) ! 115: gsave ! 116: x y translate ! 117: 1.6 .45 scale ! 118: angle rotate ! 119: 0 0 moveto 0 length lineto ! 120: 0 setlinewidth ! 121: 0 setgray ! 122: stroke ! 123: grestore ! 124: endps ! 125: ! 126: /* centerShow centers the width of a string at the specific x y location ! 127: * using specified gray ! 128: */ ! 129: defineps PSWcenterShow (float x; float y; char *str; float gray) ! 130: gray setgray ! 131: x (str) stringwidth pop 2 div sub y moveto ! 132: (str) show ! 133: stroke ! 134: endps ! 135: ! 136: ! 137:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.