1 | !include once #1007377 // Traits for CAL |
2 | |
3 | please include function webToCAL_visStructures. |
4 | |
5 | !include once #1010264 // x and y for WebNode |
6 | |
7 | sclass WebToCAL {
|
8 | Web web; |
9 | BufferedImage img = newBufferedImage(20, 20, Color.white); |
10 | new CirclesAndLines cal; |
11 | new Map<WebNode, Circle> map; |
12 | //new Map<Pair<WebNode>, Line> lines; |
13 | |
14 | S makeLabel(Lisp lisp) {
|
15 | ifndef noCLParse |
16 | if (web.useCLParse) ret conceptLanguageToEnglish(clUnparse(lisp)); |
17 | endifndef |
18 | ret or(lispHead(lisp), "[null]"; |
19 | } |
20 | |
21 | void convert(final Web web) {
|
22 | this.web = web; |
23 | cal.title = web.title; |
24 | |
25 | L<WebNode> nodes = web.nodes; |
26 | nodes = listMinusSet(nodes, web_relationObjects(web)); |
27 | for (WebNode node : nodes) {
|
28 | double x = node.x, y = node.y; |
29 | if (x == 0 && y == 0) {
|
30 | x = cal_randomCircleCoord(); |
31 | y = cal_randomCircleCoord(); |
32 | } |
33 | //print("Circle " + node.text() + " pos: " + x + "/" + y);
|
34 | |
35 | S text = makeLabel(first(node.labels())); |
36 | S quickvis = null; |
37 | if (node.visInfo() instanceof S) quickvis = (S) node.visInfo(); |
38 | if (empty(quickvis)) quickvis = webToCAL_visMap.get(text); |
39 | |
40 | Circle c; |
41 | if (nempty(quickvis)) |
42 | c = cal.circle_autoVis(text, quickvis, x, y); |
43 | else |
44 | c = cal.circle(img, x, y, text); |
45 | map.put(node, c); |
46 | for (Lisp l : dropFirst(node.labels())) |
47 | c.addTrait(makeLabel(l)); |
48 | } |
49 | |
50 | for (Pair<WebNode> p : web_relations(web)) {
|
51 | WebNode rel = web.getRelation(p); |
52 | if (empty(rel.labels())) continue; |
53 | Circle a = map.get(p.a), b = map.get(p.b); |
54 | if (a == null || b == null) {
|
55 | warn("webToCAL: Circle not found");
|
56 | continue; |
57 | } |
58 | if (a == b) continue; // TODO |
59 | /*Line line = lines.get(p); |
60 | if (line == null) |
61 | lines.put(p,*/ |
62 | Line line = cal.arrow(a, makeLabel(first(rel.labels())), b); |
63 | for (Lisp l : dropFirst(rel.labels())) |
64 | line.addTrait(makeLabel(l)); |
65 | } |
66 | |
67 | cal.onUserMadeCircle = voidfunc(Circle c) {
|
68 | map.put(web.newNode(c.text), c); |
69 | }; |
70 | |
71 | cal.onDeleteCircle = voidfunc(Circle c) {
|
72 | web.removeNode(reverseLookup(map, c)); |
73 | }; |
74 | |
75 | cal.onDeleteLine = voidfunc(Line l) {
|
76 | web.removeRelation(reverseLookup(map, l.a), reverseLookup(map, l.b)); |
77 | }; |
78 | |
79 | cal.onUserMadeArrow = voidfunc(Arrow a) {
|
80 | web.getRelation(reverseLookup(map, a.a), reverseLookup(map, a.b)).addLabel(a.text); |
81 | }; |
82 | |
83 | cal.onLayoutChange = voidfunc(Circle c) {
|
84 | WebNode node = reverseLookup(map, c); |
85 | //print("layout change: " + c.text + " " + (node != null));
|
86 | updateLayout(node); |
87 | }; |
88 | |
89 | cal.onFullLayoutChange = r {
|
90 | //print("full layout change");
|
91 | for (WebNode web : keys(map)) |
92 | updateLayout(web); |
93 | }; |
94 | } |
95 | |
96 | void updateLayout(WebNode node) {
|
97 | if (node == null) ret; |
98 | Circle c = map.get(node); |
99 | if (c == null) ret; |
100 | node.x = c.x; |
101 | node.y = c.y; // TODO: persist? |
102 | } |
103 | } |
104 | |
105 | static CirclesAndLines webToCAL(WebNode node) {
|
106 | ret webToCAL(node.web); |
107 | } |
108 | |
109 | static CirclesAndLines webToCAL(Web web) {
|
110 | new WebToCAL wtc; |
111 | wtc.convert(web); |
112 | ret wtc.cal; |
113 | } |
114 | |
115 | static void webToCAL(Web web, CirclesAndLines cal, Canvas canvas) {
|
116 | copyCAL(webToCAL(web), cal); |
117 | canvas.update(); |
118 | } |
download show line numbers debug dex old transpilations
Travelled to 14 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1007792 |
| Snippet name: | webToCAL |
| Eternal ID of this version: | #1007792/41 |
| Text MD5: | 5610e5fe1fd696bf1baad31624378938 |
| Author: | stefan |
| Category: | javax / a.i. |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2017-11-27 22:44:05 |
| Source code size: | 3395 bytes / 118 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 1050 / 1039 |
| Version history: | 40 change(s) |
| Referenced in: | [show references] |