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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
|
path = [
'data' = [
];
'defvattr' = [
'vieworig' = ['x' = 1; 'y' = 1;];
'viewsize' = ['x' = 820; 'y' = 520;];
'wrect' = [
0 = ['x' = -400; 'y' = 0;];
1 = ['x' = 400; 'y' = 500;];
];
'vsize' = ['x' = 800; 'y' = 500;];
'w2v' = 1;
];
];
path.init = function () {
local i, j, n, s, t, start, end;
path.createview (null);
i = 0;
fd = openio ('file', '/tmp/ek', 'r');
# while ((path.descs[i] = path.readdesc ()))
# i = i + 1;
echo ('ready');
};
path.createview = function (attr) {
local name, vieworig, viewsize;
name = attr.name;
if (~attr.name)
name = 'PATH';
vieworig = attr.vieworig;
if (~attr.vieworig)
vieworig = path.defvattr.vieworig;
viewsize = attr.viewsize;
if (~attr.viewsize)
viewsize = path.defvattr.viewsize;
path.view = createwidget (-1, [
'type' = 'view';
'name' = name;
'origin' = vieworig;
'size' = viewsize;
]);
path.scroll = createwidget (path.view, ['type' = 'scroll';]);
widgets[path.view].closeview = path.closeview;
path.canvas = createwidget (path.scroll, ['type' = 'canvas';]);
setwidgetattr (path.canvas, [
'window' = path.data.defvattr.wrect;
'viewport' = viewsize;
]);
clear (path.canvas);
if (attr.funcs) {
for (fid in attr.funcs)
widgets[path.canvas][fid] = attr.funcs[fid];
} else {
widgets[path.canvas].leftup = path.leftup;
widgets[path.canvas].leftmove = path.leftmove;
widgets[path.canvas].leftdown = path.leftdown;
widgets[path.canvas].middledown = path.middledown;
widgets[path.canvas].middlemove = path.middlemove;
widgets[path.canvas].middleup = path.middleup;
widgets[path.canvas].rightdown = path.rightdown;
widgets[path.canvas].rightmove = path.rightmove;
widgets[path.canvas].rightup = path.rightup;
widgets[path.canvas].keyup = path.keyup;
widgets[path.canvas].keydown = path.keydown;
widgets[path.canvas].redraw = path.redraw;
}
setwidgetattr (path.canvas, ['color' = [2 = 'red';];]);
setwidgetattr (path.canvas, ['color' = [3 = 'green';];]);
return path.canvas;
};
path.readdesc = function () {
local desc, s, t, n, i;
wrect = [
0 = ['x' = 9999; 'y' = 9999;];
1 = ['x' = -9999; 'y' = -9999;];
];
if (~(s = readline (fd))) {
echo ('EOF/0', 'choice', 'ok');
return;
}
echo ('> ', s);
if (s ~= 'edge') {
ask ('error in file/0', 'choice', 'ok');
return;
}
if (~(s = readline (fd))) {
ask ('EOF/01', 'choice', 'ok');
return;
}
desc.tail = s;
if (~(s = readline (fd))) {
ask ('EOF/02', 'choice', 'ok');
return;
}
desc.head = s;
if (~(s = readline (fd))) {
ask ('EOF', 'choice', 'ok');
return;
}
if (s ~= 'points') {
ask ('error in file', 'choice', 'ok');
return;
}
s = readline (fd);
n = ston (s);
for (i = 0; i < n; i = i + 1) {
s = readline (fd);
t = split (s, ' ');
desc.points[i] = ['x' = ston (t[0]); 'y' = ston (t[1]);];
if (wrect[0].x > desc.points[i].x - 10)
wrect[0].x = desc.points[i].x - 10;
if (wrect[0].y > desc.points[i].y - 10)
wrect[0].y = desc.points[i].y - 10;
if (wrect[1].x < desc.points[i].x + 10)
wrect[1].x = desc.points[i].x + 10;
if (wrect[1].y < desc.points[i].y + 10)
wrect[1].y = desc.points[i].y + 10;
}
desc.points[i] = copy (desc.points[0]);
if (~(s = readline (fd))) {
ask ('EOF/2', 'choice', 'ok');
return;
}
if (s ~= 'splpoints') {
ask ('error in file/2', 'choice', 'ok');
return;
}
s = readline (fd);
n = ston (s);
for (i = 0; i < n; i = i + 1) {
s = readline (fd);
t = split (s, ' ');
desc.splpoints[i] = ['x' = ston (t[0]); 'y' = ston (t[1]);];
if (wrect[0].x > desc.splpoints[i].x - 10)
wrect[0].x = desc.splpoints[i].x - 10;
if (wrect[0].y > desc.splpoints[i].y - 10)
wrect[0].y = desc.splpoints[i].y - 10;
if (wrect[1].x < desc.splpoints[i].x + 10)
wrect[1].x = desc.splpoints[i].x + 10;
if (wrect[1].y < desc.splpoints[i].y + 10)
wrect[1].y = desc.splpoints[i].y + 10;
}
desc.wrect = wrect;
return desc;
};
path.drawdesc = function (desc) {
local i;
tt = getwidgetattr (path.canvas, [0 = 'size';]);
wrect = copy (desc.wrect);
r1 = (wrect[1].x - wrect[0].x) / (wrect[1].y - wrect[0].y);
r2 = tt.size.x / tt.size.y;
if (r1 > r2)
wrect[1].y = wrect[0].y + (wrect[1].x - wrect[0].x) / r2;
else
wrect[1].x = wrect[0].x + (wrect[1].y - wrect[0].y) * r2;
setwidgetattr (path.canvas, ['window' = wrect;]);
clear (path.canvas);
# for (i = 0; desc.points[i]; i = i + 1) {
# text (path.canvas, null,
# ['x' = desc.points[i].x + 10; 'y' = desc.points[i].y;],
# concat ('p ', i), 'fixed', 14, 'lc');
# }
polygon (path.canvas, null, desc.points);
for (i = 0; desc.splpoints[i]; i = i + 1) {
text (path.canvas, null,
['x' = desc.splpoints[i].x + 10; 'y' = desc.splpoints[i].y;],
concat ('sp ', i), 'fixed', 14, 'lc');
}
# polygon (path.canvas, null, desc.splpoints);
splinegon (path.canvas, null, desc.splpoints);
text (path.canvas, null,
['x' = desc.wrect[0].x + 1; 'y' = desc.wrect[0].y + 10;],
concat (tail, ' -> ', head), 'fixed', 14, 'lc');
};
path.redraw = function (data) {
path.drawdesc (path.desc);
};
path.keyup = function (data) {
if (data.key == 'n') {
clear (path.canvas);
if ((path.desc = path.readdesc ()))
path.drawdesc (path.desc);
} else if (data.key == ' ')
path.redraw (data);
};
path.init ();
monitorfile = function (data) {
echo (111);
if (~(tail = readline (0))) {
echo ('eof1');
exit ();
}
echo (222);
if (~(head = readline (0))) {
echo ('eof2');
exit ();
}
echo (head);
echo (333);
for (i in path.descs) {
desc = path.descs[i];
if (desc.tail == tail & desc.head == head) {
echo (111122222);
path.drawdesc (desc);
break;
}
}
echo (444);
};
monitor ('on', 0);
|