|
|
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.