5
'vieworig' = ['x' = 1; 'y' = 1;];
6
'viewsize' = ['x' = 820; 'y' = 520;];
8
0 = ['x' = -400; 'y' = 0;];
9
1 = ['x' = 400; 'y' = 500;];
11
'vsize' = ['x' = 800; 'y' = 500;];
15
path.init = function () {
16
local i, j, n, s, t, start, end;
18
path.createview (null);
20
fd = openio ('file', '/tmp/ek', 'r');
21
# while ((path.descs[i] = path.readdesc ()))
25
path.createview = function (attr) {
26
local name, vieworig, viewsize;
30
vieworig = attr.vieworig;
32
vieworig = path.defvattr.vieworig;
33
viewsize = attr.viewsize;
35
viewsize = path.defvattr.viewsize;
36
path.view = createwidget (-1, [
42
path.scroll = createwidget (path.view, ['type' = 'scroll';]);
43
widgets[path.view].closeview = path.closeview;
44
path.canvas = createwidget (path.scroll, ['type' = 'canvas';]);
45
setwidgetattr (path.canvas, [
46
'window' = path.data.defvattr.wrect;
47
'viewport' = viewsize;
51
for (fid in attr.funcs)
52
widgets[path.canvas][fid] = attr.funcs[fid];
54
widgets[path.canvas].leftup = path.leftup;
55
widgets[path.canvas].leftmove = path.leftmove;
56
widgets[path.canvas].leftdown = path.leftdown;
57
widgets[path.canvas].middledown = path.middledown;
58
widgets[path.canvas].middlemove = path.middlemove;
59
widgets[path.canvas].middleup = path.middleup;
60
widgets[path.canvas].rightdown = path.rightdown;
61
widgets[path.canvas].rightmove = path.rightmove;
62
widgets[path.canvas].rightup = path.rightup;
63
widgets[path.canvas].keyup = path.keyup;
64
widgets[path.canvas].keydown = path.keydown;
65
widgets[path.canvas].redraw = path.redraw;
67
setwidgetattr (path.canvas, ['color' = [2 = 'red';];]);
68
setwidgetattr (path.canvas, ['color' = [3 = 'green';];]);
71
path.readdesc = function () {
72
local desc, s, t, n, i;
75
0 = ['x' = 9999; 'y' = 9999;];
76
1 = ['x' = -9999; 'y' = -9999;];
78
if (~(s = readline (fd))) {
79
echo ('EOF/0', 'choice', 'ok');
84
ask ('error in file/0', 'choice', 'ok');
87
if (~(s = readline (fd))) {
88
ask ('EOF/01', 'choice', 'ok');
92
if (~(s = readline (fd))) {
93
ask ('EOF/02', 'choice', 'ok');
97
if (~(s = readline (fd))) {
98
ask ('EOF', 'choice', 'ok');
102
ask ('error in file', 'choice', 'ok');
107
for (i = 0; i < n; i = i + 1) {
110
desc.points[i] = ['x' = ston (t[0]); 'y' = ston (t[1]);];
111
if (wrect[0].x > desc.points[i].x - 10)
112
wrect[0].x = desc.points[i].x - 10;
113
if (wrect[0].y > desc.points[i].y - 10)
114
wrect[0].y = desc.points[i].y - 10;
115
if (wrect[1].x < desc.points[i].x + 10)
116
wrect[1].x = desc.points[i].x + 10;
117
if (wrect[1].y < desc.points[i].y + 10)
118
wrect[1].y = desc.points[i].y + 10;
120
desc.points[i] = copy (desc.points[0]);
121
if (~(s = readline (fd))) {
122
ask ('EOF/2', 'choice', 'ok');
125
if (s ~= 'splpoints') {
126
ask ('error in file/2', 'choice', 'ok');
131
for (i = 0; i < n; i = i + 1) {
134
desc.splpoints[i] = ['x' = ston (t[0]); 'y' = ston (t[1]);];
135
if (wrect[0].x > desc.splpoints[i].x - 10)
136
wrect[0].x = desc.splpoints[i].x - 10;
137
if (wrect[0].y > desc.splpoints[i].y - 10)
138
wrect[0].y = desc.splpoints[i].y - 10;
139
if (wrect[1].x < desc.splpoints[i].x + 10)
140
wrect[1].x = desc.splpoints[i].x + 10;
141
if (wrect[1].y < desc.splpoints[i].y + 10)
142
wrect[1].y = desc.splpoints[i].y + 10;
147
path.drawdesc = function (desc) {
150
tt = getwidgetattr (path.canvas, [0 = 'size';]);
151
wrect = copy (desc.wrect);
152
r1 = (wrect[1].x - wrect[0].x) / (wrect[1].y - wrect[0].y);
153
r2 = tt.size.x / tt.size.y;
155
wrect[1].y = wrect[0].y + (wrect[1].x - wrect[0].x) / r2;
157
wrect[1].x = wrect[0].x + (wrect[1].y - wrect[0].y) * r2;
158
setwidgetattr (path.canvas, ['window' = wrect;]);
160
# for (i = 0; desc.points[i]; i = i + 1) {
161
# text (path.canvas, null,
162
# ['x' = desc.points[i].x + 10; 'y' = desc.points[i].y;],
163
# concat ('p ', i), 'fixed', 14, 'lc');
165
polygon (path.canvas, null, desc.points);
166
for (i = 0; desc.splpoints[i]; i = i + 1) {
167
text (path.canvas, null,
168
['x' = desc.splpoints[i].x + 10; 'y' = desc.splpoints[i].y;],
169
concat ('sp ', i), 'fixed', 14, 'lc');
171
# polygon (path.canvas, null, desc.splpoints);
172
splinegon (path.canvas, null, desc.splpoints);
173
text (path.canvas, null,
174
['x' = desc.wrect[0].x + 1; 'y' = desc.wrect[0].y + 10;],
175
concat (tail, ' -> ', head), 'fixed', 14, 'lc');
177
path.redraw = function (data) {
178
path.drawdesc (path.desc);
180
path.keyup = function (data) {
181
if (data.key == 'n') {
183
if ((path.desc = path.readdesc ()))
184
path.drawdesc (path.desc);
185
} else if (data.key == ' ')
189
monitorfile = function (data) {
191
if (~(tail = readline (0))) {
196
if (~(head = readline (0))) {
202
for (i in path.descs) {
203
desc = path.descs[i];
204
if (desc.tail == tail & desc.head == head) {
206
path.drawdesc (desc);