blob: 3ecf33fbd93fcbd14c4c3f7e34ad2f10c66f5545 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
%!
TeXDict begin /@beginspec{gsave Resolution 72 div VResolution -72 div scale
treedict begin}def /@endspec{end grestore}def /treedict 200 dict def treedict
begin /pt{72 mul 72.07 div}def /nodemargin 2 def /nodes 100 dict def /node{
/dpth exch def /hght exch def /wdth exch def 4 dict dup begin /x /y
currentpoint dpth sub nodemargin sub exch 3 1 roll def nodemargin sub def /h
hght dpth add nodemargin dup add add def /w wdth nodemargin dup add add def
end nodes 3 1 roll put}def /nodebottom{begin x w 2 div add y end}def /nodetop{
begin x w 2 div add y h add end}def /nodeleft{begin x y h 2 div add end}def
/noderight{begin x w add y h 2 div add end}def /nodetopleft{begin x y h add
end}def /nodetopright{begin x w add y h add end}def /nodebottomleft{begin x y
end}def /nodebottomright{begin x w add y end}def /farright{begin x w add depth
add h 2 div y add end}def /farleft{begin x depth sub h 2 div y add end}def
/farbottom{begin x w 2 div add y depth sub end}def /fartop{begin x w 2 div add
y h add depth add end}def /farbottomleft{begin x depth 45 cos mul sub y depth
45 sin mul sub end}def /farbottomright{begin x w add depth 45 cos mul add y
depth 45 sin mul sub end}def /fartopright{begin x w add depth 45 cos mul add y
h add depth 45 sin mul add end}def /fartopleft{begin x depth 45 cos mul sub y
h add depth 45 sin mul add end}def /alignpoint{2 copy sub abs 1 le{add 2 div
round dup}if}def /getnode{nodes exch get}def /nodeconnect{gsave transform 4 2
roll transform exch 4 1 roll alignpoint 4 2 roll alignpoint 4 1 roll exch
itransform moveto itransform lineto stroke grestore}def /arrowdict 15 dict def
arrowdict begin /mtrx matrix def end /arrow{arrowdict begin /insetlength exch
def /headlength exch def /halfheadthickness exch 2 div def /tipy exch def
/tipx exch def /taily exch def /tailx exch def /dx tipx tailx sub def /dy tipy
taily sub def /angle dy dx atan def /savematrix mtrx currentmatrix def tipx
tipy translate angle rotate 0 0 moveto headlength neg halfheadthickness neg
lineto headlength insetlength sub neg 0 lineto headlength neg
halfheadthickness lineto closepath fill savematrix setmatrix end}def
/arrowfill{gsave newpath arrowwidth arrowlength arrowinset arrow grestore}def
/arrowline{arrowdict begin gsave newpath /tipfix exch def /tailfix exch def
/tipy exch def /tipx exch def /taily exch def /tailx exch def /dx tipx tailx
sub def /dy tipy taily sub def /angle dy dx atan def /savematrix mtrx
currentmatrix def tipx tipy translate angle rotate tipfix neg 0 moveto
savematrix setmatrix /savematrix mtrx currentmatrix def tailx taily translate
angle rotate tailfix 0 lineto savematrix setmatrix stroke grestore end}def
/arrownodeconnect{gsave transform 4 2 roll transform exch 4 1 roll alignpoint
4 2 roll alignpoint 4 1 roll exch itransform 4 2 roll itransform 4 copy 0
arrowdict begin arrowlength arrowinset sub end arrowline gsave newpath
arrowfill grestore grestore}def /doublearrownodeconnect{gsave transform 4 2
roll transform exch 4 1 roll alignpoint 4 2 roll alignpoint 4 1 roll exch
itransform 4 2 roll itransform 4 copy arrowdict begin arrowlength arrowinset
sub end dup arrowline 4 copy gsave newpath arrowfill grestore gsave newpath 4
2 roll arrowfill grestore grestore}def /barnodeconnect{4 2 roll 2 copy moveto
5 -1 roll add dup 3 1 roll lineto 2 index exch lineto lineto stroke}def
/arrowbarnodeconnect{4 2 roll 2 copy moveto 5 -1 roll add dup 3 1 roll lineto
2 index exch 4 copy lineto lineto gsave newpath 4 2 roll arrowfill fill
grestore stroke}def /nodetriangle{gsave exch nodes exch get nodebottom moveto
dup nodes exch get nodetopleft lineto nodes exch get nodetopright lineto
closepath stroke grestore}def /slope{/y1 exch def /x1 exch def /y0 exch def
/x0 exch def y1 y0 sub x1 x0 sub div}def /midpoint{/y1 exch def /x1 exch def
/y0 exch def /x0 exch def x1 x0 sub abs x1 x0 ge{x0 add}{x1 add}ifelse y1 y0
sub abs y1 y0 ge{y0 add}{y1 add}ifelse}def /tancurveto{1 index exch curveto}
def /nodetancurve{/depth exch def /to exch def /from exch def gsave nodes from
get noderight moveto nodes to get noderight tancurveto stroke grestore}def
/getloc{3 -1 roll nodes exch get dup begin depth end 3 1 roll exch cvx exec 4
2 roll}def /rightcur{0 /noderight getloc}def /leftcur{180 /nodeleft getloc}
def /topcur{90 /nodetop getloc}def /bottomcur{270 /nodebottom getloc}def
/topleftcur{135 /nodetopleft getloc}def /toprightcur{45 /nodetopright getloc}
def /bottomleftcur{225 /nodebottomleft getloc}def /bottomrightcur{315
/nodebottomright getloc}def /arrowfiddledict 10 dict def /arrowfiddle{
arrowfiddledict begin /twist exch def /shift exch def /shaft exch def /angle
exch twist add def /tipy exch def /tipx exch def tipx angle cos shaft mul add
tipy angle sin shaft mul add tipx angle cos shift mul add tipy angle sin shift
mul add end}def /nodecurve{gsave 0 fromangle arrowfiddle moveto 6 2 roll 0
toangle arrowfiddle curveto stroke grestore}def /arrownodecurve{gsave 0
fromangle arrowfiddle moveto 6 2 roll 4 copy 10 4 roll arrowlength arrowinset
sub toangle arrowfiddle curveto 0 toangle arrowfiddle arrowfill stroke
grestore}def /arrow2nodecurve{gsave 4 copy 0 fromangle arrowfiddle arrowfill
arrowlength arrowinset sub fromangle arrowfiddle moveto 6 2 roll 4 copy 10 4
roll arrowlength arrowinset sub toangle arrowfiddle curveto 0 toangle
arrowfiddle arrowfill stroke grestore}def /delink{gsave 4 copy newslope 6 2
roll newmidpoint delinkline}def /delinkline{moveto dup 0 eq{blong 2 div neg 0
rmoveto blong 0 rlineto 2 pop}{exch dup 0 eq{0 blong 2 div neg rmoveto 0 blong
rlineto 2 pop}{div neg dup dup mul 1 add sqrt blong exch div 2 copy mul 2 copy
2 div neg exch 2 div neg exch rmoveto rlineto 1 pop}ifelse}ifelse stroke
grestore}def /delinkcurve{8 copy 8 copy bezslope 10 2 roll bezmidpoint
delinkline}def /xyarrange{exch 3 1 roll 5 -1 roll 7 -1 roll exch 4 2 roll}def
/calcx{exch 3 mul 3 -1 roll 3 mul add add add 8 mul}def /calcy{add exch sub
exch sub}def /bezmidpoint{xyarrange calcx 5 1 roll calcx exch}def /bezslope{
xyarrange calcy 5 1 roll calcy exch}def /newmidpoint{exch 4 -1 roll add 2 div
3 1 roll add 2 div}def /newslope{4 -1 roll exch 4 1 roll sub 3 1 roll sub exch
}def /nodebox{nodes exch get begin gsave newpath x y moveto h w dobox cleanup
stroke grestore end}def /nodecircle{nodes exch get begin gsave newpath w 2 div
x add h 2 div y add w w mul h h mul add sqrt 2 div 4 -1 roll add 360 0 arcn
cleanup stroke grestore end}def /nodecircletrans{nodes exch get begin gsave
newpath w 2 div x add h 2 div y add w w mul h h mul add sqrt 2 div 4 -1 roll
add 360 0 arcn stroke grestore end}def /nodeoval{nodes exch get begin gsave
newpath x 2 sub y 2 sub moveto h 4 add w 4 add dooval cleanup stroke grestore
end}def /testnodeoval{nodes exch get begin gsave newpath h h mul w w mul add
sqrt div dup dup dup w mul neg x add exch h mul neg y add moveto dup h mul 2
mul h add exch w mul 2 mul w add testdooval stroke grestore end}def /cleanup{
gsave x y moveto h nodemargin sub .5 add w nodemargin sub .5 add doccbox 1
setgray fill grestore}def /boxdict 4 dict def boxdict /mtrx matrix put /dobox{
boxdict begin /w exch def /h exch def /savematrix mtrx currentmatrix def 0 h
rlineto w 0 rlineto 0 h neg rlineto closepath savematrix setmatrix end}def
/doccbox{boxdict begin /w exch def /h exch def /savematrix mtrx currentmatrix
def w 0 rlineto 0 h rlineto w neg 0 rlineto closepath savematrix setmatrix end
}def /ovaldict 6 dict def ovaldict /mtrx matrix put /dooval{ovaldict begin /w
exch def /h exch def /savematrix mtrx currentmatrix def 0 h 2 div rmoveto 0 h
2 div nodemargin sub nodemargin h 2 div w 2 div h 2 div rcurveto w 2 div
nodemargin sub 0 w 2 div nodemargin neg w 2 div h 2 div neg rcurveto 0 h 2 div
neg nodemargin add nodemargin neg h 2 div neg w 2 div neg h 2 div neg rcurveto
w 2 div neg nodemargin add 0 w 2 div neg nodemargin w 2 div neg h 2 div
rcurveto savematrix setmatrix end}def /testdooval{ovaldict begin /w exch def
/h exch def /r exch def h 2 div neg r mul dup h 2 div dup r mul 3 1 roll 2 r
sub mul 0 h rcurveto w 2 div dup r mul exch 2 r sub mul w 2 div r mul dup 3 1
roll w 0 rcurveto h 2 div r mul dup h 2 div neg dup r mul 3 1 roll 2 r sub mul
0 h neg rcurveto w 2 div neg dup r mul exch 2 r sub mul w 2 div neg r mul dup
3 1 roll w neg 0 rcurveto end}def end end
|