mirror of
https://github.com/octoleo/plantuml.git
synced 2024-12-22 10:59:01 +00:00
fix: partially improve smetana code
https://forum.plantuml.net/17600/note-and-position-not-rendering-correctly-on-cheerpj
This commit is contained in:
parent
9adc8dd067
commit
ba0fd1efb4
@ -83,6 +83,7 @@ import static smetana.core.Macro.GRAPH_LABEL;
|
|||||||
import static smetana.core.Macro.GVBEGIN;
|
import static smetana.core.Macro.GVBEGIN;
|
||||||
import static smetana.core.Macro.LABEL_AT_BOTTOM;
|
import static smetana.core.Macro.LABEL_AT_BOTTOM;
|
||||||
import static smetana.core.Macro.LABEL_AT_TOP;
|
import static smetana.core.Macro.LABEL_AT_TOP;
|
||||||
|
import static smetana.core.Macro.LEFT_IX;
|
||||||
import static smetana.core.Macro.LOCAL;
|
import static smetana.core.Macro.LOCAL;
|
||||||
import static smetana.core.Macro.LT_HTML;
|
import static smetana.core.Macro.LT_HTML;
|
||||||
import static smetana.core.Macro.LT_NONE;
|
import static smetana.core.Macro.LT_NONE;
|
||||||
@ -92,12 +93,15 @@ import static smetana.core.Macro.NOCLUST;
|
|||||||
import static smetana.core.Macro.NODENAME_ESC;
|
import static smetana.core.Macro.NODENAME_ESC;
|
||||||
import static smetana.core.Macro.PAD;
|
import static smetana.core.Macro.PAD;
|
||||||
import static smetana.core.Macro.POINTS;
|
import static smetana.core.Macro.POINTS;
|
||||||
|
import static smetana.core.Macro.RANKDIR_LR;
|
||||||
import static smetana.core.Macro.RANKDIR_TB;
|
import static smetana.core.Macro.RANKDIR_TB;
|
||||||
|
import static smetana.core.Macro.RIGHT_IX;
|
||||||
import static smetana.core.Macro.TOP_IX;
|
import static smetana.core.Macro.TOP_IX;
|
||||||
import static smetana.core.Macro.UNSUPPORTED;
|
import static smetana.core.Macro.UNSUPPORTED;
|
||||||
import static smetana.core.Macro.agfindedgeattr;
|
import static smetana.core.Macro.agfindedgeattr;
|
||||||
import static smetana.core.Macro.agfindgraphattr;
|
import static smetana.core.Macro.agfindgraphattr;
|
||||||
import static smetana.core.Macro.agfindnodeattr;
|
import static smetana.core.Macro.agfindnodeattr;
|
||||||
|
import static smetana.core.Macro.streq;
|
||||||
import static smetana.core.debug.SmetanaDebug.ENTERING;
|
import static smetana.core.debug.SmetanaDebug.ENTERING;
|
||||||
import static smetana.core.debug.SmetanaDebug.LEAVING;
|
import static smetana.core.debug.SmetanaDebug.LEAVING;
|
||||||
|
|
||||||
@ -254,12 +258,12 @@ UNSUPPORTED("abkxekvux4nramryfw2e8vcru"); // putenv(buf);
|
|||||||
*/
|
*/
|
||||||
rankdir = RANKDIR_TB;
|
rankdir = RANKDIR_TB;
|
||||||
if ((p = agget(zz, g, new CString("rankdir")))!=null) {
|
if ((p = agget(zz, g, new CString("rankdir")))!=null) {
|
||||||
UNSUPPORTED("sp7zcza7w0dn7t66aj8rf4wn"); // if ((*(p)==*("LR")&&!strcmp(p,"LR")))
|
if (streq(p, "LR"))
|
||||||
UNSUPPORTED("bjd2vk1jssqehllmgnqv601qd"); // rankdir = 1;
|
rankdir = RANKDIR_LR;
|
||||||
UNSUPPORTED("ry8itlrmblmuegdwk1iu1t0x"); // else if ((*(p)==*("BT")&&!strcmp(p,"BT")))
|
//UNSUPPORTED("ry8itlrmblmuegdwk1iu1t0x"); // else if ((*(p)==*("BT")&&!strcmp(p,"BT")))
|
||||||
UNSUPPORTED("5hno0xn18yt443qg815w3c2s2"); // rankdir = 2;
|
//UNSUPPORTED("5hno0xn18yt443qg815w3c2s2"); // rankdir = 2;
|
||||||
UNSUPPORTED("aal39mi047mhafrsrxoutcffk"); // else if ((*(p)==*("RL")&&!strcmp(p,"RL")))
|
//UNSUPPORTED("aal39mi047mhafrsrxoutcffk"); // else if ((*(p)==*("RL")&&!strcmp(p,"RL")))
|
||||||
UNSUPPORTED("7vlda224wrgcdhr0ts3mndh5q"); // rankdir = 3;
|
//UNSUPPORTED("7vlda224wrgcdhr0ts3mndh5q"); // rankdir = 3;
|
||||||
}
|
}
|
||||||
if (use_rankdir)
|
if (use_rankdir)
|
||||||
GD_rankdir2(g, (rankdir << 2) | rankdir);
|
GD_rankdir2(g, (rankdir << 2) | rankdir);
|
||||||
@ -487,13 +491,12 @@ UNSUPPORTED("evu9w6pw3kkh7z8w7t4rx4qxc"); // pos_flag |= 4;
|
|||||||
GD_border(sg)[pos_ix].___(dimen);
|
GD_border(sg)[pos_ix].___(dimen);
|
||||||
} else {
|
} else {
|
||||||
/* when rotated, the labels will be restored to TOP or BOTTOM */
|
/* when rotated, the labels will be restored to TOP or BOTTOM */
|
||||||
UNSUPPORTED("cabz6xbjdvz5vmjulzrhlxh48"); // if ((((Agraphinfo_t*)(((Agobj_t*)(sg))->data))->label_pos) & 1)
|
if ((GD_label_pos(sg) & LABEL_AT_TOP)!=0)
|
||||||
UNSUPPORTED("dx7v6663o9o0x1j5r8z4wumxb"); // pos_ix = 1;
|
pos_ix = RIGHT_IX;
|
||||||
UNSUPPORTED("5c97f6vfxny0zz35l2bu4maox"); // else
|
else
|
||||||
UNSUPPORTED("97dtv6k7yw1qvfzgs65cj2v0l"); // pos_ix = 3;
|
pos_ix = LEFT_IX;
|
||||||
UNSUPPORTED("21iuie8b11x65je8vampstgt6"); // (((Agraphinfo_t*)(((Agobj_t*)(sg))->data))->border)[pos_ix].x = dimen.y;
|
GD_border(sg)[pos_ix].x = dimen.y;
|
||||||
UNSUPPORTED("8cawl3kik853hkvgm39y34urs"); // (((Agraphinfo_t*)(((Agobj_t*)(sg))->data))->border)[pos_ix].y = dimen.x;
|
GD_border(sg)[pos_ix].y = dimen.x; }
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
LEAVING("5vks1zdadu5vjinaivs0j2bkb","do_graph_label");
|
LEAVING("5vks1zdadu5vjinaivs0j2bkb","do_graph_label");
|
||||||
|
@ -57,6 +57,7 @@ import static gen.lib.cgraph.obj__c.agroot;
|
|||||||
import static gen.lib.common.geom__c.ccwrotatepf;
|
import static gen.lib.common.geom__c.ccwrotatepf;
|
||||||
import static gen.lib.common.splines__c.edgeMidpoint;
|
import static gen.lib.common.splines__c.edgeMidpoint;
|
||||||
import static gen.lib.common.splines__c.getsplinepoints;
|
import static gen.lib.common.splines__c.getsplinepoints;
|
||||||
|
import static gen.lib.common.utils__c.gv_nodesize;
|
||||||
import static gen.lib.common.utils__c.late_bool;
|
import static gen.lib.common.utils__c.late_bool;
|
||||||
import static gen.lib.common.utils__c.updateBB;
|
import static gen.lib.common.utils__c.updateBB;
|
||||||
import static gen.lib.label.xlabels__c.placeLabels;
|
import static gen.lib.label.xlabels__c.placeLabels;
|
||||||
@ -84,12 +85,22 @@ import static smetana.core.Macro.GD_rankdir;
|
|||||||
import static smetana.core.Macro.GRAPH_LABEL;
|
import static smetana.core.Macro.GRAPH_LABEL;
|
||||||
import static smetana.core.Macro.HEAD_LABEL;
|
import static smetana.core.Macro.HEAD_LABEL;
|
||||||
import static smetana.core.Macro.IGNORED;
|
import static smetana.core.Macro.IGNORED;
|
||||||
|
import static smetana.core.Macro.INCH2PS;
|
||||||
import static smetana.core.Macro.INT_MAX;
|
import static smetana.core.Macro.INT_MAX;
|
||||||
|
import static smetana.core.Macro.LABEL_AT_LEFT;
|
||||||
|
import static smetana.core.Macro.LABEL_AT_RIGHT;
|
||||||
|
import static smetana.core.Macro.LABEL_AT_TOP;
|
||||||
|
import static smetana.core.Macro.LEFT_IX;
|
||||||
import static smetana.core.Macro.ND_coord;
|
import static smetana.core.Macro.ND_coord;
|
||||||
import static smetana.core.Macro.ND_height;
|
import static smetana.core.Macro.ND_height;
|
||||||
import static smetana.core.Macro.ND_width;
|
import static smetana.core.Macro.ND_width;
|
||||||
import static smetana.core.Macro.ND_xlabel;
|
import static smetana.core.Macro.ND_xlabel;
|
||||||
import static smetana.core.Macro.NODE_XLABEL;
|
import static smetana.core.Macro.NODE_XLABEL;
|
||||||
|
import static smetana.core.Macro.RANKDIR_BT;
|
||||||
|
import static smetana.core.Macro.RANKDIR_LR;
|
||||||
|
import static smetana.core.Macro.RANKDIR_RL;
|
||||||
|
import static smetana.core.Macro.RANKDIR_TB;
|
||||||
|
import static smetana.core.Macro.RIGHT_IX;
|
||||||
import static smetana.core.Macro.TAIL_LABEL;
|
import static smetana.core.Macro.TAIL_LABEL;
|
||||||
import static smetana.core.Macro.UNSUPPORTED;
|
import static smetana.core.Macro.UNSUPPORTED;
|
||||||
import static smetana.core.debug.SmetanaDebug.ENTERING;
|
import static smetana.core.debug.SmetanaDebug.ENTERING;
|
||||||
@ -196,9 +207,9 @@ try {
|
|||||||
int c;
|
int c;
|
||||||
final ST_boxf bb = new ST_boxf(), new_bb = new ST_boxf();
|
final ST_boxf bb = new ST_boxf(), new_bb = new ST_boxf();
|
||||||
bb.___(GD_bb(g));
|
bb.___(GD_bb(g));
|
||||||
if (rankdir == 1 || rankdir == 2) {
|
if (rankdir == RANKDIR_LR || rankdir == RANKDIR_BT) {
|
||||||
UNSUPPORTED("d4wrtj0h7lkb0e0vernd9czq9"); // new_bb.LL = map_point(pointfof(bb.LL.x, bb.UR.y));
|
new_bb.LL.___(map_point(zz, pointfof(bb.LL.x, bb.UR.y)));
|
||||||
UNSUPPORTED("crysiae5zxc69cj3v2ygfs8xn"); // new_bb.UR = map_point(pointfof(bb.UR.x, bb.LL.y));
|
new_bb.UR.___(map_point(zz, pointfof(bb.UR.x, bb.LL.y)));
|
||||||
} else {
|
} else {
|
||||||
new_bb.LL.___(map_point(zz, pointfof(bb.LL.x, bb.LL.y)));
|
new_bb.LL.___(map_point(zz, pointfof(bb.LL.x, bb.LL.y)));
|
||||||
new_bb.UR.___(map_point(zz, pointfof(bb.UR.x, bb.UR.y)));
|
new_bb.UR.___(map_point(zz, pointfof(bb.UR.x, bb.UR.y)));
|
||||||
@ -231,7 +242,7 @@ try {
|
|||||||
return;
|
return;
|
||||||
for (v = agfstnode(zz, g); v!=null; v = agnxtnode(zz, g, v)) {
|
for (v = agfstnode(zz, g); v!=null; v = agnxtnode(zz, g, v)) {
|
||||||
if (zz.Rankdir!=0)
|
if (zz.Rankdir!=0)
|
||||||
UNSUPPORTED("e0j848r4j1j7sojfht5gwikvi"); // gv_nodesize(v, 0);
|
gv_nodesize(v, false);
|
||||||
ND_coord(v).___(map_point(zz, ND_coord(v)));
|
ND_coord(v).___(map_point(zz, ND_coord(v)));
|
||||||
if (ND_xlabel(v)!=null)
|
if (ND_xlabel(v)!=null)
|
||||||
UNSUPPORTED("3fy0l7w2v24hzrvlpstpknwl7"); // ND_xlabel(v)->pos = map_point(ND_xlabel(v)->pos);
|
UNSUPPORTED("3fy0l7w2v24hzrvlpstpknwl7"); // ND_xlabel(v)->pos = map_point(ND_xlabel(v)->pos);
|
||||||
@ -393,8 +404,8 @@ private static void addXLabel_(Globals zz, ST_textlabel_t lp, CArray<ST_object_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (zz.Flip) {
|
if (zz.Flip) {
|
||||||
UNSUPPORTED("99tzt7erbvtfsbo0jbdz0lc8m"); // xlp->sz.x = lp->dimen.y;
|
xlp.get__(0).sz.x = lp.dimen.y;
|
||||||
UNSUPPORTED("6v5t3ysaisj27bwc0r9zg3rpd"); // xlp->sz.y = lp->dimen.x;
|
xlp.get__(0).sz.y = lp.dimen.x;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
xlp.get__(0).sz.___(lp.dimen);
|
xlp.get__(0).sz.___(lp.dimen);
|
||||||
@ -425,8 +436,8 @@ private static ST_boxf addLabelObj_(Globals zz, ST_textlabel_t lp, CArray<ST_obj
|
|||||||
ENTERING("dwxd5kvlanbcxqfuncjg0ea54","addLabelObj");
|
ENTERING("dwxd5kvlanbcxqfuncjg0ea54","addLabelObj");
|
||||||
try {
|
try {
|
||||||
if (zz.Flip) {
|
if (zz.Flip) {
|
||||||
UNSUPPORTED("6z2yrwq81gtsk3q9c5pofow1x"); // objp->sz.x = lp->dimen.y;
|
objp.get__(0).sz.x = lp.dimen.y;
|
||||||
UNSUPPORTED("8xsm9kavrekjrsydqe1wh1pu"); // objp->sz.y = lp->dimen.x;
|
objp.get__(0).sz.y = lp.dimen.x;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
objp.get__(0).sz.x = lp.dimen.x;
|
objp.get__(0).sz.x = lp.dimen.x;
|
||||||
@ -459,12 +470,12 @@ public static ST_boxf addNodeObj_(Globals zz, ST_Agnode_s np, CArray<ST_object_t
|
|||||||
ENTERING("b8tjygxnwny5qoiir1mha1d62","addNodeObj");
|
ENTERING("b8tjygxnwny5qoiir1mha1d62","addNodeObj");
|
||||||
try {
|
try {
|
||||||
if (zz.Flip) {
|
if (zz.Flip) {
|
||||||
UNSUPPORTED("1ri5uimcd1z58iix8tp528l1m"); // objp->sz.x = ((ND_height(np))*(double)72);
|
objp.get__(0).sz.x = INCH2PS(ND_height(np));
|
||||||
UNSUPPORTED("6r5gwwhz3sjxrssh8yo3v5c3v"); // objp->sz.y = ((ND_width(np))*(double)72);
|
objp.get__(0).sz.y = INCH2PS(ND_width(np));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
objp.get__(0).sz.x = ((ND_width(np))*(double)72);
|
objp.get__(0).sz.x = INCH2PS(ND_width(np));
|
||||||
objp.get__(0).sz.y = ((ND_height(np))*(double)72);
|
objp.get__(0).sz.y = INCH2PS(ND_height(np));
|
||||||
}
|
}
|
||||||
objp.get__(0).pos.___(ND_coord(np));
|
objp.get__(0).pos.___(ND_coord(np));
|
||||||
objp.get__(0).pos.x -= (objp.get__(0).sz.x) / 2.0;
|
objp.get__(0).pos.x -= (objp.get__(0).sz.x) / 2.0;
|
||||||
@ -748,7 +759,7 @@ try {
|
|||||||
zz.Flip = GD_flip(g);
|
zz.Flip = GD_flip(g);
|
||||||
/* Handle cluster labels */
|
/* Handle cluster labels */
|
||||||
if (zz.Flip)
|
if (zz.Flip)
|
||||||
UNSUPPORTED("4hxky2sp978rmy6018sfmts6m"); // place_flip_graph_label(g);
|
place_flip_graph_label(g);
|
||||||
else
|
else
|
||||||
place_graph_label(g);
|
place_graph_label(g);
|
||||||
/* Everything has been placed except the root graph label, if any.
|
/* Everything has been placed except the root graph label, if any.
|
||||||
@ -793,16 +804,16 @@ UNSUPPORTED("flupwh3kosf3fkhkxllllt1"); // }
|
|||||||
}
|
}
|
||||||
if (allowTranslation!=0) {
|
if (allowTranslation!=0) {
|
||||||
switch (zz.Rankdir) {
|
switch (zz.Rankdir) {
|
||||||
case 0:
|
case RANKDIR_TB:
|
||||||
zz.Offset.___(GD_bb(g).LL);
|
zz.Offset.___(GD_bb(g).LL);
|
||||||
break;
|
break;
|
||||||
case 1:
|
case RANKDIR_LR:
|
||||||
UNSUPPORTED("5t3j9lrc86kd5ouaqgzvz3qcm"); // Offset = pointfof(-GD_bb(g).UR.y, GD_bb(g).LL.x);
|
zz.Offset.___(pointfof(-GD_bb(g).UR.y, GD_bb(g).LL.x));
|
||||||
break;
|
break;
|
||||||
case 2:
|
case RANKDIR_BT:
|
||||||
UNSUPPORTED("96ajwnh79ja9g57xmut6dmh9d"); // Offset = pointfof(GD_bb(g).LL.x, -GD_bb(g).UR.y);
|
UNSUPPORTED("96ajwnh79ja9g57xmut6dmh9d"); // Offset = pointfof(GD_bb(g).LL.x, -GD_bb(g).UR.y);
|
||||||
break;
|
break;
|
||||||
case 3:
|
case RANKDIR_RL:
|
||||||
UNSUPPORTED("3xtu7zkpqq7nsx9oe68oi6ebt"); // Offset = pointfof(GD_bb(g).LL.y, GD_bb(g).LL.x);
|
UNSUPPORTED("3xtu7zkpqq7nsx9oe68oi6ebt"); // Offset = pointfof(GD_bb(g).LL.y, GD_bb(g).LL.x);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -843,6 +854,48 @@ LEAVING("3qbbvlnq1b06ylgr0yj2slbhm","dotneato_postprocess");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* place_flip_graph_label:
|
||||||
|
* Put cluster labels recursively in the flip case.
|
||||||
|
*/
|
||||||
|
//3 ehe7n8wkl4thn86tisjzdotpq
|
||||||
|
//static void place_flip_graph_label(graph_t * g)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/common/postproc.c", name="place_flip_graph_label", key="ehe7n8wkl4thn86tisjzdotpq", definition="static void place_flip_graph_label(graph_t * g)")
|
||||||
|
public static void place_flip_graph_label(ST_Agraph_s g) {
|
||||||
|
ENTERING("3zsjtcmcfxhkmaagi0on4dy20","place_flip_graph_label");
|
||||||
|
try {
|
||||||
|
int c;
|
||||||
|
final ST_pointf p = new ST_pointf(), d = new ST_pointf();
|
||||||
|
|
||||||
|
if ((g != agroot(g)) && (GD_label(g)!=null) && GD_label(g).set==0) {
|
||||||
|
if ((GD_label_pos(g) & LABEL_AT_TOP)!=0) {
|
||||||
|
d.___(GD_border(g)[RIGHT_IX]);
|
||||||
|
p.x = GD_bb(g).UR.x - d.x / 2;
|
||||||
|
} else {
|
||||||
|
d.___(GD_border(g)[LEFT_IX]);
|
||||||
|
p.x = GD_bb(g).LL.x + d.x / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((GD_label_pos(g) & LABEL_AT_RIGHT)!=0) {
|
||||||
|
p.y = GD_bb(g).LL.y + d.y / 2;
|
||||||
|
} else if ((GD_label_pos(g) & LABEL_AT_LEFT)!=0) {
|
||||||
|
p.y = GD_bb(g).UR.y - d.y / 2;
|
||||||
|
} else {
|
||||||
|
p.y = (GD_bb(g).LL.y + GD_bb(g).UR.y) / 2;
|
||||||
|
}
|
||||||
|
GD_label(g).pos.___(p);
|
||||||
|
GD_label(g).set = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (c = 1; c <= GD_n_cluster(g); c++)
|
||||||
|
place_flip_graph_label(GD_clust(g).get_(c));
|
||||||
|
} finally {
|
||||||
|
LEAVING("72zw1alhd5vd0g6mhum507rvx", "place_graph_label");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -700,8 +700,8 @@ UNSUPPORTED("6t98dcecgbvbvtpycwiq2ynnj"); // }
|
|||||||
} else {
|
} else {
|
||||||
/* get point and node size adjusted for rankdir=LR */
|
/* get point and node size adjusted for rankdir=LR */
|
||||||
if (GD_flip(agraphof(n))) {
|
if (GD_flip(agraphof(n))) {
|
||||||
UNSUPPORTED("dapvd4c0ggliaqcj08jvao221"); // ysize = ND_lw(n) + ND_rw(n);
|
zz.ysize = ND_lw(n) + ND_rw(n);
|
||||||
UNSUPPORTED("8t3g4d9acruono62leh5a8hxh"); // xsize = ND_ht(n);
|
zz.xsize = ND_ht(n);
|
||||||
} else {
|
} else {
|
||||||
zz.xsize = ND_lw(n) + ND_rw(n);
|
zz.xsize = ND_lw(n) + ND_rw(n);
|
||||||
zz.ysize = ND_ht(n);
|
zz.ysize = ND_ht(n);
|
||||||
|
@ -208,7 +208,8 @@ try {
|
|||||||
rv.ncols = j;
|
rv.ncols = j;
|
||||||
// Arnaud 15/09/2022: the j+1 is needed in some case to avoid ArrayIndexOutOfBoundsException
|
// Arnaud 15/09/2022: the j+1 is needed in some case to avoid ArrayIndexOutOfBoundsException
|
||||||
// Arnaud 02/03/2023: the j+3 is needed in some case to avoid ArrayIndexOutOfBoundsException
|
// Arnaud 02/03/2023: the j+3 is needed in some case to avoid ArrayIndexOutOfBoundsException
|
||||||
rv.data = new int[i][j+3]; // Or maybe new int[j][i] ?
|
// Arnaud 15/03/2023: the i+3 is needed in some case to avoid ArrayIndexOutOfBoundsException when LR direction
|
||||||
|
rv.data = new int[i+3][j+3]; // Or maybe new int[j][i] ?
|
||||||
return rv;
|
return rv;
|
||||||
} finally {
|
} finally {
|
||||||
LEAVING("756bre1tpxb1tq68p7xhkrxkc","new_matrix");
|
LEAVING("756bre1tpxb1tq68p7xhkrxkc","new_matrix");
|
||||||
|
@ -96,6 +96,7 @@ import static smetana.core.Macro.GD_ranksep;
|
|||||||
import static smetana.core.Macro.GD_rn;
|
import static smetana.core.Macro.GD_rn;
|
||||||
import static smetana.core.Macro.INT_MAX;
|
import static smetana.core.Macro.INT_MAX;
|
||||||
import static smetana.core.Macro.LEAFSET;
|
import static smetana.core.Macro.LEAFSET;
|
||||||
|
import static smetana.core.Macro.LEFT_IX;
|
||||||
import static smetana.core.Macro.M_aghead;
|
import static smetana.core.Macro.M_aghead;
|
||||||
import static smetana.core.Macro.M_agtail;
|
import static smetana.core.Macro.M_agtail;
|
||||||
import static smetana.core.Macro.ND_UF_size;
|
import static smetana.core.Macro.ND_UF_size;
|
||||||
@ -120,6 +121,7 @@ import static smetana.core.Macro.ND_ranktype;
|
|||||||
import static smetana.core.Macro.ND_rw;
|
import static smetana.core.Macro.ND_rw;
|
||||||
import static smetana.core.Macro.ND_save_in;
|
import static smetana.core.Macro.ND_save_in;
|
||||||
import static smetana.core.Macro.ND_save_out;
|
import static smetana.core.Macro.ND_save_out;
|
||||||
|
import static smetana.core.Macro.RIGHT_IX;
|
||||||
import static smetana.core.Macro.ROUND;
|
import static smetana.core.Macro.ROUND;
|
||||||
import static smetana.core.Macro.TOP_IX;
|
import static smetana.core.Macro.TOP_IX;
|
||||||
import static smetana.core.Macro.UNSUPPORTED;
|
import static smetana.core.Macro.UNSUPPORTED;
|
||||||
@ -163,6 +165,389 @@ import smetana.core.ZType;
|
|||||||
public class position__c {
|
public class position__c {
|
||||||
|
|
||||||
|
|
||||||
|
//3 ciez0pfggxdljedzsbklq49f0
|
||||||
|
// static inline point pointof(int x, int y)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="pointof", key="ciez0pfggxdljedzsbklq49f0", definition="static inline point pointof(int x, int y)")
|
||||||
|
public static Object pointof(Object... arg) {
|
||||||
|
UNSUPPORTED("8e4tj258yvfq5uhsdpk37n5eq"); // static inline point pointof(int x, int y)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c0j3k9xv06332q98k2pgpacto"); // point r;
|
||||||
|
UNSUPPORTED("12jimkrzqxavaie0cpapbx18c"); // r.x = x;
|
||||||
|
UNSUPPORTED("7ivmviysahgsc5nn9gtp7q2if"); // r.y = y;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 7cufnfitrh935ew093mw0i4b7
|
||||||
|
// static inline box boxof(int llx, int lly, int urx, int ury)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="boxof", key="7cufnfitrh935ew093mw0i4b7", definition="static inline box boxof(int llx, int lly, int urx, int ury)")
|
||||||
|
public static Object boxof(Object... arg) {
|
||||||
|
UNSUPPORTED("3lzesfdd337h31jrlib1czocm"); // static inline box boxof(int llx, int lly, int urx, int ury)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("52u27kayecy1i1e8bbo8f7s9r"); // box b;
|
||||||
|
UNSUPPORTED("cylhjlutoc0sc0uy7g98m9fb8"); // b.LL.x = llx, b.LL.y = lly;
|
||||||
|
UNSUPPORTED("242of6revxzx8hpe7yerrchz6"); // b.UR.x = urx, b.UR.y = ury;
|
||||||
|
UNSUPPORTED("2vmm1j57brhn455f8f3iyw6mo"); // return b;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 1n5xl70wxuabyf97mclvilsm6
|
||||||
|
// static inline point add_point(point p, point q)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="add_point", key="1n5xl70wxuabyf97mclvilsm6", definition="static inline point add_point(point p, point q)")
|
||||||
|
public static Object add_point(Object... arg) {
|
||||||
|
UNSUPPORTED("6iamka1fx8fk1rohzzse8phte"); // static inline point add_point(point p, point q)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c0j3k9xv06332q98k2pgpacto"); // point r;
|
||||||
|
UNSUPPORTED("3n2sizjd0civbzm6iq7su1s2p"); // r.x = p.x + q.x;
|
||||||
|
UNSUPPORTED("65ygdo31w09i5i6bd2f7azcd3"); // r.y = p.y + q.y;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 ai2dprak5y6obdsflguh5qbd7
|
||||||
|
// static inline point sub_point(point p, point q)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="sub_point", key="ai2dprak5y6obdsflguh5qbd7", definition="static inline point sub_point(point p, point q)")
|
||||||
|
public static Object sub_point(Object... arg) {
|
||||||
|
UNSUPPORTED("cd602849h0bce8lu9xegka0ia"); // static inline point sub_point(point p, point q)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c0j3k9xv06332q98k2pgpacto"); // point r;
|
||||||
|
UNSUPPORTED("4q4q9dveah93si8ajfv59gz27"); // r.x = p.x - q.x;
|
||||||
|
UNSUPPORTED("9f90ik0o2yqhanzntpy3d2ydy"); // r.y = p.y - q.y;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 16f6pyogcv3j7n2p0n8giqqgh
|
||||||
|
// static inline pointf sub_pointf(pointf p, pointf q)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="sub_pointf", key="16f6pyogcv3j7n2p0n8giqqgh", definition="static inline pointf sub_pointf(pointf p, pointf q)")
|
||||||
|
public static Object sub_pointf(Object... arg) {
|
||||||
|
UNSUPPORTED("dmufj44lddsnj0wjyxsg2fcso"); // static inline pointf sub_pointf(pointf p, pointf q)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("cvexv13y9fq49v0j4d5t4cm9f"); // pointf r;
|
||||||
|
UNSUPPORTED("4q4q9dveah93si8ajfv59gz27"); // r.x = p.x - q.x;
|
||||||
|
UNSUPPORTED("9f90ik0o2yqhanzntpy3d2ydy"); // r.y = p.y - q.y;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 9k50jgrhc4f9824vf8ony74rw
|
||||||
|
// static inline point mid_point(point p, point q)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="mid_point", key="9k50jgrhc4f9824vf8ony74rw", definition="static inline point mid_point(point p, point q)")
|
||||||
|
public static Object mid_point(Object... arg) {
|
||||||
|
UNSUPPORTED("evy44tdsmu3erff9dp2x835u2"); // static inline point mid_point(point p, point q)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c0j3k9xv06332q98k2pgpacto"); // point r;
|
||||||
|
UNSUPPORTED("1a6p6fm57o0wt5ze2btsx06c7"); // r.x = (p.x + q.x) / 2;
|
||||||
|
UNSUPPORTED("1kbj5tgdmfi6kf4jgg6skhr6e"); // r.y = (p.y + q.y) / 2;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 59c4f7im0ftyowhnzzq2v9o1x
|
||||||
|
// static inline pointf mid_pointf(pointf p, pointf q)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="mid_pointf", key="59c4f7im0ftyowhnzzq2v9o1x", definition="static inline pointf mid_pointf(pointf p, pointf q)")
|
||||||
|
public static Object mid_pointf(Object... arg) {
|
||||||
|
UNSUPPORTED("381o63o9kb04d7gzg65v0r3q"); // static inline pointf mid_pointf(pointf p, pointf q)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("cvexv13y9fq49v0j4d5t4cm9f"); // pointf r;
|
||||||
|
UNSUPPORTED("c5vboetlr3mf43wns7iik6m1w"); // r.x = (p.x + q.x) / 2.;
|
||||||
|
UNSUPPORTED("bcdf562ldr3bjn78hcay5xd63"); // r.y = (p.y + q.y) / 2.;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 5r18p38gisvcx3zsvbb9saixx
|
||||||
|
// static inline pointf interpolate_pointf(double t, pointf p, pointf q)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="interpolate_pointf", key="5r18p38gisvcx3zsvbb9saixx", definition="static inline pointf interpolate_pointf(double t, pointf p, pointf q)")
|
||||||
|
public static Object interpolate_pointf(Object... arg) {
|
||||||
|
UNSUPPORTED("894yimn33kmtm454llwdaotu8"); // static inline pointf interpolate_pointf(double t, pointf p, pointf q)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("ef2acl8wa2ooqcb5vz3098maz"); // pointf r;
|
||||||
|
UNSUPPORTED("5tpwuyf5iidesy80v8o4nwkmk"); // r.x = p.x + t * (q.x - p.x);
|
||||||
|
UNSUPPORTED("ewnrc5uloj3w5jbmsjcn3wja0"); // r.y = p.y + t * (q.y - p.y);
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 bxzrv2ghq04qk5cbyy68s4mol
|
||||||
|
// static inline point exch_xy(point p)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="exch_xy", key="bxzrv2ghq04qk5cbyy68s4mol", definition="static inline point exch_xy(point p)")
|
||||||
|
public static Object exch_xy(Object... arg) {
|
||||||
|
UNSUPPORTED("2vxya0v2fzlv5e0vjaa8d414"); // static inline point exch_xy(point p)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c0j3k9xv06332q98k2pgpacto"); // point r;
|
||||||
|
UNSUPPORTED("60cojdwc2h7f0m51s9jdwvup7"); // r.x = p.y;
|
||||||
|
UNSUPPORTED("evp2x66oa4s1tlnc0ytxq2qbq"); // r.y = p.x;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 9lt3e03tac6h6sydljrcws8fd
|
||||||
|
// static inline pointf exch_xyf(pointf p)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="exch_xyf", key="9lt3e03tac6h6sydljrcws8fd", definition="static inline pointf exch_xyf(pointf p)")
|
||||||
|
public static Object exch_xyf(Object... arg) {
|
||||||
|
UNSUPPORTED("8qamrobrqi8jsvvfrxkimrsnw"); // static inline pointf exch_xyf(pointf p)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("cvexv13y9fq49v0j4d5t4cm9f"); // pointf r;
|
||||||
|
UNSUPPORTED("60cojdwc2h7f0m51s9jdwvup7"); // r.x = p.y;
|
||||||
|
UNSUPPORTED("evp2x66oa4s1tlnc0ytxq2qbq"); // r.y = p.x;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 8l9qhieokthntzdorlu5zn29b
|
||||||
|
// static inline box box_bb(box b0, box b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="box_bb", key="8l9qhieokthntzdorlu5zn29b", definition="static inline box box_bb(box b0, box b1)")
|
||||||
|
public static Object box_bb(Object... arg) {
|
||||||
|
UNSUPPORTED("36et5gmnjrby6o7bq9sgh1hx6"); // static inline box box_bb(box b0, box b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("52u27kayecy1i1e8bbo8f7s9r"); // box b;
|
||||||
|
UNSUPPORTED("8mr2c9xitsqi8z1plbp7ox1hu"); // b.LL.x = MIN(b0.LL.x, b1.LL.x);
|
||||||
|
UNSUPPORTED("2egu55ef4u1i03nwz01k7kcrl"); // b.LL.y = MIN(b0.LL.y, b1.LL.y);
|
||||||
|
UNSUPPORTED("9n6ei3odbgefwfxvql9whcpe"); // b.UR.x = MAX(b0.UR.x, b1.UR.x);
|
||||||
|
UNSUPPORTED("19ocysbuh4pxyft2bqhyhigr1"); // b.UR.y = MAX(b0.UR.y, b1.UR.y);
|
||||||
|
UNSUPPORTED("2vmm1j57brhn455f8f3iyw6mo"); // return b;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 clws9h3bbjm0lw3hexf8nl4c4
|
||||||
|
// static inline boxf boxf_bb(boxf b0, boxf b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="boxf_bb", key="clws9h3bbjm0lw3hexf8nl4c4", definition="static inline boxf boxf_bb(boxf b0, boxf b1)")
|
||||||
|
public static Object boxf_bb(Object... arg) {
|
||||||
|
UNSUPPORTED("dyrqu4ww9osr9c86gqgmifcp6"); // static inline boxf boxf_bb(boxf b0, boxf b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c57pq0f87j6dnbcvygu7v6k84"); // boxf b;
|
||||||
|
UNSUPPORTED("8mr2c9xitsqi8z1plbp7ox1hu"); // b.LL.x = MIN(b0.LL.x, b1.LL.x);
|
||||||
|
UNSUPPORTED("2egu55ef4u1i03nwz01k7kcrl"); // b.LL.y = MIN(b0.LL.y, b1.LL.y);
|
||||||
|
UNSUPPORTED("9n6ei3odbgefwfxvql9whcpe"); // b.UR.x = MAX(b0.UR.x, b1.UR.x);
|
||||||
|
UNSUPPORTED("19ocysbuh4pxyft2bqhyhigr1"); // b.UR.y = MAX(b0.UR.y, b1.UR.y);
|
||||||
|
UNSUPPORTED("2vmm1j57brhn455f8f3iyw6mo"); // return b;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 bit6ycxo1iqd2al92y8gkzlvb
|
||||||
|
// static inline box box_intersect(box b0, box b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="box_intersect", key="bit6ycxo1iqd2al92y8gkzlvb", definition="static inline box box_intersect(box b0, box b1)")
|
||||||
|
public static Object box_intersect(Object... arg) {
|
||||||
|
UNSUPPORTED("34gv28cldst09bl71itjgviue"); // static inline box box_intersect(box b0, box b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("52u27kayecy1i1e8bbo8f7s9r"); // box b;
|
||||||
|
UNSUPPORTED("9slu7bixuymxttjic76ha2nl2"); // b.LL.x = MAX(b0.LL.x, b1.LL.x);
|
||||||
|
UNSUPPORTED("3uv943c2f82yuif249pf5azob"); // b.LL.y = MAX(b0.LL.y, b1.LL.y);
|
||||||
|
UNSUPPORTED("74tf5h16bc9zabq3s3dyny543"); // b.UR.x = MIN(b0.UR.x, b1.UR.x);
|
||||||
|
UNSUPPORTED("d99gcv3i7xes7y7rqf8ii20ux"); // b.UR.y = MIN(b0.UR.y, b1.UR.y);
|
||||||
|
UNSUPPORTED("2vmm1j57brhn455f8f3iyw6mo"); // return b;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 8gfybie7k6pgb3o1a6llgpwng
|
||||||
|
// static inline boxf boxf_intersect(boxf b0, boxf b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="boxf_intersect", key="8gfybie7k6pgb3o1a6llgpwng", definition="static inline boxf boxf_intersect(boxf b0, boxf b1)")
|
||||||
|
public static Object boxf_intersect(Object... arg) {
|
||||||
|
UNSUPPORTED("ape22b8z6jfg17gvo42hok9eb"); // static inline boxf boxf_intersect(boxf b0, boxf b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("c57pq0f87j6dnbcvygu7v6k84"); // boxf b;
|
||||||
|
UNSUPPORTED("9slu7bixuymxttjic76ha2nl2"); // b.LL.x = MAX(b0.LL.x, b1.LL.x);
|
||||||
|
UNSUPPORTED("3uv943c2f82yuif249pf5azob"); // b.LL.y = MAX(b0.LL.y, b1.LL.y);
|
||||||
|
UNSUPPORTED("74tf5h16bc9zabq3s3dyny543"); // b.UR.x = MIN(b0.UR.x, b1.UR.x);
|
||||||
|
UNSUPPORTED("d99gcv3i7xes7y7rqf8ii20ux"); // b.UR.y = MIN(b0.UR.y, b1.UR.y);
|
||||||
|
UNSUPPORTED("2vmm1j57brhn455f8f3iyw6mo"); // return b;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 7z8j2quq65govaaejrz7b4cvb
|
||||||
|
// static inline int box_overlap(box b0, box b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="box_overlap", key="7z8j2quq65govaaejrz7b4cvb", definition="static inline int box_overlap(box b0, box b1)")
|
||||||
|
public static Object box_overlap(Object... arg) {
|
||||||
|
UNSUPPORTED("1e9k599x7ygct7r4cfdxlk9u9"); // static inline int box_overlap(box b0, box b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("7a9wwpu7dhdphd08y1ecw54w5"); // return OVERLAP(b0, b1);
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 4z0suuut2acsay5m8mg9dqjdu
|
||||||
|
// static inline int boxf_overlap(boxf b0, boxf b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="boxf_overlap", key="4z0suuut2acsay5m8mg9dqjdu", definition="static inline int boxf_overlap(boxf b0, boxf b1)")
|
||||||
|
public static Object boxf_overlap(Object... arg) {
|
||||||
|
UNSUPPORTED("905nejsewihwhhc3bhnrz9nwo"); // static inline int boxf_overlap(boxf b0, boxf b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("7a9wwpu7dhdphd08y1ecw54w5"); // return OVERLAP(b0, b1);
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 dd34swz5rmdgu3a2np2a4h1dy
|
||||||
|
// static inline int box_contains(box b0, box b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="box_contains", key="dd34swz5rmdgu3a2np2a4h1dy", definition="static inline int box_contains(box b0, box b1)")
|
||||||
|
public static Object box_contains(Object... arg) {
|
||||||
|
UNSUPPORTED("aputfc30fjkvy6jx4otljaczq"); // static inline int box_contains(box b0, box b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("87ap80vrh2a4gpprbxr33lrg3"); // return CONTAINS(b0, b1);
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 8laj1bspbu2i1cjd9upr7xt32
|
||||||
|
// static inline int boxf_contains(boxf b0, boxf b1)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="boxf_contains", key="8laj1bspbu2i1cjd9upr7xt32", definition="static inline int boxf_contains(boxf b0, boxf b1)")
|
||||||
|
public static Object boxf_contains(Object... arg) {
|
||||||
|
UNSUPPORTED("7ccnttkiwt834yfyw0evcm18v"); // static inline int boxf_contains(boxf b0, boxf b1)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("87ap80vrh2a4gpprbxr33lrg3"); // return CONTAINS(b0, b1);
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 4wf5swkz24xx51ja2dynbycu1
|
||||||
|
// static inline pointf perp (pointf p)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="perp", key="4wf5swkz24xx51ja2dynbycu1", definition="static inline pointf perp (pointf p)")
|
||||||
|
public static Object perp(Object... arg) {
|
||||||
|
UNSUPPORTED("567wpqlg9rv63ynyvxd9sgkww"); // static inline pointf perp (pointf p)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("cvexv13y9fq49v0j4d5t4cm9f"); // pointf r;
|
||||||
|
UNSUPPORTED("2fyydy6t6yifjsczccsb9szeg"); // r.x = -p.y;
|
||||||
|
UNSUPPORTED("evp2x66oa4s1tlnc0ytxq2qbq"); // r.y = p.x;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 6dtlpzv4mvgzb9o0b252yweuv
|
||||||
|
// static inline pointf scale (double c, pointf p)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="scale", key="6dtlpzv4mvgzb9o0b252yweuv", definition="static inline pointf scale (double c, pointf p)")
|
||||||
|
public static Object scale(Object... arg) {
|
||||||
|
UNSUPPORTED("c1ngytew34bmkdb7vps5h3dh8"); // static inline pointf scale (double c, pointf p)
|
||||||
|
UNSUPPORTED("erg9i1970wdri39osu8hx2a6e"); // {
|
||||||
|
UNSUPPORTED("cvexv13y9fq49v0j4d5t4cm9f"); // pointf r;
|
||||||
|
UNSUPPORTED("dznf7nac14snww4usquyd6r3r"); // r.x = c * p.x;
|
||||||
|
UNSUPPORTED("33kk73m8vjcux5tnjl8co2pe6"); // r.y = c * p.y;
|
||||||
|
UNSUPPORTED("a2hk6w52njqjx48nq3nnn2e5i"); // return r;
|
||||||
|
UNSUPPORTED("c24nfmv9i7o5eoqaymbibp7m7"); // }
|
||||||
|
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//3 6knxbdrmgk6294aw61s2lpvvf
|
//3 6knxbdrmgk6294aw61s2lpvvf
|
||||||
// static double largeMinlen (double l)
|
// static double largeMinlen (double l)
|
||||||
@ -865,6 +1250,113 @@ LEAVING("1oobmglea9t819y95xeel37h8","set_xcoords");
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//3 6mip7s1k9xt9tp6x6nnsbt34p
|
||||||
|
//static void adjustSimple(graph_t * g, int delta, int margin_total)
|
||||||
|
@Unused
|
||||||
|
@Original(version="2.38.0", path="lib/dotgen/position.c", name="adjustSimple", key="6mip7s1k9xt9tp6x6nnsbt34p", definition="static void adjustSimple(graph_t * g, int delta, int margin_total)")
|
||||||
|
public static void adjustSimple(ST_Agraph_s g, int delta, int margin_total) {
|
||||||
|
ENTERING("6b5zs45snahyh3bzod53vasjx", "adjustSimple");
|
||||||
|
try {
|
||||||
|
int r, bottom, deltop, delbottom;
|
||||||
|
ST_Agraph_s root = dot_root(g);
|
||||||
|
CArray<ST_rank_t> rank = GD_rank(root);
|
||||||
|
int maxr = GD_maxrank(g);
|
||||||
|
int minr = GD_minrank(g);
|
||||||
|
|
||||||
|
bottom = (delta+1) / 2;
|
||||||
|
delbottom = (int)(GD_ht1(g) + bottom - (rank.get__(maxr).ht1 - margin_total));
|
||||||
|
|
||||||
|
if (delbottom > 0) {
|
||||||
|
for (r = maxr; r >= minr; r--) {
|
||||||
|
if (rank.get__(r).n > 0)
|
||||||
|
ND_coord(rank.get__(r).v.get_(0)).y += delbottom;
|
||||||
|
}
|
||||||
|
deltop = (int)(GD_ht2(g) + (delta-bottom) + delbottom - (rank.get__(minr).ht2 - margin_total));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
deltop = (int)(GD_ht2(g) + (delta-bottom) - (rank.get__(minr).ht2 - margin_total));
|
||||||
|
if (deltop > 0) {
|
||||||
|
for (r = minr-1; r >= GD_minrank(root); r--) {
|
||||||
|
if (rank.get__(r).n > 0)
|
||||||
|
ND_coord(rank.get__(r).v.get_(0)).y += deltop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GD_ht2(g, GD_ht2(g) + (delta - bottom));
|
||||||
|
GD_ht1(g, GD_ht1(g) + bottom);
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
LEAVING("47ywar141vmwjartmboxs38cz", "adjustRanks");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* adjustRanks:
|
||||||
|
* Recursively adjust ranks to take into account
|
||||||
|
* wide cluster labels when rankdir=LR.
|
||||||
|
* We divide the extra space between the top and bottom.
|
||||||
|
* Adjust the ht1 and ht2 values in the process.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//3 9sv968rni5moio662r9kjzai3
|
||||||
|
//static void adjustRanks(graph_t * g, int margin_total)
|
||||||
|
@Unused
|
||||||
|
@Original(version = "2.38.0", path = "lib/dotgen/position.c", name = "adjustRanks", key = "9sv968rni5moio662r9kjzai3", definition = "static void adjustRanks(graph_t * g, int margin_total)")
|
||||||
|
public static void adjustRanks(Globals zz, ST_Agraph_s g, int margin_total) {
|
||||||
|
ENTERING("47ywar141vmwjartmboxs38cz", "adjustRanks");
|
||||||
|
try {
|
||||||
|
double lht; /* label height */
|
||||||
|
double rht; /* height between top and bottom ranks */
|
||||||
|
int maxr, minr, margin;
|
||||||
|
int c;
|
||||||
|
double delta, ht1, ht2;
|
||||||
|
|
||||||
|
CArray<ST_rank_t> rank = GD_rank(dot_root(g));
|
||||||
|
if (g == dot_root(g))
|
||||||
|
margin = 0;
|
||||||
|
else
|
||||||
|
margin = late_int (g, zz.G_margin, CL_OFFSET, 0);
|
||||||
|
|
||||||
|
ht1 = GD_ht1(g);
|
||||||
|
ht2 = GD_ht2(g);
|
||||||
|
|
||||||
|
for (c = 1; c <= GD_n_cluster(g); c++) {
|
||||||
|
ST_Agraph_s subg = GD_clust(g).get_(c);
|
||||||
|
adjustRanks(zz, subg, margin+margin_total);
|
||||||
|
if (GD_maxrank(subg) == GD_maxrank(g))
|
||||||
|
ht1 = Math.max(ht1, GD_ht1(subg) + margin);
|
||||||
|
if (GD_minrank(subg) == GD_minrank(g))
|
||||||
|
ht2 = Math.max(ht2, GD_ht2(subg) + margin);
|
||||||
|
}
|
||||||
|
|
||||||
|
GD_ht1(g, ht1);
|
||||||
|
GD_ht2(g, ht2);
|
||||||
|
|
||||||
|
if ((g != dot_root(g)) && GD_label(g)!=null) {
|
||||||
|
lht = Math.max(GD_border(g)[LEFT_IX].y, GD_border(g)[RIGHT_IX].y);
|
||||||
|
maxr = GD_maxrank(g);
|
||||||
|
minr = GD_minrank(g);
|
||||||
|
rht = ND_coord(rank.get__(minr).v.get_(0)).y - ND_coord(rank.get__(maxr).v.get_(0)).y;
|
||||||
|
delta = lht - (rht + ht1 + ht2);
|
||||||
|
if (delta > 0) {
|
||||||
|
adjustSimple(g, (int) delta, margin_total);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* update the global ranks */
|
||||||
|
if (g != dot_root(g)) {
|
||||||
|
rank.get__(GD_minrank(g)).ht2 = Math.max(rank.get__(GD_minrank(g)).ht2, GD_ht2(g));
|
||||||
|
rank.get__(GD_maxrank(g)).ht1 = Math.max(rank.get__(GD_maxrank(g)).ht1, GD_ht1(g));
|
||||||
|
}
|
||||||
|
|
||||||
|
} finally {
|
||||||
|
LEAVING("47ywar141vmwjartmboxs38cz", "adjustRanks");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1006,19 +1498,19 @@ try {
|
|||||||
* handling equal spacing as a special case.
|
* handling equal spacing as a special case.
|
||||||
*/
|
*/
|
||||||
if (lbl!=0 && GD_flip(g)) {
|
if (lbl!=0 && GD_flip(g)) {
|
||||||
UNSUPPORTED("bxjqk5nu40mwo1156dicr9tur"); // adjustRanks(g, 0);
|
adjustRanks(zz, g, 0);
|
||||||
UNSUPPORTED("6vy9qfed3u61pmvy12724s9l4"); // if (GD_exact_ranksep(g)) { /* recompute maxht */
|
if (GD_exact_ranksep(g)!=0) { /* recompute maxht */
|
||||||
UNSUPPORTED("74f5n6u4x39ngn0gsan7fgzyr"); // maxht = 0;
|
maxht = 0;
|
||||||
UNSUPPORTED("2pd9g1n9b0746fgt892degls3"); // r = GD_maxrank(g);
|
r = GD_maxrank(g);
|
||||||
UNSUPPORTED("8dils3hlxottsbf2iuapvhqeq"); // d0 = (ND_coord(rank[r].v[0])).y;
|
d0 = (ND_coord(rank.get__(r).v.get_(0))).y;
|
||||||
UNSUPPORTED("cw5accmrcan3lqfc789udgcka"); // while (--r >= GD_minrank(g)) {
|
while (--r >= GD_minrank(g)) {
|
||||||
UNSUPPORTED("6bxo7bknt38qh9t31zr7p6kie"); // d1 = (ND_coord(rank[r].v[0])).y;
|
d1 = (ND_coord(rank.get__(r).v.get_(0))).y;
|
||||||
UNSUPPORTED("b1ta7vjm5i7swyklhfwy27w35"); // delta = d1 - d0;
|
delta = d1 - d0;
|
||||||
UNSUPPORTED("65l8hg0imd48bfdu614k2kylt"); // maxht = MAX(maxht, delta);
|
maxht = Math.max(maxht, delta);
|
||||||
UNSUPPORTED("5irf6cp6xdzi2ik033azsbauo"); // d0 = d1;
|
d0 = d1;
|
||||||
UNSUPPORTED("6t98dcecgbvbvtpycwiq2ynnj"); // }
|
}
|
||||||
UNSUPPORTED("flupwh3kosf3fkhkxllllt1"); // }
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* re-assign if ranks are equally spaced */
|
/* re-assign if ranks are equally spaced */
|
||||||
if (GD_exact_ranksep(g)!=0) {
|
if (GD_exact_ranksep(g)!=0) {
|
||||||
|
@ -90,6 +90,10 @@ public class MinMaxMutable {
|
|||||||
this.minY = Math.min(y, minY);
|
this.minY = Math.min(y, minY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addPoint(XPoint2D pt) {
|
||||||
|
addPoint(pt.getX(), pt.getY());
|
||||||
|
}
|
||||||
|
|
||||||
public static MinMaxMutable fromMax(double maxX, double maxY) {
|
public static MinMaxMutable fromMax(double maxX, double maxY) {
|
||||||
if (Double.isNaN(maxX))
|
if (Double.isNaN(maxX))
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
package net.sourceforge.plantuml.klimt.geom;
|
package net.sourceforge.plantuml.klimt.geom;
|
||||||
|
|
||||||
import net.sourceforge.plantuml.klimt.UTranslate;
|
import net.sourceforge.plantuml.klimt.UTranslate;
|
||||||
|
import net.sourceforge.plantuml.utils.MathUtils;
|
||||||
|
|
||||||
public class RectangleArea {
|
public class RectangleArea {
|
||||||
|
|
||||||
@ -51,8 +52,9 @@ public class RectangleArea {
|
|||||||
this.maxY = maxY;
|
this.maxY = maxY;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static RectangleArea build(XPoint2D min, XPoint2D max) {
|
public static RectangleArea build(XPoint2D pt1, XPoint2D pt2) {
|
||||||
return new RectangleArea(min.x, min.y, max.x, max.y);
|
return new RectangleArea(MathUtils.min(pt1.x, pt2.x), MathUtils.min(pt1.y, pt2.y), MathUtils.max(pt1.x, pt2.x),
|
||||||
|
MathUtils.max(pt1.y, pt2.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
public RectangleArea move(double deltaX, double deltaY) {
|
public RectangleArea move(double deltaX, double deltaY) {
|
||||||
|
@ -48,6 +48,10 @@ public class XDimension2D {
|
|||||||
final private double height;
|
final private double height;
|
||||||
|
|
||||||
public XDimension2D(double width, double height) {
|
public XDimension2D(double width, double height) {
|
||||||
|
if (width < 0)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
if (height < 0)
|
||||||
|
throw new IllegalArgumentException();
|
||||||
if (Double.isNaN(width) || Double.isNaN(height))
|
if (Double.isNaN(width) || Double.isNaN(height))
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
|
|
||||||
|
106
src/net/sourceforge/plantuml/sdot/BoxInfo.java
Normal file
106
src/net/sourceforge/plantuml/sdot/BoxInfo.java
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
/* ========================================================================
|
||||||
|
* PlantUML : a free UML diagram generator
|
||||||
|
* ========================================================================
|
||||||
|
*
|
||||||
|
* (C) Copyright 2009-2024, Arnaud Roques
|
||||||
|
*
|
||||||
|
* Project Info: https://plantuml.com
|
||||||
|
*
|
||||||
|
* If you like this project or if you find it useful, you can support us at:
|
||||||
|
*
|
||||||
|
* https://plantuml.com/patreon (only 1$ per month!)
|
||||||
|
* https://plantuml.com/paypal
|
||||||
|
*
|
||||||
|
* This file is part of PlantUML.
|
||||||
|
*
|
||||||
|
* PlantUML is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* PlantUML distributed in the hope that it will be useful, but
|
||||||
|
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||||
|
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
||||||
|
* License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public
|
||||||
|
* License along with this library; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||||
|
* USA.
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* Original Author: Arnaud Roques
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package net.sourceforge.plantuml.sdot;
|
||||||
|
|
||||||
|
import h.ST_Agnode_s;
|
||||||
|
import h.ST_Agnodeinfo_t;
|
||||||
|
import h.ST_Agraphinfo_t;
|
||||||
|
import h.ST_boxf;
|
||||||
|
import h.ST_textlabel_t;
|
||||||
|
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
|
||||||
|
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
|
||||||
|
|
||||||
|
public class BoxInfo {
|
||||||
|
|
||||||
|
private final XPoint2D upperRight;
|
||||||
|
private final XPoint2D lowerLeft;
|
||||||
|
|
||||||
|
private BoxInfo(XPoint2D upperRight, XPoint2D lowerLeft) {
|
||||||
|
this.upperRight = upperRight;
|
||||||
|
this.lowerLeft = lowerLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BoxInfo fromTextlabel(ST_textlabel_t label) {
|
||||||
|
final double x = label.pos.x;
|
||||||
|
final double y = label.pos.y;
|
||||||
|
final double width = label.dimen.x;
|
||||||
|
final double height = label.dimen.y;
|
||||||
|
|
||||||
|
final XPoint2D upperRight = new XPoint2D(x + width / 2, y - height / 2);
|
||||||
|
final XPoint2D lowerLeft = new XPoint2D(x - width / 2, y + height / 2);
|
||||||
|
return new BoxInfo(upperRight, lowerLeft);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BoxInfo fromNode(ST_Agnode_s node) {
|
||||||
|
final ST_Agnodeinfo_t data = (ST_Agnodeinfo_t) node.data;
|
||||||
|
final double width = data.width * 72;
|
||||||
|
final double height = data.height * 72;
|
||||||
|
final double x = data.coord.x;
|
||||||
|
final double y = data.coord.y;
|
||||||
|
|
||||||
|
final XPoint2D upperRight = new XPoint2D(x + width / 2, y - height / 2);
|
||||||
|
final XPoint2D lowerLeft = new XPoint2D(x - width / 2, y + height / 2);
|
||||||
|
return new BoxInfo(upperRight, lowerLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public XDimension2D getDimension() {
|
||||||
|
final double width = upperRight.getX() - lowerLeft.getX();
|
||||||
|
final double height = lowerLeft.getY() - upperRight.getY();
|
||||||
|
return new XDimension2D(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static BoxInfo fromGraphInfo(ST_Agraphinfo_t data) {
|
||||||
|
final ST_boxf bb = (ST_boxf) data.bb;
|
||||||
|
final double llx = bb.LL.x;
|
||||||
|
final double lly = bb.LL.y;
|
||||||
|
final double urx = bb.UR.x;
|
||||||
|
final double ury = bb.UR.y;
|
||||||
|
|
||||||
|
final XPoint2D upperRight = new XPoint2D(urx, ury);
|
||||||
|
final XPoint2D lowerLeft = new XPoint2D(llx, lly);
|
||||||
|
return new BoxInfo(upperRight, lowerLeft);
|
||||||
|
}
|
||||||
|
|
||||||
|
public final XPoint2D getUpperRight() {
|
||||||
|
return upperRight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final XPoint2D getLowerLeft() {
|
||||||
|
return lowerLeft;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -55,12 +55,10 @@ import java.util.concurrent.locks.ReentrantLock;
|
|||||||
|
|
||||||
import h.ST_Agedge_s;
|
import h.ST_Agedge_s;
|
||||||
import h.ST_Agnode_s;
|
import h.ST_Agnode_s;
|
||||||
import h.ST_Agnodeinfo_t;
|
|
||||||
import h.ST_Agraph_s;
|
import h.ST_Agraph_s;
|
||||||
import h.ST_Agraphinfo_t;
|
import h.ST_Agraphinfo_t;
|
||||||
import h.ST_Agrec_s;
|
import h.ST_Agrec_s;
|
||||||
import h.ST_GVC_s;
|
import h.ST_GVC_s;
|
||||||
import h.ST_boxf;
|
|
||||||
import net.sourceforge.plantuml.FileFormatOption;
|
import net.sourceforge.plantuml.FileFormatOption;
|
||||||
import net.sourceforge.plantuml.StringUtils;
|
import net.sourceforge.plantuml.StringUtils;
|
||||||
import net.sourceforge.plantuml.UmlDiagram;
|
import net.sourceforge.plantuml.UmlDiagram;
|
||||||
@ -80,6 +78,7 @@ import net.sourceforge.plantuml.klimt.font.FontConfiguration;
|
|||||||
import net.sourceforge.plantuml.klimt.font.StringBounder;
|
import net.sourceforge.plantuml.klimt.font.StringBounder;
|
||||||
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
|
import net.sourceforge.plantuml.klimt.geom.HorizontalAlignment;
|
||||||
import net.sourceforge.plantuml.klimt.geom.MinMaxMutable;
|
import net.sourceforge.plantuml.klimt.geom.MinMaxMutable;
|
||||||
|
import net.sourceforge.plantuml.klimt.geom.Rankdir;
|
||||||
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
|
import net.sourceforge.plantuml.klimt.geom.XDimension2D;
|
||||||
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
|
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
|
||||||
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
|
import net.sourceforge.plantuml.klimt.shape.AbstractTextBlock;
|
||||||
@ -106,27 +105,25 @@ import smetana.core.Macro;
|
|||||||
import smetana.core.debug.SmetanaDebug;
|
import smetana.core.debug.SmetanaDebug;
|
||||||
|
|
||||||
public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
||||||
// ::remove folder when __HAXE__
|
// ::remove folder when __HAXE__
|
||||||
|
|
||||||
private final ICucaDiagram diagram;
|
private final ICucaDiagram diagram;
|
||||||
|
|
||||||
private final StringBounder stringBounder;
|
private final StringBounder stringBounder;
|
||||||
private final Map<Entity, ST_Agnode_s> nodes = new LinkedHashMap<Entity, ST_Agnode_s>();
|
private final Map<Entity, ST_Agnode_s> nodes = new LinkedHashMap<Entity, ST_Agnode_s>();
|
||||||
|
private final Map<Entity, ST_Agnode_s> coreNodes = new LinkedHashMap<Entity, ST_Agnode_s>();
|
||||||
private final Map<Link, ST_Agedge_s> edges = new LinkedHashMap<Link, ST_Agedge_s>();
|
private final Map<Link, ST_Agedge_s> edges = new LinkedHashMap<Link, ST_Agedge_s>();
|
||||||
private final Map<Entity, ST_Agraph_s> clusters = new LinkedHashMap<Entity, ST_Agraph_s>();
|
private final Map<Entity, ST_Agraph_s> clusters = new LinkedHashMap<Entity, ST_Agraph_s>();
|
||||||
|
|
||||||
private final DotStringFactory dotStringFactory;
|
private final DotStringFactory dotStringFactory;
|
||||||
|
private final Rankdir rankdir;
|
||||||
|
|
||||||
private MinMaxMutable getSmetanaMinMax() {
|
private MinMaxMutable getSmetanaMinMax() {
|
||||||
final MinMaxMutable result = MinMaxMutable.getEmpty(false);
|
final MinMaxMutable result = MinMaxMutable.getEmpty(false);
|
||||||
for (ST_Agnode_s n : nodes.values()) {
|
for (ST_Agnode_s n : nodes.values()) {
|
||||||
final ST_Agnodeinfo_t data = (ST_Agnodeinfo_t) n.data;
|
final BoxInfo data = BoxInfo.fromNode(n);
|
||||||
final double width = data.width * 72;
|
result.addPoint(data.getUpperRight());
|
||||||
final double height = data.height * 72;
|
result.addPoint(data.getLowerLeft());
|
||||||
final double x = data.coord.x;
|
|
||||||
final double y = data.coord.y;
|
|
||||||
result.addPoint(x - width / 2, y - height / 2);
|
|
||||||
result.addPoint(x + width / 2, y + height / 2);
|
|
||||||
}
|
}
|
||||||
for (ST_Agraph_s gr : clusters.values()) {
|
for (ST_Agraph_s gr : clusters.values()) {
|
||||||
final ST_Agrec_s tmp1 = gr.data;
|
final ST_Agrec_s tmp1 = gr.data;
|
||||||
@ -134,15 +131,10 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
System.err.println("ERROR IN CucaDiagramFileMakerSmetana");
|
System.err.println("ERROR IN CucaDiagramFileMakerSmetana");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
final ST_Agraphinfo_t data = (ST_Agraphinfo_t) tmp1;
|
final ST_Agraphinfo_t info = (ST_Agraphinfo_t) tmp1;
|
||||||
final ST_boxf bb = (ST_boxf) data.bb;
|
final BoxInfo data = BoxInfo.fromGraphInfo(info);
|
||||||
final double llx = bb.LL.x;
|
result.addPoint(data.getUpperRight());
|
||||||
final double lly = bb.LL.y;
|
result.addPoint(data.getLowerLeft());
|
||||||
final double urx = bb.UR.x;
|
|
||||||
final double ury = bb.UR.y;
|
|
||||||
|
|
||||||
result.addPoint(llx, lly);
|
|
||||||
result.addPoint(urx, ury);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@ -181,7 +173,7 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
|
|
||||||
final ST_Agedge_s edge = ent.getValue();
|
final ST_Agedge_s edge = ent.getValue();
|
||||||
new SmetanaPath(link, edge, ymirror, diagram, getLabel(link), getQuantifier(link, 1),
|
new SmetanaPath(link, edge, ymirror, diagram, getLabel(link), getQuantifier(link, 1),
|
||||||
getQuantifier(link, 2)).drawU(ug);
|
getQuantifier(link, 2), dotStringFactory.getBibliotekon()).drawU(ug);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -190,13 +182,8 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private XPoint2D getCorner(ST_Agnode_s n) {
|
private XPoint2D getCorner(ST_Agnode_s n) {
|
||||||
final ST_Agnodeinfo_t data = (ST_Agnodeinfo_t) n.data;
|
final BoxInfo data = BoxInfo.fromNode(n);
|
||||||
final double width = data.width * 72;
|
return ymirror.getMirrored(data.getLowerLeft());
|
||||||
final double height = data.height * 72;
|
|
||||||
final double x = data.coord.x;
|
|
||||||
final double y = data.coord.y;
|
|
||||||
|
|
||||||
return ymirror.getMirrored(new XPoint2D(x - width / 2, y + height / 2));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public HColor getBackcolor() {
|
public HColor getBackcolor() {
|
||||||
@ -209,6 +196,7 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
this.diagram = diagram;
|
this.diagram = diagram;
|
||||||
this.stringBounder = stringBounder;
|
this.stringBounder = stringBounder;
|
||||||
this.dotStringFactory = new DotStringFactory(stringBounder, diagram);
|
this.dotStringFactory = new DotStringFactory(stringBounder, diagram);
|
||||||
|
this.rankdir = diagram.getSkinParam().getRankdir();
|
||||||
|
|
||||||
printAllSubgroups(diagram.getRootGroup());
|
printAllSubgroups(diagram.getRootGroup());
|
||||||
printEntities(getUnpackagedEntities());
|
printEntities(getUnpackagedEntities());
|
||||||
@ -220,19 +208,17 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
try {
|
try {
|
||||||
final ST_Agrec_s tmp1 = gr.data;
|
final ST_Agrec_s tmp1 = gr.data;
|
||||||
final ST_Agraphinfo_t data = (ST_Agraphinfo_t) tmp1;
|
final ST_Agraphinfo_t data = (ST_Agraphinfo_t) tmp1;
|
||||||
final ST_boxf bb = (ST_boxf) data.bb;
|
final BoxInfo boxInfo = BoxInfo.fromGraphInfo(data);
|
||||||
final double llx = bb.LL.x;
|
final XPoint2D upperRight = ymirror.getMirrored(boxInfo.getUpperRight());
|
||||||
final double ury = ymirror.getMirrored(bb.LL.y);
|
final XPoint2D lowerLeft = ymirror.getMirrored(boxInfo.getLowerLeft());
|
||||||
final double lly = ymirror.getMirrored(bb.UR.y);
|
|
||||||
final double urx = bb.UR.x;
|
|
||||||
|
|
||||||
final Cluster cluster = dotStringFactory.getBibliotekon().getCluster(group);
|
final Cluster cluster = dotStringFactory.getBibliotekon().getCluster(group);
|
||||||
cluster.setPosition(new XPoint2D(llx, lly), new XPoint2D(urx, ury));
|
cluster.setPosition(upperRight, lowerLeft);
|
||||||
|
|
||||||
final XDimension2D dimTitle = cluster.getTitleDimension(ug.getStringBounder());
|
final XDimension2D dimTitle = cluster.getTitleDimension(ug.getStringBounder());
|
||||||
if (dimTitle != null) {
|
if (dimTitle != null) {
|
||||||
final double x = (llx + urx) / 2 - dimTitle.getWidth() / 2;
|
final double x = (upperRight.getX() + lowerLeft.getX()) / 2 - dimTitle.getWidth() / 2;
|
||||||
cluster.setTitlePosition(new XPoint2D(x, lly));
|
cluster.setTitlePosition(new XPoint2D(x, Math.min(upperRight.getY(), lowerLeft.getY())));
|
||||||
}
|
}
|
||||||
JUtils.LOG2("cluster=" + cluster);
|
JUtils.LOG2("cluster=" + cluster);
|
||||||
cluster.drawU(ug, diagram.getUmlDiagramType(), diagram.getSkinParam());
|
cluster.drawU(ug, diagram.getUmlDiagramType(), diagram.getSkinParam());
|
||||||
@ -280,28 +266,51 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void exportEntities(Globals zz, ST_Agraph_s g, Collection<Entity> entities) {
|
private void exportEntities(Globals zz, ST_Agraph_s cluster, Collection<Entity> entities) {
|
||||||
for (Entity ent : entities) {
|
for (Entity ent : entities) {
|
||||||
if (ent.isRemoved())
|
if (ent.isRemoved())
|
||||||
continue;
|
continue;
|
||||||
exportEntity(zz, g, ent);
|
exportEntity(zz, cluster, ent);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void exportEntity(Globals zz, ST_Agraph_s g, Entity leaf) {
|
private XDimension2D getDim(SvekNode node) {
|
||||||
|
final double width = node.getWidth() / 72;
|
||||||
|
final double height = node.getHeight() / 72;
|
||||||
|
return new XDimension2D(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ST_Agnode_s getCoreFromGroup(Globals zz, Entity group) {
|
||||||
|
ST_Agnode_s result = coreNodes.get(group);
|
||||||
|
if (result != null)
|
||||||
|
return result;
|
||||||
|
|
||||||
|
final ST_Agraph_s cluster = clusters.get(group);
|
||||||
|
if (cluster == null)
|
||||||
|
throw new IllegalStateException();
|
||||||
|
|
||||||
|
result = agnode(zz, cluster, new CString("z" + group.getUid()), true);
|
||||||
|
agsafeset(zz, result, new CString("shape"), new CString("box"), new CString(""));
|
||||||
|
agsafeset(zz, result, new CString("width"), new CString("1"), new CString(""));
|
||||||
|
agsafeset(zz, result, new CString("height"), new CString("1"), new CString(""));
|
||||||
|
coreNodes.put(group, result);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void exportEntity(Globals zz, ST_Agraph_s cluster, Entity leaf) {
|
||||||
final SvekNode node = dotStringFactory.getBibliotekon().getNode(leaf);
|
final SvekNode node = dotStringFactory.getBibliotekon().getNode(leaf);
|
||||||
if (node == null) {
|
if (node == null) {
|
||||||
System.err.println("CANNOT FIND NODE");
|
System.err.println("CANNOT FIND NODE");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// System.err.println("exportEntity " + leaf);
|
// System.err.println("exportEntity " + leaf);
|
||||||
final ST_Agnode_s agnode = agnode(zz, g, new CString(node.getUid()), true);
|
final ST_Agnode_s agnode = agnode(zz, cluster, new CString(node.getUid()), true);
|
||||||
agsafeset(zz, agnode, new CString("shape"), new CString("box"), new CString(""));
|
agsafeset(zz, agnode, new CString("shape"), new CString("box"), new CString(""));
|
||||||
final String width = "" + (node.getWidth() / 72);
|
final XDimension2D dim = getDim(node);
|
||||||
final String height = "" + (node.getHeight() / 72);
|
final String width = "" + dim.getWidth();
|
||||||
|
final String height = "" + dim.getHeight();
|
||||||
agsafeset(zz, agnode, new CString("width"), new CString(width), new CString(""));
|
agsafeset(zz, agnode, new CString("width"), new CString(width), new CString(""));
|
||||||
agsafeset(zz, agnode, new CString("height"), new CString(height), new CString(""));
|
agsafeset(zz, agnode, new CString("height"), new CString(height), new CString(""));
|
||||||
// System.err.println("NODE " + leaf.getUid() + " " + width + " " + height);
|
|
||||||
nodes.put(leaf, agnode);
|
nodes.put(leaf, agnode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,19 +333,18 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printCluster(Globals zz, ST_Agraph_s g, Cluster cluster) {
|
// private void printCluster(Globals zz, ST_Agraph_s g, Cluster cluster) {
|
||||||
for (SvekNode node : cluster.getNodes()) {
|
// for (SvekNode node : cluster.getNodes()) {
|
||||||
final ST_Agnode_s agnode = agnode(zz, g, new CString(node.getUid()), true);
|
// final ST_Agnode_s agnode = agnode(zz, g, new CString(node.getUid()), true);
|
||||||
agsafeset(zz, agnode, new CString("shape"), new CString("box"), new CString(""));
|
// agsafeset(zz, agnode, new CString("shape"), new CString("box"), new CString(""));
|
||||||
final String width = "" + (node.getWidth() / 72);
|
// final String width = "" + (node.getWidth() / 72);
|
||||||
final String height = "" + (node.getHeight() / 72);
|
// final String height = "" + (node.getHeight() / 72);
|
||||||
agsafeset(zz, agnode, new CString("width"), new CString(width), new CString(""));
|
// agsafeset(zz, agnode, new CString("width"), new CString(width), new CString(""));
|
||||||
agsafeset(zz, agnode, new CString("height"), new CString(height), new CString(""));
|
// agsafeset(zz, agnode, new CString("height"), new CString(height), new CString(""));
|
||||||
final Entity leaf = dotStringFactory.getBibliotekon().getLeaf(node);
|
// final Entity leaf = dotStringFactory.getBibliotekon().getLeaf(node);
|
||||||
nodes.put(leaf, agnode);
|
// nodes.put(leaf, agnode);
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
}
|
|
||||||
|
|
||||||
private static final Lock lock = new ReentrantLock();
|
private static final Lock lock = new ReentrantLock();
|
||||||
|
|
||||||
@ -401,6 +409,8 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
|
|
||||||
final ST_GVC_s gvc = gvContext(zz);
|
final ST_GVC_s gvc = gvContext(zz);
|
||||||
SmetanaDebug.reset();
|
SmetanaDebug.reset();
|
||||||
|
if (rankdir == Rankdir.LEFT_TO_RIGHT)
|
||||||
|
agsafeset(zz, g, new CString("rankdir"), new CString("LR"), new CString("LR"));
|
||||||
gvLayoutJobs(zz, gvc, g);
|
gvLayoutJobs(zz, gvc, g);
|
||||||
SmetanaDebug.printMe();
|
SmetanaDebug.printMe();
|
||||||
|
|
||||||
@ -433,14 +443,17 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
if (cluster.isLabel()) {
|
if (cluster.isLabel()) {
|
||||||
final double width = cluster.getTitleAndAttributeWidth();
|
final double width = cluster.getTitleAndAttributeWidth();
|
||||||
final double height = cluster.getTitleAndAttributeHeight() - 5;
|
final double height = cluster.getTitleAndAttributeHeight() - 5;
|
||||||
agsafeset(zz, cluster1, new CString("label"),
|
agsafeset(zz, cluster1, new CString("label"), createLabelDim(width, height), new CString(""));
|
||||||
Macro.createHackInitDimensionFromLabel((int) width, (int) height), new CString(""));
|
|
||||||
}
|
}
|
||||||
this.exportEntities(zz, cluster1, group.leafs());
|
this.exportEntities(zz, cluster1, group.leafs());
|
||||||
this.clusters.put(group, cluster1);
|
this.clusters.put(group, cluster1);
|
||||||
this.exportGroups(zz, cluster1, group);
|
this.exportGroups(zz, cluster1, group);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private CString createLabelDim(final double width, final double height) {
|
||||||
|
return Macro.createHackInitDimensionFromLabel((int) width, (int) height);
|
||||||
|
}
|
||||||
|
|
||||||
private Style getStyle() {
|
private Style getStyle() {
|
||||||
return StyleSignatureBasic
|
return StyleSignatureBasic
|
||||||
.of(SName.root, SName.element, diagram.getUmlDiagramType().getStyleName(), SName.arrow)
|
.of(SName.root, SName.element, diagram.getUmlDiagramType().getStyleName(), SName.arrow)
|
||||||
@ -496,55 +509,48 @@ public class CucaDiagramFileMakerSmetana implements CucaDiagramFileMaker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private ST_Agedge_s createEdge(Globals zz, final ST_Agraph_s g, Link link) {
|
private ST_Agedge_s createEdge(Globals zz, final ST_Agraph_s g, Link link) {
|
||||||
final ST_Agnode_s n = getAgnodeFromLeaf(link.getEntity1());
|
|
||||||
final ST_Agnode_s m = getAgnodeFromLeaf(link.getEntity2());
|
|
||||||
if (n == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
if (m == null)
|
final ST_Agnode_s node1;
|
||||||
return null;
|
final ST_Agnode_s node2;
|
||||||
|
|
||||||
final ST_Agedge_s e = agedge(zz, g, n, m, null, true);
|
if (link.getEntity1().isGroup())
|
||||||
// System.err.println("createEdge " + link);
|
node1 = getCoreFromGroup(zz, link.getEntity1());
|
||||||
|
else
|
||||||
|
node1 = getAgnodeFromLeaf(link.getEntity1());
|
||||||
|
|
||||||
|
if (link.getEntity2().isGroup())
|
||||||
|
node2 = getCoreFromGroup(zz, link.getEntity2());
|
||||||
|
else
|
||||||
|
node2 = getAgnodeFromLeaf(link.getEntity2());
|
||||||
|
|
||||||
|
if (node1 == null || node2 == null)
|
||||||
|
throw new IllegalStateException();
|
||||||
|
|
||||||
|
final ST_Agedge_s e = agedge(zz, g, node1, node2, null, true);
|
||||||
agsafeset(zz, e, new CString("arrowtail"), new CString("none"), new CString(""));
|
agsafeset(zz, e, new CString("arrowtail"), new CString("none"), new CString(""));
|
||||||
agsafeset(zz, e, new CString("arrowhead"), new CString("none"), new CString(""));
|
agsafeset(zz, e, new CString("arrowhead"), new CString("none"), new CString(""));
|
||||||
|
|
||||||
int length = link.getLength();
|
int length = link.getLength();
|
||||||
// System.err.println("length=" + length);
|
|
||||||
// if (/* pragma.horizontalLineBetweenDifferentPackageAllowed() ||
|
|
||||||
// */link.isInvis() || length != 1) {
|
|
||||||
agsafeset(zz, e, new CString("minlen"), new CString("" + (length - 1)), new CString(""));
|
agsafeset(zz, e, new CString("minlen"), new CString("" + (length - 1)), new CString(""));
|
||||||
// }
|
|
||||||
// System.err.print("EDGE " + link.getEntity1().getUid() + "->" +
|
|
||||||
// link.getEntity2().getUid() + " minlen="
|
|
||||||
// + (length - 1) + " ");
|
|
||||||
|
|
||||||
final TextBlock label = getLabel(link);
|
final TextBlock label = getLabel(link);
|
||||||
if (TextBlockUtils.isEmpty(label, stringBounder) == false) {
|
if (TextBlockUtils.isEmpty(label, stringBounder) == false) {
|
||||||
final XDimension2D dimLabel = label.calculateDimension(stringBounder);
|
final XDimension2D dimLabel = label.calculateDimension(stringBounder);
|
||||||
// System.err.println("dimLabel = " + dimLabel);
|
final CString hackDim = createLabelDim(dimLabel.getWidth(), dimLabel.getHeight());
|
||||||
final CString hackDim = Macro.createHackInitDimensionFromLabel((int) dimLabel.getWidth(),
|
|
||||||
(int) dimLabel.getHeight());
|
|
||||||
agsafeset(zz, e, new CString("label"), hackDim, new CString(""));
|
agsafeset(zz, e, new CString("label"), hackDim, new CString(""));
|
||||||
// System.err.print("label=" + hackDim.getContent());
|
|
||||||
}
|
}
|
||||||
final TextBlock q1 = getQuantifier(link, 1);
|
final TextBlock q1 = getQuantifier(link, 1);
|
||||||
if (q1 != null) {
|
if (q1 != null) {
|
||||||
final XDimension2D dimLabel = q1.calculateDimension(stringBounder);
|
final XDimension2D dimLabel = q1.calculateDimension(stringBounder);
|
||||||
// System.err.println("dimLabel = " + dimLabel);
|
final CString hackDim = createLabelDim(dimLabel.getWidth(), dimLabel.getHeight());
|
||||||
final CString hackDim = Macro.createHackInitDimensionFromLabel((int) dimLabel.getWidth(),
|
|
||||||
(int) dimLabel.getHeight());
|
|
||||||
agsafeset(zz, e, new CString("taillabel"), hackDim, new CString(""));
|
agsafeset(zz, e, new CString("taillabel"), hackDim, new CString(""));
|
||||||
}
|
}
|
||||||
final TextBlock q2 = getQuantifier(link, 2);
|
final TextBlock q2 = getQuantifier(link, 2);
|
||||||
if (q2 != null) {
|
if (q2 != null) {
|
||||||
final XDimension2D dimLabel = q2.calculateDimension(stringBounder);
|
final XDimension2D dimLabel = q2.calculateDimension(stringBounder);
|
||||||
// System.err.println("dimLabel = " + dimLabel);
|
final CString hackDim = createLabelDim(dimLabel.getWidth(), dimLabel.getHeight());
|
||||||
final CString hackDim = Macro.createHackInitDimensionFromLabel((int) dimLabel.getWidth(),
|
|
||||||
(int) dimLabel.getHeight());
|
|
||||||
agsafeset(zz, e, new CString("headlabel"), hackDim, new CString(""));
|
agsafeset(zz, e, new CString("headlabel"), hackDim, new CString(""));
|
||||||
}
|
}
|
||||||
// System.err.println();
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,19 +48,19 @@ import net.sourceforge.plantuml.klimt.UStroke;
|
|||||||
import net.sourceforge.plantuml.klimt.UTranslate;
|
import net.sourceforge.plantuml.klimt.UTranslate;
|
||||||
import net.sourceforge.plantuml.klimt.color.ColorType;
|
import net.sourceforge.plantuml.klimt.color.ColorType;
|
||||||
import net.sourceforge.plantuml.klimt.color.HColor;
|
import net.sourceforge.plantuml.klimt.color.HColor;
|
||||||
import net.sourceforge.plantuml.klimt.color.HColors;
|
|
||||||
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
|
import net.sourceforge.plantuml.klimt.drawing.UGraphic;
|
||||||
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
|
import net.sourceforge.plantuml.klimt.geom.XPoint2D;
|
||||||
import net.sourceforge.plantuml.klimt.shape.DotPath;
|
import net.sourceforge.plantuml.klimt.shape.DotPath;
|
||||||
import net.sourceforge.plantuml.klimt.shape.TextBlock;
|
import net.sourceforge.plantuml.klimt.shape.TextBlock;
|
||||||
import net.sourceforge.plantuml.klimt.shape.UDrawable;
|
import net.sourceforge.plantuml.klimt.shape.UDrawable;
|
||||||
import net.sourceforge.plantuml.klimt.shape.UEllipse;
|
|
||||||
import net.sourceforge.plantuml.klimt.shape.URectangle;
|
import net.sourceforge.plantuml.klimt.shape.URectangle;
|
||||||
import net.sourceforge.plantuml.skin.LineParam;
|
import net.sourceforge.plantuml.skin.LineParam;
|
||||||
import net.sourceforge.plantuml.style.PName;
|
import net.sourceforge.plantuml.style.PName;
|
||||||
import net.sourceforge.plantuml.style.SName;
|
import net.sourceforge.plantuml.style.SName;
|
||||||
import net.sourceforge.plantuml.style.Style;
|
import net.sourceforge.plantuml.style.Style;
|
||||||
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
import net.sourceforge.plantuml.style.StyleSignatureBasic;
|
||||||
|
import net.sourceforge.plantuml.svek.Bibliotekon;
|
||||||
|
import net.sourceforge.plantuml.svek.Cluster;
|
||||||
import net.sourceforge.plantuml.svek.extremity.ExtremityFactory;
|
import net.sourceforge.plantuml.svek.extremity.ExtremityFactory;
|
||||||
import net.sourceforge.plantuml.url.Url;
|
import net.sourceforge.plantuml.url.Url;
|
||||||
|
|
||||||
@ -73,9 +73,11 @@ public class SmetanaPath implements UDrawable {
|
|||||||
private final TextBlock label;
|
private final TextBlock label;
|
||||||
private final TextBlock headLabel;
|
private final TextBlock headLabel;
|
||||||
private final TextBlock tailLabel;
|
private final TextBlock tailLabel;
|
||||||
|
private final Bibliotekon bibliotekon;
|
||||||
|
|
||||||
public SmetanaPath(Link link, ST_Agedge_s edge, YMirror ymirror, ICucaDiagram diagram, TextBlock label,
|
public SmetanaPath(Link link, ST_Agedge_s edge, YMirror ymirror, ICucaDiagram diagram, TextBlock label,
|
||||||
TextBlock tailLabel, TextBlock headLabel) {
|
TextBlock tailLabel, TextBlock headLabel, Bibliotekon bibliotekon) {
|
||||||
|
this.bibliotekon = bibliotekon;
|
||||||
this.link = link;
|
this.link = link;
|
||||||
this.edge = edge;
|
this.edge = edge;
|
||||||
this.ymirror = ymirror;
|
this.ymirror = ymirror;
|
||||||
@ -99,7 +101,7 @@ public class SmetanaPath implements UDrawable {
|
|||||||
} else if (this.link.getSpecificColor() != null)
|
} else if (this.link.getSpecificColor() != null)
|
||||||
color = this.link.getSpecificColor();
|
color = this.link.getSpecificColor();
|
||||||
|
|
||||||
DotPath dotPath = getDotPath(edge);
|
DotPath dotPath = getDotPath();
|
||||||
if (ymirror != null && dotPath != null)
|
if (ymirror != null && dotPath != null)
|
||||||
dotPath = ymirror.getMirrored(dotPath);
|
dotPath = ymirror.getMirrored(dotPath);
|
||||||
|
|
||||||
@ -146,8 +148,7 @@ public class SmetanaPath implements UDrawable {
|
|||||||
if (extremityFactory2 == null)
|
if (extremityFactory2 == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
final ST_splines splines = getSplines(edge);
|
DotPath s = getDotPath();
|
||||||
DotPath s = getDotPath(splines);
|
|
||||||
XPoint2D p0 = s.getStartPoint();
|
XPoint2D p0 = s.getStartPoint();
|
||||||
double startAngle = s.getStartAngle();
|
double startAngle = s.getStartAngle();
|
||||||
if (ymirror != null) {
|
if (ymirror != null) {
|
||||||
@ -171,8 +172,7 @@ public class SmetanaPath implements UDrawable {
|
|||||||
if (extremityFactory1 == null)
|
if (extremityFactory1 == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
final ST_splines splines = getSplines(edge);
|
DotPath s = getDotPath();
|
||||||
DotPath s = getDotPath(splines);
|
|
||||||
XPoint2D p0 = s.getEndPoint();
|
XPoint2D p0 = s.getEndPoint();
|
||||||
double endAngle = s.getEndAngle();
|
double endAngle = s.getEndAngle();
|
||||||
if (ymirror != null) {
|
if (ymirror != null) {
|
||||||
@ -190,23 +190,23 @@ public class SmetanaPath implements UDrawable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void printDebug(UGraphic ug) {
|
// private void printDebug(UGraphic ug) {
|
||||||
ug = ug.apply(HColors.BLUE).apply(HColors.BLUE.bg());
|
// ug = ug.apply(HColors.BLUE).apply(HColors.BLUE.bg());
|
||||||
final ST_splines splines = getSplines(edge);
|
// final ST_splines splines = getSplines(edge);
|
||||||
final ST_bezier beziers = splines.list.get__(0);
|
// final ST_bezier beziers = splines.list.get__(0);
|
||||||
for (int i = 0; i < beziers.size; i++) {
|
// for (int i = 0; i < beziers.size; i++) {
|
||||||
XPoint2D pt = getPoint(splines, i);
|
// XPoint2D pt = getPoint(splines, i);
|
||||||
if (ymirror != null)
|
// if (ymirror != null)
|
||||||
pt = ymirror.getMirrored(pt);
|
// pt = ymirror.getMirrored(pt);
|
||||||
|
//
|
||||||
ug.apply(UTranslate.point(pt).compose(new UTranslate(-1, -1))).draw(UEllipse.build(3, 3));
|
// ug.apply(UTranslate.point(pt).compose(new UTranslate(-1, -1))).draw(UEllipse.build(3, 3));
|
||||||
}
|
// }
|
||||||
if (getLabelRectangleTranslate("label") != null && getLabelURectangle() != null) {
|
// if (getLabelRectangleTranslate("label") != null && getLabelURectangle() != null) {
|
||||||
ug = ug.apply(HColors.BLUE).apply(HColors.none().bg());
|
// ug = ug.apply(HColors.BLUE).apply(HColors.none().bg());
|
||||||
ug.apply(getLabelRectangleTranslate("label")).draw(getLabelURectangle());
|
// ug.apply(getLabelRectangleTranslate("label")).draw(getLabelURectangle());
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
}
|
// }
|
||||||
|
|
||||||
private URectangle getLabelURectangle() {
|
private URectangle getLabelURectangle() {
|
||||||
final ST_Agedgeinfo_t data = (ST_Agedgeinfo_t) edge.data.castTo(ST_Agedgeinfo_t.class);
|
final ST_Agedgeinfo_t data = (ST_Agedgeinfo_t) edge.data.castTo(ST_Agedgeinfo_t.class);
|
||||||
@ -214,14 +214,8 @@ public class SmetanaPath implements UDrawable {
|
|||||||
if (label == null)
|
if (label == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
final ST_pointf dimen = (ST_pointf) label.dimen;
|
final BoxInfo boxInfo = BoxInfo.fromTextlabel(label);
|
||||||
final ST_pointf space = (ST_pointf) label.space;
|
return URectangle.build(boxInfo.getDimension());
|
||||||
final ST_pointf pos = (ST_pointf) label.pos;
|
|
||||||
final double x = pos.x;
|
|
||||||
final double y = pos.y;
|
|
||||||
final double width = dimen.x;
|
|
||||||
final double height = dimen.y;
|
|
||||||
return URectangle.build(width, height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private UTranslate getLabelRectangleTranslate(String fieldName) {
|
private UTranslate getLabelRectangleTranslate(String fieldName) {
|
||||||
@ -238,51 +232,44 @@ public class SmetanaPath implements UDrawable {
|
|||||||
if (label == null)
|
if (label == null)
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
final ST_pointf dimen = (ST_pointf) label.dimen;
|
final BoxInfo boxInfo = BoxInfo.fromTextlabel(label);
|
||||||
final ST_pointf space = (ST_pointf) label.space;
|
|
||||||
final ST_pointf pos = (ST_pointf) label.pos;
|
|
||||||
final double x = pos.x;
|
|
||||||
final double y = pos.y;
|
|
||||||
final double width = dimen.x;
|
|
||||||
final double height = dimen.y;
|
|
||||||
|
|
||||||
if (ymirror == null)
|
if (ymirror == null)
|
||||||
return new UTranslate(x - width / 2, y - height / 2);
|
return new UTranslate(boxInfo.getLowerLeft().getX(), boxInfo.getUpperRight().getY());
|
||||||
|
|
||||||
return ymirror.getMirrored(new UTranslate(x - width / 2, y + height / 2));
|
return ymirror.getMirrored(UTranslate.point(boxInfo.getLowerLeft()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public DotPath getDotPath(ST_Agedge_s e) {
|
private DotPath dotPath;
|
||||||
final ST_splines splines = getSplines(e);
|
|
||||||
return getDotPath(splines);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ST_splines getSplines(ST_Agedge_s e) {
|
private DotPath getDotPath() {
|
||||||
final ST_Agedgeinfo_t data = (ST_Agedgeinfo_t) e.data;
|
if (dotPath != null)
|
||||||
final ST_splines splines = (ST_splines) data.spl;
|
return dotPath;
|
||||||
return splines;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DotPath getDotPath(ST_splines splines) {
|
final ST_Agedgeinfo_t data = (ST_Agedgeinfo_t) edge.data;
|
||||||
if (splines == null) {
|
final ST_splines splines = data.spl;
|
||||||
System.err.println("ERROR, no splines for getDotPath");
|
|
||||||
return null;
|
dotPath = new DotPath();
|
||||||
}
|
|
||||||
DotPath result = new DotPath();
|
|
||||||
final ST_bezier beziers = (ST_bezier) splines.list.get__(0);
|
final ST_bezier beziers = (ST_bezier) splines.list.get__(0);
|
||||||
final XPoint2D pt1 = getPoint(splines, 0);
|
final XPoint2D pt1 = getPoint(splines, 0);
|
||||||
final XPoint2D pt2 = getPoint(splines, 1);
|
final XPoint2D pt2 = getPoint(splines, 1);
|
||||||
final XPoint2D pt3 = getPoint(splines, 2);
|
final XPoint2D pt3 = getPoint(splines, 2);
|
||||||
final XPoint2D pt4 = getPoint(splines, 3);
|
final XPoint2D pt4 = getPoint(splines, 3);
|
||||||
result = result.addCurve(pt1, pt2, pt3, pt4);
|
dotPath = dotPath.addCurve(pt1, pt2, pt3, pt4);
|
||||||
final int n = beziers.size;
|
final int n = beziers.size;
|
||||||
for (int i = 4; i < n; i += 3) {
|
for (int i = 4; i < n; i += 3) {
|
||||||
final XPoint2D ppt2 = getPoint(splines, i);
|
final XPoint2D ppt2 = getPoint(splines, i);
|
||||||
final XPoint2D ppt3 = getPoint(splines, i + 1);
|
final XPoint2D ppt3 = getPoint(splines, i + 1);
|
||||||
final XPoint2D ppt4 = getPoint(splines, i + 2);
|
final XPoint2D ppt4 = getPoint(splines, i + 2);
|
||||||
result = result.addCurve(ppt2, ppt3, ppt4);
|
dotPath = dotPath.addCurve(ppt2, ppt3, ppt4);
|
||||||
}
|
}
|
||||||
return result;
|
|
||||||
|
if (link.getEntity2().isGroup()) {
|
||||||
|
final Cluster cluster2 = bibliotekon.getCluster(link.getEntity2());
|
||||||
|
// System.err.println("WARNING: a group " + cluster2.getRectangleArea());
|
||||||
|
// dotPath = dotPath.simulateCompound(cluster2.getRectangleArea(), cluster2.getRectangleArea());
|
||||||
|
}
|
||||||
|
return dotPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
private XPoint2D getPoint(ST_splines splines, int i) {
|
private XPoint2D getPoint(ST_splines splines, int i) {
|
||||||
|
@ -377,7 +377,13 @@ public class Histogram implements PDrawing {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public double getFullHeight(StringBounder stringBounder) {
|
public double getFullHeight(StringBounder stringBounder) {
|
||||||
return getHeightForConstraints(stringBounder) + stepHeight() * (allStates.size() - 1) + getBottomMargin();
|
double height = getHeightForConstraints(stringBounder);
|
||||||
|
|
||||||
|
if (allStates.size() > 0)
|
||||||
|
height += stepHeight() * (allStates.size() - 1);
|
||||||
|
|
||||||
|
height += getBottomMargin();
|
||||||
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
private double getBottomMargin() {
|
private double getBottomMargin() {
|
||||||
|
@ -82,7 +82,7 @@ public class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static int beta() {
|
public static int beta() {
|
||||||
final int beta = 1;
|
final int beta = 2;
|
||||||
return beta;
|
return beta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user