source: trunk/kitgen/8.x/blt/library/bltGraph.pro@ 191

Last change on this file since 191 was 175, checked in by demin, 12 years ago

initial commit

File size: 12.8 KB
RevLine 
[175]1%%BeginProlog
2%
3% PostScript prolog file of the BLT graph widget.
4%
5% Copyright 1989-1992 Regents of the University of California.
6% Permission to use, copy, modify, and distribute this
7% software and its documentation for any purpose and without
8% fee is hereby granted, provided that the above copyright
9% notice appear in all copies. The University of California
10% makes no representations about the suitability of this
11% software for any purpose. It is provided "as is" without
12% express or implied warranty.
13%
14% Copyright 1991-1997 Bell Labs Innovations for Lucent Technologies.
15%
16% Permission to use, copy, modify, and distribute this software and its
17% documentation for any purpose and without fee is hereby granted, provided
18% that the above copyright notice appear in all copies and that both that the
19% copyright notice and warranty disclaimer appear in supporting documentation,
20% and that the names of Lucent Technologies any of their entities not be used
21% in advertising or publicity pertaining to distribution of the software
22% without specific, written prior permission.
23%
24% Lucent Technologies disclaims all warranties with regard to this software,
25% including all implied warranties of merchantability and fitness. In no event
26% shall Lucent Technologies be liable for any special, indirect or
27% consequential damages or any damages whatsoever resulting from loss of use,
28% data or profits, whether in an action of contract, negligence or other
29% tortuous action, arising out of or in connection with the use or performance
30% of this software.
31%
32
33200 dict begin
34
35/BaseRatio 1.3467736870885982 def % Ratio triangle base / symbol size
36/BgColorProc 0 def % Background color routine (symbols)
37/DrawSymbolProc 0 def % Routine to draw symbol outline/fill
38/StippleProc 0 def % Stipple routine (bar segments)
39/DashesProc 0 def % Dashes routine (line segments)
40
41% Define the array ISOLatin1Encoding (which specifies how characters are
42% encoded for ISO-8859-1 fonts), if it isn't already present (Postscript
43% level 2 is supposed to define it, but level 1 doesn't).
44
45systemdict /ISOLatin1Encoding known not {
46 /ISOLatin1Encoding [
47 /space /space /space /space /space /space /space /space
48 /space /space /space /space /space /space /space /space
49 /space /space /space /space /space /space /space /space
50 /space /space /space /space /space /space /space /space
51 /space /exclam /quotedbl /numbersign /dollar /percent /ampersand
52 /quoteright
53 /parenleft /parenright /asterisk /plus /comma /minus /period /slash
54 /zero /one /two /three /four /five /six /seven
55 /eight /nine /colon /semicolon /less /equal /greater /question
56 /at /A /B /C /D /E /F /G
57 /H /I /J /K /L /M /N /O
58 /P /Q /R /S /T /U /V /W
59 /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
60 /quoteleft /a /b /c /d /e /f /g
61 /h /i /j /k /l /m /n /o
62 /p /q /r /s /t /u /v /w
63 /x /y /z /braceleft /bar /braceright /asciitilde /space
64 /space /space /space /space /space /space /space /space
65 /space /space /space /space /space /space /space /space
66 /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
67 /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron
68 /space /exclamdown /cent /sterling /currency /yen /brokenbar /section
69 /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen
70 /registered /macron
71 /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph
72 /periodcentered
73 /cedillar /onesuperior /ordmasculine /guillemotright /onequarter
74 /onehalf /threequarters /questiondown
75 /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
76 /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex
77 /Idieresis
78 /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
79 /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn
80 /germandbls
81 /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
82 /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex
83 /idieresis
84 /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
85 /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn
86 /ydieresis
87 ] def
88} if
89
90% font ISOEncode font
91% This procedure changes the encoding of a font from the default
92% Postscript encoding to ISOLatin1. It is typically invoked just
93% before invoking "setfont". The body of this procedure comes from
94% Section 5.6.1 of the Postscript book.
95
96/ISOEncode {
97 dup length dict
98 begin
99 {1 index /FID ne {def} {pop pop} ifelse} forall
100 /Encoding ISOLatin1Encoding def
101 currentdict
102 end
103
104 % I'm not sure why it's necessary to use "definefont" on this new
105 % font, but it seems to be important; just use the name "Temporary"
106 % for the font.
107
108 /Temporary exch definefont
109} bind def
110
111/Stroke {
112 gsave
113 stroke
114 grestore
115} def
116
117/Fill {
118 gsave
119 fill
120 grestore
121} def
122
123/SetFont {
124 % Stack: pointSize fontName
125 findfont exch scalefont ISOEncode setfont
126} def
127
128/Box {
129 % Stack: x y width height
130 newpath
131 exch 4 2 roll moveto
132 dup 0 rlineto
133 exch 0 exch rlineto
134 neg 0 rlineto
135 closepath
136} def
137
138/SetFgColor {
139 % Stack: red green blue
140 CL 0 eq {
141 pop pop pop 0 0 0
142 } if
143 setrgbcolor
144 CL 1 eq {
145 currentgray setgray
146 } if
147} def
148
149/SetBgColor {
150 % Stack: red green blue
151 CL 0 eq {
152 pop pop pop 1 1 1
153 } if
154 setrgbcolor
155 CL 1 eq {
156 currentgray setgray
157 } if
158} def
159
160% The next two definitions are taken from "$tk_library/prolog.ps"
161
162% desiredSize EvenPixels closestSize
163%
164% The procedure below is used for stippling. Given the optimal size
165% of a dot in a stipple pattern in the current user coordinate system,
166% compute the closest size that is an exact multiple of the device's
167% pixel size. This allows stipple patterns to be displayed without
168% aliasing effects.
169
170/EvenPixels {
171 % Compute exact number of device pixels per stipple dot.
172 dup 0 matrix currentmatrix dtransform
173 dup mul exch dup mul add sqrt
174
175 % Round to an integer, make sure the number is at least 1, and compute
176 % user coord distance corresponding to this.
177 dup round dup 1 lt {pop 1} if
178 exch div mul
179} bind def
180
181% width height string filled StippleFill --
182%
183% Given a path and other graphics information already set up, this
184% procedure will fill the current path in a stippled fashion. "String"
185% contains a proper image description of the stipple pattern and
186% "width" and "height" give its dimensions. If "filled" is true then
187% it means that the area to be stippled is gotten by filling the
188% current path (e.g. the interior of a polygon); if it's false, the
189% area is gotten by stroking the current path (e.g. a wide line).
190% Each stipple dot is assumed to be about one unit across in the
191% current user coordinate system.
192
193% width height string StippleFill --
194%
195% Given a path already set up and a clipping region generated from
196% it, this procedure will fill the clipping region with a stipple
197% pattern. "String" contains a proper image description of the
198% stipple pattern and "width" and "height" give its dimensions. Each
199% stipple dot is assumed to be about one unit across in the current
200% user coordinate system. This procedure trashes the graphics state.
201
202/StippleFill {
203 % The following code is needed to work around a NeWSprint bug.
204
205 /tmpstip 1 index def
206
207 % Change the scaling so that one user unit in user coordinates
208 % corresponds to the size of one stipple dot.
209 1 EvenPixels dup scale
210
211 % Compute the bounding box occupied by the path (which is now
212 % the clipping region), and round the lower coordinates down
213 % to the nearest starting point for the stipple pattern. Be
214 % careful about negative numbers, since the rounding works
215 % differently on them.
216
217 pathbbox
218 4 2 roll
219 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
220 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
221
222 % Stack now: width height string y1 y2 x1 x2
223 % Below is a doubly-nested for loop to iterate across this area
224 % in units of the stipple pattern size, going up columns then
225 % across rows, blasting out a stipple-pattern-sized rectangle at
226 % each position
227
228 6 index exch {
229 2 index 5 index 3 index {
230 % Stack now: width height string y1 y2 x y
231
232 gsave
233 1 index exch translate
234 5 index 5 index true matrix tmpstip imagemask
235 grestore
236 } for
237 pop
238 } for
239 pop pop pop pop pop
240} bind def
241
242
243/LS { % Stack: x1 y1 x2 y2
244 newpath 4 2 roll moveto lineto stroke
245} def
246
247/EndText {
248 %Stack :
249 grestore
250} def
251
252/BeginText {
253 %Stack : w h theta centerX centerY
254 gsave
255 % Translate the origin to the center of bounding box and rotate
256 translate neg rotate
257 % Translate back to the origin of the text region
258 -0.5 mul exch -0.5 mul exch translate
259} def
260
261/DrawAdjText {
262 %Stack : str strWidth x y
263 moveto % Go to the text position
264 exch dup dup 4 2 roll
265
266 % Adjust character widths to get desired overall string width
267 % adjust X = (desired width - real width)/#chars
268
269 stringwidth pop sub exch
270 length div
271 0 3 -1 roll
272
273 % Flip back the scale so that the string is not drawn in reverse
274
275 gsave
276 1 -1 scale
277 ashow
278 grestore
279} def
280
281/DrawBitmap {
282 % Stack: ?bgColorProc? boolean centerX centerY width height theta imageStr
283 gsave
284 6 -2 roll translate % Translate to center of bounding box
285 4 1 roll neg rotate % Rotate by theta
286
287 % Find upperleft corner of bounding box
288
289 2 copy -.5 mul exch -.5 mul exch translate
290 2 copy scale % Make pixel unit scale
291 newpath
292 0 0 moveto 0 1 lineto 1 1 lineto 1 0 lineto
293 closepath
294
295 % Fill rectangle with background color
296
297 4 -1 roll {
298 gsave
299 4 -1 roll exec fill
300 grestore
301 } if
302
303 % Paint the image string into the unit rectangle
304
305 2 copy true 3 -1 roll 0 0 5 -1 roll 0 0 6 array astore 5 -1 roll
306 imagemask
307 grestore
308} def
309
310% Symbols:
311
312% Skinny-cross
313/Sc {
314 % Stack: x y symbolSize
315 gsave
316 3 -2 roll translate 45 rotate
317 0 0 3 -1 roll Sp
318 grestore
319} def
320
321% Skinny-plus
322/Sp {
323 % Stack: x y symbolSize
324 gsave
325 3 -2 roll translate
326 2 idiv
327 dup 2 copy
328 newpath neg 0 moveto 0 lineto
329 DrawSymbolProc
330 newpath neg 0 exch moveto 0 exch lineto
331 DrawSymbolProc
332 grestore
333} def
334
335% Cross
336/Cr {
337 % Stack: x y symbolSize
338 gsave
339 3 -2 roll translate 45 rotate
340 0 0 3 -1 roll Pl
341 grestore
342} def
343
344% Plus
345/Pl {
346 % Stack: x y symbolSize
347 gsave
348 3 -2 roll translate
349 dup 2 idiv
350 exch 6 idiv
351
352 %
353 % 2 3 The plus/cross symbol is a
354 % closed polygon of 12 points.
355 % 0 1 4 5 The diagram to the left
356 % x,y represents the positions of
357 % 11 10 7 6 the points which are computed
358 % below.
359 % 9 8
360 %
361
362 newpath
363 2 copy exch neg exch neg moveto dup neg dup lineto
364 2 copy neg exch neg lineto 2 copy exch neg lineto
365 dup dup neg lineto 2 copy neg lineto 2 copy lineto
366 dup dup lineto 2 copy exch lineto 2 copy neg exch lineto
367 dup dup neg exch lineto exch neg exch lineto
368 closepath
369 DrawSymbolProc
370 grestore
371} def
372
373% Circle
374/Ci {
375 % Stack: x y symbolSize
376 gsave
377 3 copy pop
378 moveto newpath
379 2 div 0 360 arc
380 closepath DrawSymbolProc
381 grestore
382} def
383
384% Square
385/Sq {
386 % Stack: x y symbolSize
387 gsave
388 dup dup 2 div dup
389 6 -1 roll exch sub exch
390 5 -1 roll exch sub 4 -2 roll Box
391 DrawSymbolProc
392 grestore
393} def
394
395% Line
396/Li {
397 % Stack: x y symbolSize
398 gsave
399 3 1 roll exch 3 -1 roll 2 div 3 copy
400 newpath
401 sub exch moveto add exch lineto
402 stroke
403 grestore
404} def
405
406% Diamond
407/Di {
408 % Stack: x y symbolSize
409 gsave
410 3 1 roll translate 45 rotate 0 0 3 -1 roll Sq
411 grestore
412} def
413
414% Triangle
415/Tr {
416 % Stack: x y symbolSize
417 gsave
418 3 -2 roll translate
419 BaseRatio mul 0.5 mul % Calculate 1/2 base
420 dup 0 exch 30 cos mul % h1 = height above center point
421 neg % b2 0 -h1
422 newpath moveto % point 1; b2
423 dup 30 sin 30 cos div mul % h2 = height below center point
424 2 copy lineto % point 2; b2 h2
425 exch neg exch lineto %
426 closepath
427 DrawSymbolProc
428 grestore
429} def
430
431% Arrow
432/Ar {
433 % Stack: x y symbolSize
434 gsave
435 3 -2 roll translate
436 BaseRatio mul 0.5 mul % Calculate 1/2 base
437 dup 0 exch 30 cos mul % h1 = height above center point
438 % b2 0 h1
439 newpath moveto % point 1; b2
440 dup 30 sin 30 cos div mul % h2 = height below center point
441 neg % -h2 b2
442 2 copy lineto % point 2; b2 h2
443 exch neg exch lineto %
444 closepath
445 DrawSymbolProc
446 grestore
447} def
448
449% Bitmap
450/Bm {
451 % Stack: x y symbolSize
452 gsave
453 3 1 roll translate pop DrawSymbolProc
454 grestore
455} def
456
457%%EndProlog
458
459%%BeginSetup
460gsave % Save the graphics state
461
462% Default line/text style parameters
463
4641 setlinewidth % width
4651 setlinejoin % join
4660 setlinecap % cap
467[] 0 setdash % dashes
468
469/CL 0 def % Set color level mode
4700 0 0 setrgbcolor % color
471
Note: See TracBrowser for help on using the repository browser.