%PDF- %PDF-
| Direktori : /usr/lib/blt2.5/ |
| Current File : //usr/lib/blt2.5/bltGraph.pro |
%%BeginProlog
%
% PostScript prolog file of the BLT graph widget.
%
% Copyright 1989-1992 Regents of the University of California.
% Permission to use, copy, modify, and distribute this
% software and its documentation for any purpose and without
% fee is hereby granted, provided that the above copyright
% notice appear in all copies. The University of California
% makes no representations about the suitability of this
% software for any purpose. It is provided "as is" without
% express or implied warranty.
%
% Copyright 1991-1997 Bell Labs Innovations for Lucent Technologies.
%
% Permission to use, copy, modify, and distribute this software and its
% documentation for any purpose and without fee is hereby granted, provided
% that the above copyright notice appear in all copies and that both that the
% copyright notice and warranty disclaimer appear in supporting documentation,
% and that the names of Lucent Technologies any of their entities not be used
% in advertising or publicity pertaining to distribution of the software
% without specific, written prior permission.
%
% Lucent Technologies disclaims all warranties with regard to this software,
% including all implied warranties of merchantability and fitness. In no event
% shall Lucent Technologies be liable for any special, indirect or
% consequential damages or any damages whatsoever resulting from loss of use,
% data or profits, whether in an action of contract, negligence or other
% tortuous action, arising out of or in connection with the use or performance
% of this software.
%
200 dict begin
/BaseRatio 1.3467736870885982 def % Ratio triangle base / symbol size
/BgColorProc 0 def % Background color routine (symbols)
/DrawSymbolProc 0 def % Routine to draw symbol outline/fill
/StippleProc 0 def % Stipple routine (bar segments)
/DashesProc 0 def % Dashes routine (line segments)
% Define the array ISOLatin1Encoding (which specifies how characters are
% encoded for ISO-8859-1 fonts), if it isn't already present (Postscript
% level 2 is supposed to define it, but level 1 doesn't).
systemdict /ISOLatin1Encoding known not {
/ISOLatin1Encoding [
/space /space /space /space /space /space /space /space
/space /space /space /space /space /space /space /space
/space /space /space /space /space /space /space /space
/space /space /space /space /space /space /space /space
/space /exclam /quotedbl /numbersign /dollar /percent /ampersand
/quoteright
/parenleft /parenright /asterisk /plus /comma /minus /period /slash
/zero /one /two /three /four /five /six /seven
/eight /nine /colon /semicolon /less /equal /greater /question
/at /A /B /C /D /E /F /G
/H /I /J /K /L /M /N /O
/P /Q /R /S /T /U /V /W
/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
/quoteleft /a /b /c /d /e /f /g
/h /i /j /k /l /m /n /o
/p /q /r /s /t /u /v /w
/x /y /z /braceleft /bar /braceright /asciitilde /space
/space /space /space /space /space /space /space /space
/space /space /space /space /space /space /space /space
/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
/dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron
/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen
/registered /macron
/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph
/periodcentered
/cedillar /onesuperior /ordmasculine /guillemotright /onequarter
/onehalf /threequarters /questiondown
/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex
/Idieresis
/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn
/germandbls
/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex
/idieresis
/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn
/ydieresis
] def
} if
% font ISOEncode font
% This procedure changes the encoding of a font from the default
% Postscript encoding to ISOLatin1. It is typically invoked just
% before invoking "setfont". The body of this procedure comes from
% Section 5.6.1 of the Postscript book.
/ISOEncode {
dup length dict
begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding ISOLatin1Encoding def
currentdict
end
% I'm not sure why it's necessary to use "definefont" on this new
% font, but it seems to be important; just use the name "Temporary"
% for the font.
/Temporary exch definefont
} bind def
/Stroke {
gsave
stroke
grestore
} def
/Fill {
gsave
fill
grestore
} def
/SetFont {
% Stack: pointSize fontName
findfont exch scalefont ISOEncode setfont
} def
/Box {
% Stack: x y width height
newpath
exch 4 2 roll moveto
dup 0 rlineto
exch 0 exch rlineto
neg 0 rlineto
closepath
} def
/SetFgColor {
% Stack: red green blue
CL 0 eq {
pop pop pop 0 0 0
} if
setrgbcolor
CL 1 eq {
currentgray setgray
} if
} def
/SetBgColor {
% Stack: red green blue
CL 0 eq {
pop pop pop 1 1 1
} if
setrgbcolor
CL 1 eq {
currentgray setgray
} if
} def
% The next two definitions are taken from "$tk_library/prolog.ps"
% desiredSize EvenPixels closestSize
%
% The procedure below is used for stippling. Given the optimal size
% of a dot in a stipple pattern in the current user coordinate system,
% compute the closest size that is an exact multiple of the device's
% pixel size. This allows stipple patterns to be displayed without
% aliasing effects.
/EvenPixels {
% Compute exact number of device pixels per stipple dot.
dup 0 matrix currentmatrix dtransform
dup mul exch dup mul add sqrt
% Round to an integer, make sure the number is at least 1, and compute
% user coord distance corresponding to this.
dup round dup 1 lt {pop 1} if
exch div mul
} bind def
% width height string filled StippleFill --
%
% Given a path and other graphics information already set up, this
% procedure will fill the current path in a stippled fashion. "String"
% contains a proper image description of the stipple pattern and
% "width" and "height" give its dimensions. If "filled" is true then
% it means that the area to be stippled is gotten by filling the
% current path (e.g. the interior of a polygon); if it's false, the
% area is gotten by stroking the current path (e.g. a wide line).
% Each stipple dot is assumed to be about one unit across in the
% current user coordinate system.
% width height string StippleFill --
%
% Given a path already set up and a clipping region generated from
% it, this procedure will fill the clipping region with a stipple
% pattern. "String" contains a proper image description of the
% stipple pattern and "width" and "height" give its dimensions. Each
% stipple dot is assumed to be about one unit across in the current
% user coordinate system. This procedure trashes the graphics state.
/StippleFill {
% The following code is needed to work around a NeWSprint bug.
/tmpstip 1 index def
% Change the scaling so that one user unit in user coordinates
% corresponds to the size of one stipple dot.
1 EvenPixels dup scale
% Compute the bounding box occupied by the path (which is now
% the clipping region), and round the lower coordinates down
% to the nearest starting point for the stipple pattern. Be
% careful about negative numbers, since the rounding works
% differently on them.
pathbbox
4 2 roll
5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll
6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll
% Stack now: width height string y1 y2 x1 x2
% Below is a doubly-nested for loop to iterate across this area
% in units of the stipple pattern size, going up columns then
% across rows, blasting out a stipple-pattern-sized rectangle at
% each position
6 index exch {
2 index 5 index 3 index {
% Stack now: width height string y1 y2 x y
gsave
1 index exch translate
5 index 5 index true matrix tmpstip imagemask
grestore
} for
pop
} for
pop pop pop pop pop
} bind def
/LS { % Stack: x1 y1 x2 y2
newpath 4 2 roll moveto lineto stroke
} def
/EndText {
%Stack :
grestore
} def
/BeginText {
%Stack : w h theta centerX centerY
gsave
% Translate the origin to the center of bounding box and rotate
translate neg rotate
% Translate back to the origin of the text region
-0.5 mul exch -0.5 mul exch translate
} def
/DrawAdjText {
%Stack : str strWidth x y
moveto % Go to the text position
exch dup dup 4 2 roll
% Adjust character widths to get desired overall string width
% adjust X = (desired width - real width)/#chars
stringwidth pop sub exch
length div
0 3 -1 roll
% Flip back the scale so that the string is not drawn in reverse
gsave
1 -1 scale
ashow
grestore
} def
/DrawBitmap {
% Stack: ?bgColorProc? boolean centerX centerY width height theta imageStr
gsave
6 -2 roll translate % Translate to center of bounding box
4 1 roll neg rotate % Rotate by theta
% Find upperleft corner of bounding box
2 copy -.5 mul exch -.5 mul exch translate
2 copy scale % Make pixel unit scale
newpath
0 0 moveto 0 1 lineto 1 1 lineto 1 0 lineto
closepath
% Fill rectangle with background color
4 -1 roll {
gsave
4 -1 roll exec fill
grestore
} if
% Paint the image string into the unit rectangle
2 copy true 3 -1 roll 0 0 5 -1 roll 0 0 6 array astore 5 -1 roll
imagemask
grestore
} def
% Symbols:
% Skinny-cross
/Sc {
% Stack: x y symbolSize
gsave
3 -2 roll translate 45 rotate
0 0 3 -1 roll Sp
grestore
} def
% Skinny-plus
/Sp {
% Stack: x y symbolSize
gsave
3 -2 roll translate
2 idiv
dup 2 copy
newpath neg 0 moveto 0 lineto
DrawSymbolProc
newpath neg 0 exch moveto 0 exch lineto
DrawSymbolProc
grestore
} def
% Cross
/Cr {
% Stack: x y symbolSize
gsave
3 -2 roll translate 45 rotate
0 0 3 -1 roll Pl
grestore
} def
% Plus
/Pl {
% Stack: x y symbolSize
gsave
3 -2 roll translate
dup 2 idiv
exch 6 idiv
%
% 2 3 The plus/cross symbol is a
% closed polygon of 12 points.
% 0 1 4 5 The diagram to the left
% x,y represents the positions of
% 11 10 7 6 the points which are computed
% below.
% 9 8
%
newpath
2 copy exch neg exch neg moveto dup neg dup lineto
2 copy neg exch neg lineto 2 copy exch neg lineto
dup dup neg lineto 2 copy neg lineto 2 copy lineto
dup dup lineto 2 copy exch lineto 2 copy neg exch lineto
dup dup neg exch lineto exch neg exch lineto
closepath
DrawSymbolProc
grestore
} def
% Circle
/Ci {
% Stack: x y symbolSize
gsave
3 copy pop
moveto newpath
2 div 0 360 arc
closepath DrawSymbolProc
grestore
} def
% Square
/Sq {
% Stack: x y symbolSize
gsave
dup dup 2 div dup
6 -1 roll exch sub exch
5 -1 roll exch sub 4 -2 roll Box
DrawSymbolProc
grestore
} def
% Line
/Li {
% Stack: x y symbolSize
gsave
3 1 roll exch 3 -1 roll 2 div 3 copy
newpath
sub exch moveto add exch lineto
stroke
grestore
} def
% Diamond
/Di {
% Stack: x y symbolSize
gsave
3 1 roll translate 45 rotate 0 0 3 -1 roll Sq
grestore
} def
% Triangle
/Tr {
% Stack: x y symbolSize
gsave
3 -2 roll translate
BaseRatio mul 0.5 mul % Calculate 1/2 base
dup 0 exch 30 cos mul % h1 = height above center point
neg % b2 0 -h1
newpath moveto % point 1; b2
dup 30 sin 30 cos div mul % h2 = height below center point
2 copy lineto % point 2; b2 h2
exch neg exch lineto %
closepath
DrawSymbolProc
grestore
} def
% Arrow
/Ar {
% Stack: x y symbolSize
gsave
3 -2 roll translate
BaseRatio mul 0.5 mul % Calculate 1/2 base
dup 0 exch 30 cos mul % h1 = height above center point
% b2 0 h1
newpath moveto % point 1; b2
dup 30 sin 30 cos div mul % h2 = height below center point
neg % -h2 b2
2 copy lineto % point 2; b2 h2
exch neg exch lineto %
closepath
DrawSymbolProc
grestore
} def
% Bitmap
/Bm {
% Stack: x y symbolSize
gsave
3 1 roll translate pop DrawSymbolProc
grestore
} def
%%EndProlog
%%BeginSetup
gsave % Save the graphics state
% Default line/text style parameters
1 setlinewidth % width
1 setlinejoin % join
0 setlinecap % cap
[] 0 setdash % dashes
/CL 0 def % Set color level mode
0 0 0 setrgbcolor % color