ND_coord(new).x = POINTS(ND_pos(old)[0]);
ND_coord(new).y = POINTS(ND_pos(old)[1]);
ND_height(new) = ND_height(old);
- ND_ht_i(new) = ND_ht_i(old);
+ ND_ht(new) = ND_ht(old);
ND_width(new) = ND_width(old);
- ND_lw_i(new) = ND_lw_i(old);
- ND_rw_i(new) = ND_rw_i(old);
+ ND_lw(new) = ND_lw(old);
+ ND_rw(new) = ND_rw(old);
ND_shape(new) = ND_shape(old);
ND_shape_info(new) = ND_shape_info(old);
}
A = ALLOC(A_size, A, pointf);
}
- xsize = (ND_lw_i(n) + ND_rw_i(n)) / POINTS(ND_width(n));
- ysize = (ND_ht_i(n)) / POINTS(ND_height(n));
+ xsize = (ND_lw(n) + ND_rw(n)) / POINTS(ND_width(n));
+ ysize = (ND_ht(n)) / POINTS(ND_height(n));
for (j = 0; j < peripheries; j++) {
for (i = 0; i < sides; i++) {
obj->url_map_shape = MAP_RECTANGLE;
nump = 2;
p = N_NEW(nump, pointf);
- p[0].x = coord.x - ND_lw_i(n);
- p[0].y = coord.y - (ND_ht_i(n) / 2);
- p[1].x = coord.x + ND_rw_i(n);
- p[1].y = coord.y + (ND_ht_i(n) / 2);
+ p[0].x = coord.x - ND_lw(n);
+ p[0].y = coord.y - (ND_ht(n) / 2);
+ p[1].x = coord.x + ND_rw(n);
+ p[1].y = coord.y + (ND_ht(n) / 2);
}
if (! (flags & GVRENDER_DOES_TRANSFORM))
gvrender_ptf_A(job, p, p, nump);
{
edge_t *e;
- ND_bb(n).LL.x = ND_coord(n).x - ND_lw_i(n);
- ND_bb(n).LL.y = ND_coord(n).y - ND_ht_i(n) / 2.;
- ND_bb(n).UR.x = ND_coord(n).x + ND_rw_i(n);
- ND_bb(n).UR.y = ND_coord(n).y + ND_ht_i(n) / 2.;
+ ND_bb(n).LL.x = ND_coord(n).x - ND_lw(n);
+ ND_bb(n).LL.y = ND_coord(n).y - ND_ht(n) / 2.;
+ ND_bb(n).UR.x = ND_coord(n).x + ND_rw(n);
+ ND_bb(n).UR.y = ND_coord(n).y + ND_ht(n) / 2.;
for (e = agfstout(g, n); e; e = agnxtout(g, e))
init_bb_edge(e);
sprintf(buf, "%.3g,%.3g", ND_coord(n).x, YDIR(ND_coord(n).y));
}
agset(n, "pos", buf);
- sprintf(buf, "%.3g", PS2INCH(ND_ht_i(n)));
+ sprintf(buf, "%.3g", PS2INCH(ND_ht(n)));
agxset(n, N_height->index, buf);
- sprintf(buf, "%.3g", PS2INCH(ND_lw_i(n) + ND_rw_i(n)));
+ sprintf(buf, "%.3g", PS2INCH(ND_lw(n) + ND_rw(n)));
agxset(n, N_width->index, buf);
if (strcmp(ND_shape(n)->name, "record") == 0) {
set_record_rects(n, ND_shape_info(n), &xb);
x = ND_height(n);
}
ps = POINTS(x) / 2;
- if (ps < 1)
- ps = 1;
- ND_lw_i(n) = ND_rw_i(n) = ps;
+ if (ps < 1) ps = 1;
+ ND_lw(n) = ND_rw(n) = ps;
+
if (x == y)
- ND_ht_i(n) = 2*ps;
+ ND_ht(n) = 2*ps;
else
- ND_ht_i(n) = POINTS(y);
+ ND_ht(n) = POINTS(y);
}
/* translate_drawing:
y = .7500;
x = .6614; /* x^2 + y^2 = 1.0 */
- p.y = y * ND_ht_i(n) / 2.0;
- p.x = ND_rw_i(n) * x; /* assume node is symmetric */
+ p.y = y * ND_ht(n) / 2.0;
+ p.x = ND_rw(n) * x; /* assume node is symmetric */
AF[0] = add_pointfs(p, ND_coord(n));
AF[1].y = AF[0].y;
/* get point and node size adjusted for rankdir=LR */
if (GD_flip(n->graph)) {
- ysize = ND_lw_i(n) + ND_rw_i(n);
- xsize = ND_ht_i(n);
+ ysize = ND_lw(n) + ND_rw(n);
+ xsize = ND_ht(n);
} else {
- xsize = ND_lw_i(n) + ND_rw_i(n);
- ysize = ND_ht_i(n);
+ xsize = ND_lw(n) + ND_rw(n);
+ ysize = ND_ht(n);
}
/* scale */
} else {
p.x = p.y = 0.;
if (GD_flip(n->graph)) {
- b.UR.x = ND_ht_i(n) / 2.;
+ b.UR.x = ND_ht(n) / 2.;
b.LL.x = -b.UR.x;
- b.UR.y = ND_lw_i(n);
+ b.UR.y = ND_lw(n);
b.LL.y = -b.UR.y;
} else {
- b.UR.y = ND_ht_i(n) / 2.;
+ b.UR.y = ND_ht(n) / 2.;
b.LL.y = -b.UR.y;
- b.UR.x = ND_lw_i(n);
+ b.UR.x = ND_lw(n);
b.LL.x = -b.UR.x;
}
defined = FALSE;
/* nominal label position in the center of the node */
ND_label(n)->pos = ND_coord(n);
- xsize = (double)(ND_lw_i(n) + ND_rw_i(n)) / POINTS(ND_width(n));
- ysize = (double)ND_ht_i(n) / POINTS(ND_height(n));
+ xsize = (ND_lw(n) + ND_rw(n)) / POINTS(ND_width(n));
+ ysize = ND_ht(n) / POINTS(ND_height(n));
style = stylenode(job, n);
rv[0] = flip_rec_boxf(info->fld[i]->b, ND_coord(n));
} else {
rv[0].LL.x = ND_coord(n).x + ls;
- rv[0].LL.y = ND_coord(n).y - (ND_ht_i(n) / 2);
+ rv[0].LL.y = ND_coord(n).y - (ND_ht(n) / 2);
rv[0].UR.x = ND_coord(n).x + rs;
}
- rv[0].UR.y = ND_coord(n).y + (ND_ht_i(n) / 2);
+ rv[0].UR.y = ND_coord(n).y + (ND_ht(n) / 2);
*kptr = 1;
break;
}
node_t *n = inside_context->s.n;
P = ccwrotatepf(p, 90*GD_rankdir(n->graph));
- x2 = ND_ht_i(n) / 2;
- return ((P.y >= -x2) && (P.y <= x2) && (P.x >= -ND_lw_i(n))
- && (P.x <= ND_rw_i(n)));
+ x2 = ND_ht(n) / 2;
+ return ((P.y >= -x2) && (P.y <= x2) && (P.x >= -ND_lw(n)) && (P.x <= ND_rw(n)));
}
static void epsf_gencode(GVJ_t * job, node_t * n)
b = *oldport->bp;
} else {
if (GD_flip(n->graph)) {
- b.UR.x = ND_ht_i(n) / 2;
+ b.UR.x = ND_ht(n) / 2;
b.LL.x = -b.UR.x;
- b.UR.y = ND_lw_i(n);
+ b.UR.y = ND_lw(n);
b.LL.y = -b.UR.y;
} else {
- b.UR.y = ND_ht_i(n) / 2;
+ b.UR.y = ND_ht(n) / 2;
b.LL.y = -b.UR.y;
- b.UR.x = ND_lw_i(n);
+ b.UR.x = ND_lw(n);
b.LL.x = -b.UR.x;
}
}
int i, save_real_size;
pointf c[4];
- save_real_size = ND_rw_i(n);
+ save_real_size = ND_rw(n);
for (i = 0; i < 4; i++) {
c[i].x = curve[i].x - ND_coord(n).x;
c[i].y = curve[i].y - ND_coord(n).y;
curve[i].x = c[i].x + ND_coord(n).x;
curve[i].y = c[i].y + ND_coord(n).y;
}
- ND_rw_i(n) = save_real_size;
+ ND_rw(n) = save_real_size;
}
/* shape_clip:
inside_context.s.n = n;
inside_context.s.bp = NULL;
- save_real_size = ND_rw_i(n);
+ save_real_size = ND_rw(n);
c.x = curve[0].x - ND_coord(n).x;
c.y = curve[0].y - ND_coord(n).y;
left_inside = ND_shape(n)->fns->insidefn(&inside_context, c);
- ND_rw_i(n) = save_real_size;
+ ND_rw(n) = save_real_size;
shape_clip0(&inside_context, n, curve, left_inside);
}
endp->sidemask = TOP;
if (P->start.p.x < ND_coord(n).x) { /* go left */
b0.LL.x = b.LL.x - 1;
- /* b0.LL.y = ND_coord(n).y + ND_ht_i(n)/2; */
+ /* b0.LL.y = ND_coord(n).y + ND_ht(n)/2; */
b0.LL.y = P->start.p.y;
b0.UR.x = b.UR.x;
- b0.UR.y = ND_coord(n).y + ND_ht_i(n)/2 + GD_ranksep(n->graph)/2;
- b.UR.x = ND_coord(n).x - ND_lw_i(n) - (FUDGE-2);
+ b0.UR.y = ND_coord(n).y + ND_ht(n)/2 + GD_ranksep(n->graph)/2;
+ b.UR.x = ND_coord(n).x - ND_lw(n) - (FUDGE-2);
b.UR.y = b0.LL.y;
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.LL.x -= 1;
endp->boxes[0] = b0;
endp->boxes[1] = b;
else {
b0.LL.x = b.LL.x;
b0.LL.y = P->start.p.y;
- /* b0.LL.y = ND_coord(n).y + ND_ht_i(n)/2; */
+ /* b0.LL.y = ND_coord(n).y + ND_ht(n)/2; */
b0.UR.x = b.UR.x+1;
- b0.UR.y = ND_coord(n).y + ND_ht_i(n)/2 + GD_ranksep(n->graph)/2;
- b.LL.x = ND_coord(n).x + ND_rw_i(n) + (FUDGE-2);
+ b0.UR.y = ND_coord(n).y + ND_ht(n)/2 + GD_ranksep(n->graph)/2;
+ b.LL.x = ND_coord(n).x + ND_rw(n) + (FUDGE-2);
b.UR.y = b0.LL.y;
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.x += 1;
endp->boxes[0] = b0;
endp->boxes[1] = b;
else if (side & LEFT) {
endp->sidemask = LEFT;
b.UR.x = P->start.p.x;
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.y = P->start.p.y;
endp->boxes[0] = b;
endp->boxn = 1;
else {
endp->sidemask = RIGHT;
b.LL.x = P->start.p.x;
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.y = P->start.p.y;
endp->boxes[0] = b;
endp->boxn = 1;
}
else if (side & BOTTOM) {
if (endp->sidemask == TOP) {
- b0.UR.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b0.UR.y = ND_coord(n).y - ND_ht(n)/2;
b0.UR.x = b.UR.x+1;
b0.LL.x = P->start.p.x;
b0.LL.y = b0.UR.y - GD_ranksep(n->graph)/2;
- b.LL.x = ND_coord(n).x + ND_rw_i(n) + (FUDGE-2);
+ b.LL.x = ND_coord(n).x + ND_rw(n) + (FUDGE-2);
b.LL.y = b0.UR.y;
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.UR.x += 1;
endp->boxes[0] = b0;
endp->boxes[1] = b;
else if (side & LEFT) {
b.UR.x = P->start.p.x+1;
if (endp->sidemask == TOP) {
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.y = P->start.p.y-1;
}
else {
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.y = P->start.p.y+1;
}
endp->boxes[0] = b;
else {
b.LL.x = P->start.p.x;
if (endp->sidemask == TOP) {
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.y = P->start.p.y;
}
else {
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.y = P->start.p.y+1;
}
endp->boxes[0] = b;
endp->sidemask = BOTTOM;
if (P->end.p.x < ND_coord(n).x) { /* go left */
b0.LL.x = b.LL.x-1;
- /* b0.UR.y = ND_coord(n).y - ND_ht_i(n)/2; */
+ /* b0.UR.y = ND_coord(n).y - ND_ht(n)/2; */
b0.UR.y = P->end.p.y;
b0.UR.x = b.UR.x;
- b0.LL.y = ND_coord(n).y - ND_ht_i(n)/2 - GD_ranksep(n->graph)/2;
- b.UR.x = ND_coord(n).x - ND_lw_i(n) - (FUDGE-2);
+ b0.LL.y = ND_coord(n).y - ND_ht(n)/2 - GD_ranksep(n->graph)/2;
+ b.UR.x = ND_coord(n).x - ND_lw(n) - (FUDGE-2);
b.LL.y = b0.UR.y;
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.x -= 1;
endp->boxes[0] = b0;
endp->boxes[1] = b;
else {
b0.LL.x = b.LL.x;
b0.UR.y = P->end.p.y;
- /* b0.UR.y = ND_coord(n).y - ND_ht_i(n)/2; */
+ /* b0.UR.y = ND_coord(n).y - ND_ht(n)/2; */
b0.UR.x = b.UR.x+1;
- b0.LL.y = ND_coord(n).y - ND_ht_i(n)/2 - GD_ranksep(n->graph)/2;
- b.LL.x = ND_coord(n).x + ND_rw_i(n) + (FUDGE-2);
+ b0.LL.y = ND_coord(n).y - ND_ht(n)/2 - GD_ranksep(n->graph)/2;
+ b.LL.x = ND_coord(n).x + ND_rw(n) + (FUDGE-2);
b.LL.y = b0.UR.y;
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.UR.x += 1;
endp->boxes[0] = b0;
endp->boxes[1] = b;
else if (side & LEFT) {
endp->sidemask = LEFT;
b.UR.x = P->end.p.x;
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.y = P->end.p.y;
endp->boxes[0] = b;
endp->boxn = 1;
else {
endp->sidemask = RIGHT;
b.LL.x = P->end.p.x;
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.y = P->end.p.y;
endp->boxes[0] = b;
endp->boxn = 1;
case LEFT:
b.UR.x = P->end.p.x;
if (endp->sidemask == TOP) {
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.y = P->end.p.y;
}
else {
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.y = P->end.p.y;
}
endp->boxes[0] = b;
case RIGHT:
b.LL.x = P->end.p.x-1;
if (endp->sidemask == TOP) {
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.y = P->end.p.y-1;
}
else {
- b.LL.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b.LL.y = ND_coord(n).y - ND_ht(n)/2;
b.UR.y = P->end.p.y;
}
endp->boxes[0] = b;
case BOTTOM:
if (endp->sidemask == TOP) {
b0.LL.x = b.LL.x-1;
- b0.UR.y = ND_coord(n).y - ND_ht_i(n)/2;
+ b0.UR.y = ND_coord(n).y - ND_ht(n)/2;
b0.UR.x = P->end.p.x;
b0.LL.y = b0.UR.y - GD_ranksep(n->graph)/2;
- b.UR.x = ND_coord(n).x - ND_lw_i(n) - 2;
+ b.UR.x = ND_coord(n).x - ND_lw(n) - 2;
b.LL.y = b0.UR.y;
- b.UR.y = ND_coord(n).y + ND_ht_i(n)/2;
+ b.UR.y = ND_coord(n).y + ND_ht(n)/2;
b.LL.x -= 1;
endp->boxes[0] = b0;
endp->boxes[1] = b;
hp.y += np.y;
if (tp.x >= hp.x) sgn = 1;
else sgn = -1;
- dy = ND_ht_i(n)/2., dx = 0.;
+ dy = ND_ht(n)/2., dx = 0.;
ty = MIN(dy, 3*(tp.y + dy - np.y));
hy = MIN(dy, 3*(hp.y + dy - np.y));
for (i = 0; i < cnt; i++) {
hp.y += np.y;
if (tp.x >= hp.x) sgn = 1;
else sgn = -1;
- dy = ND_ht_i(n)/2., dx = 0.;
+ dy = ND_ht(n)/2., dx = 0.;
ty = MIN(dy, 3*(np.y + dy - tp.y));
hy = MIN(dy, 3*(np.y + dy - hp.y));
for (i = 0; i < cnt; i++) {
hp.y += np.y;
if (tp.y >= hp.y) sgn = 1;
else sgn = -1;
- dx = ND_rw_i(n), dy = 0;
+ dx = ND_rw(n), dy = 0;
tx = MIN(dx, 3*(np.x + dx - tp.x));
hx = MIN(dx, 3*(np.x + dx - hp.x));
for (i = 0; i < cnt; i++) {
hp.y += np.y;
if (tp.y >= hp.y) sgn = 1;
else sgn = -1;
- dx = ND_lw_i(n), dy = 0.;
+ dx = ND_lw(n), dy = 0.;
tx = MIN(dx, 3*(tp.x + dx - np.x));
hx = MIN(dx, 3*(hp.x + dx - np.x));
for (i = 0; i < cnt; i++) {
shape_desc *shape;
void *shape_info;
pointf coord;
- double width, height;
+ double width, height; /* inches */
boxf bb;
- int ht, lw, rw;
+ double ht, lw, rw;
textlabel_t *label;
void *alg;
char state;
#define ND_heapindex(n) (n)->u.heapindex
#define ND_height(n) (n)->u.height
#define ND_hops(n) (n)->u.hops
-#define ND_ht_i(n) (n)->u.ht
+#define ND_ht(n) (n)->u.ht
#define ND_id(n) (n)->u.id
#define ND_in(n) (n)->u.in
#define ND_inleaf(n) (n)->u.inleaf
#define ND_label(n) (n)->u.label
#define ND_lim(n) (n)->u.lim
#define ND_low(n) (n)->u.low
-#define ND_lw_i(n) (n)->u.lw
+#define ND_lw(n) (n)->u.lw
#define ND_mark(n) (n)->u.mark
#define ND_mval(n) (n)->u.mval
#define ND_n_cluster(n) (n)->u.n_cluster
#define ND_priority(n) (n)->u.priority
#define ND_rank(n) (n)->u.rank
#define ND_ranktype(n) (n)->u.ranktype
-#define ND_rw_i(n) (n)->u.rw
+#define ND_rw(n) (n)->u.rw
#define ND_save_in(n) (n)->u.save_in
#define ND_save_out(n) (n)->u.save_out
#define ND_shape(n) (n)->u.shape
int w;
w = ND_xsize(n) = POINTS(ND_width(n));
- ND_lw_i(n) = ND_rw_i(n) = w / 2;
- ND_ht_i(n) = ND_ysize(n) = POINTS(ND_height(n));
+ ND_lw(n) = ND_rw(n) = w / 2;
+ ND_ht(n) = ND_ysize(n) = POINTS(ND_height(n));
}
dimen = ED_label(orig)->dimen;
v = virtual_node(g);
ND_label(v) = ED_label(orig);
- ND_lw_i(v) = GD_nodesep(v->graph->root);
+ ND_lw(v) = GD_nodesep(v->graph->root);
if (!ED_label_ontop(orig)) {
if (GD_flip(g->root)) {
- ND_ht_i(v) = dimen.x;
- ND_rw_i(v) = dimen.y;
+ ND_ht(v) = dimen.x;
+ ND_rw(v) = dimen.y;
} else {
- ND_ht_i(v) = dimen.y;
- ND_rw_i(v) = dimen.x;
+ ND_ht(v) = dimen.y;
+ ND_rw(v) = dimen.x;
}
}
return v;
incr_width(graph_t * g, node_t * v)
{
int width = GD_nodesep(g) / 2;
- ND_lw_i(v) += width;
- ND_rw_i(v) += width;
+ ND_lw(v) += width;
+ ND_rw(v) += width;
}
static node_t*
r = ND_rank(vn);
make_slots(g, r, ND_order(vn), 2);
rv = virtual_node(g);
- ND_lw_i(rv) = ND_lw_i(vn);
- ND_rw_i(rv) = ND_rw_i(vn);
+ ND_lw(rv) = ND_lw(vn);
+ ND_rw(rv) = ND_rw(vn);
ND_rank(rv) = ND_rank(vn);
ND_order(rv) = ND_order(vn) + 1;
GD_rank(g)[r].v[ND_order(rv)] = rv;
extern void install_in_rank(Agraph_t *, Agnode_t *);
extern int is_cluster(Agraph_t *);
extern void dot_compoundEdges(Agraph_t *);
- extern Agedge_t *make_aux_edge(Agnode_t *, Agnode_t *, int, int);
+ extern Agedge_t *make_aux_edge(Agnode_t *, Agnode_t *, double, int);
extern void mark_clusters(Agraph_t *);
extern void mark_lowclusters(Agraph_t *);
extern int mergeable(edge_t * e, edge_t * f);
for (i = GD_minrank(g); i <= GD_maxrank(g); i++) {
n_nodes += GD_rank(g)[i].n;
if ((n = GD_rank(g)[i].v[0]))
- sd.LeftBound = MIN(sd.LeftBound, (ND_coord(n).x - ND_lw_i(n)));
+ sd.LeftBound = MIN(sd.LeftBound, (ND_coord(n).x - ND_lw(n)));
if (GD_rank(g)[i].n && (n = GD_rank(g)[i].v[GD_rank(g)[i].n - 1]))
- sd.RightBound = MAX(sd.RightBound, (ND_coord(n).x + ND_rw_i(n)));
+ sd.RightBound = MAX(sd.RightBound, (ND_coord(n).x + ND_rw(n)));
sd.LeftBound -= MINW;
sd.RightBound += MINW;
* the original value here.
*/
if (ND_node_type(n) == NORMAL) {
- int tmp = ND_rw_i(n);
- ND_rw_i(n) = ND_mval(n);
+ double tmp = ND_rw(n);
+ ND_rw(n) = ND_mval(n);
ND_mval(n) = tmp;
}
for (k = 0; (e = ND_other(n).list[k]); k++) {
if (r > 0)
sizey = ND_coord(GD_rank(g)[r-1].v[0]).y - ND_coord(n).y;
else
- sizey = ND_ht_i(n);
+ sizey = ND_ht(n);
}
else if (r == GD_minrank(g)) {
sizey = ND_coord(n).y - ND_coord(GD_rank(g)[r+1].v[0]).y;
tp = add_pointfs(ND_coord(tn), ED_tail_port(e).p);
hp = add_pointfs(ND_coord(hn), ED_head_port(e).p);
- stepy = (cnt > 1) ? ND_ht_i(tn) / (double)(cnt - 1) : 0.;
- dy = tp.y - ((cnt > 1) ? ND_ht_i(tn) / 2. : 0.);
+ stepy = (cnt > 1) ? ND_ht(tn) / (double)(cnt - 1) : 0.;
+ dy = tp.y - ((cnt > 1) ? ND_ht(tn) / 2. : 0.);
for (i = 0; i < cnt; i++) {
e = edges[ind + i];
dot_position(auxg);
/* reposition */
- midx = (ND_coord(tn).x - ND_rw_i(tn) + ND_coord(hn).x + ND_lw_i(hn))/2;
+ midx = (ND_coord(tn).x - ND_rw(tn) + ND_coord(hn).x + ND_lw(hn))/2;
midy = (ND_coord(auxt).x + ND_coord(auxh).x)/2;
for (n = GD_nlist(auxg); n; n = ND_next(n)) {
if (n == auxt) {
pn = 7;
}
else {
- lb.LL.x = ND_coord(ln).x - ND_lw_i(ln);
- lb.UR.x = ND_coord(ln).x + ND_rw_i(ln);
- lb.UR.y = ND_coord(ln).y + ND_ht_i(ln)/2;
+ lb.LL.x = ND_coord(ln).x - ND_lw(ln);
+ lb.UR.x = ND_coord(ln).x + ND_rw(ln);
+ lb.UR.y = ND_coord(ln).y + ND_ht(ln)/2;
ydelta = ND_coord(ln).y - GD_rank(g)[ND_rank(tn)].ht1 -
ND_coord(tn).y + GD_rank(g)[ND_rank(tn)].ht2;
ydelta /= 6.;
continue;
if (ND_label(vn))
resize_vn(vn, p->boxes[b].LL.x, p->boxes[b].UR.x,
- p->boxes[b].UR.x + ND_rw_i(vn));
+ p->boxes[b].UR.x + ND_rw(vn));
else
resize_vn(vn, p->boxes[b].LL.x, (p->boxes[b].LL.x +
p->boxes[b].UR.x) / 2,
int lx, cx, rx;
{
ND_coord(vn).x = cx;
- ND_lw_i(vn) = cx - lx, ND_rw_i(vn) = rx - cx;
+ ND_lw(vn) = cx - lx, ND_rw(vn) = rx - cx;
}
/* side > 0 means right. side < 0 means left */
left_cl = right_cl = NULL;
/* give this node all the available space up to its neighbors */
- b = (double)(ND_coord(vn).x - ND_lw_i(vn) - FUDGE);
+ b = (double)(ND_coord(vn).x - ND_lw(vn) - FUDGE);
if ((left = neighbor(vn, ie, oe, -1))) {
if ((left_cl = cl_bound(vn, left)))
nb = GD_bb(left_cl).UR.x + (double)(sp->Splinesep);
if ((ND_node_type(vn) == VIRTUAL) && (ND_label(vn)))
b = (double)(ND_coord(vn).x + 10);
else
- b = (double)(ND_coord(vn).x + ND_rw_i(vn) + FUDGE);
+ b = (double)(ND_coord(vn).x + ND_rw(vn) + FUDGE);
if ((right = neighbor(vn, ie, oe, 1))) {
if ((right_cl = cl_bound(vn, right)))
nb = GD_bb(right_cl).LL.x - (double)(sp->Splinesep);
else {
- nb = ND_coord(right).x - ND_lw_i(right);
+ nb = ND_coord(right).x - ND_lw(right);
if (ND_node_type(right) == NORMAL)
nb -= GD_nodesep(g) / 2.;
else
rv.UR.x = MAX(ROUND(b), sp->RightBound);
if ((ND_node_type(vn) == VIRTUAL) && (ND_label(vn)))
- rv.UR.x -= ND_rw_i(vn);
+ rv.UR.x -= ND_rw(vn);
rv.LL.y = ND_coord(vn).y - GD_rank(g)[ND_rank(vn)].ht1;
rv.UR.y = ND_coord(vn).y + GD_rank(g)[ND_rank(vn)].ht2;
n->name = "virtual";
n->graph = g;
ND_node_type(n) = VIRTUAL;
- ND_lw_i(n) = ND_rw_i(n) = 1;
- ND_ht_i(n) = 1;
+ ND_lw(n) = ND_rw(n) = 1;
+ ND_ht(n) = 1;
ND_UF_size(n) = 1;
alloc_elist(4, ND_in(n));
alloc_elist(4, ND_out(n));
dimen.x = dimen.y;
dimen.y = f;
}
- ND_ht_i(vn) = dimen.y;
- h2 = ND_ht_i(vn) / 2;
- ND_lw_i(vn) = ND_rw_i(vn) = dimen.x / 2;
+ ND_ht(vn) = dimen.y;
+ h2 = ND_ht(vn) / 2;
+ ND_lw(vn) = ND_rw(vn) = dimen.x / 2;
ND_label(vn) = ED_label(e);
ND_coord(vn).y = ypos + h2;
ve = virtual_edge(vn, e->tail, e); /* was NULL? */
- ED_tail_port(ve).p.x = -ND_lw_i(vn);
- ED_head_port(ve).p.x = ND_rw_i(e->tail);
+ ED_tail_port(ve).p.x = -ND_lw(vn);
+ ED_head_port(ve).p.x = ND_rw(e->tail);
ED_edge_type(ve) = FLATORDER;
ve = virtual_edge(vn, e->head, e);
- ED_tail_port(ve).p.x = ND_rw_i(vn);
- ED_head_port(ve).p.x = ND_lw_i(e->head);
+ ED_tail_port(ve).p.x = ND_rw(vn);
+ ED_head_port(ve).p.x = ND_lw(e->head);
ED_edge_type(ve) = FLATORDER;
/* another assumed symmetry of ht1/ht2 of a label node */
if (GD_rank(g)[r - 1].ht1 < h2)
#endif
static void
-largeMinlen (int l)
+largeMinlen (double l)
{
agerr (AGERR, "Edge length %d larger than maximum %u allowed.\nCheck for overwide node(s).\n", l, USHRT_MAX);
exit (1);
return go(u, v);
}
-edge_t *make_aux_edge(node_t * u, node_t * v, int len, int wt)
+edge_t *make_aux_edge(node_t * u, node_t * v, double len, int wt)
{
edge_t *e;
e->head = v;
if (len > USHRT_MAX)
largeMinlen (len);
- ED_minlen(e) = len;
+ ED_minlen(e) = ROUND(len);
ED_weight(e) = wt;
fast_edge(e);
return e;
int i, j, k;
int sw; /* self width */
int m0, m1;
- int width, sep[2];
+ double width;
+ int sep[2];
int nodesep; /* separation between nodes on same rank */
edge_t *e, *e0, *e1, *ff;
node_t *u, *v, *t0, *h0;
}
/* make edges to constrain left-to-right ordering */
for (i = GD_minrank(g); i <= GD_maxrank(g); i++) {
- int last;
+ double last;
last = rank[i].v[0]->u.rank = 0;
nodesep = sep[i & 1];
for (j = 0; j < rank[i].n; j++) {
u = rank[i].v[j];
- ND_mval(u) = ND_rw_i(u); /* keep it somewhere safe */
+ ND_mval(u) = ND_rw(u); /* keep it somewhere safe */
if (ND_other(u).size > 0) { /* compute self size */
/* FIX: dot assumes all self-edges go to the right. This
* is no longer true, though makeSelfEdge still attempts to
sw += selfRightSpace (e);
}
}
- ND_rw_i(u) += sw; /* increment to include self edges */
+ ND_rw(u) += sw; /* increment to include self edges */
}
v = rank[i].v[j + 1];
if (v) {
- width = ND_rw_i(u) + ND_lw_i(v) + nodesep;
+ width = ND_rw(u) + ND_lw(v) + nodesep;
e0 = make_aux_edge(u, v, width, 0);
last = (ND_rank(v) = last + width);
}
e1 = ff;
}
m0 = (ED_minlen(e) * GD_nodesep(g)) / 2;
- m1 = m0 + ND_rw_i(e0->head) + ND_lw_i(e0->tail);
+ m1 = m0 + ND_rw(e0->head) + ND_lw(e0->tail);
/* these guards are needed because the flat edges
* work very poorly with cluster layout */
if (canreach(e0->tail, e0->head) == FALSE)
make_aux_edge(e0->head, e0->tail, m1,
ED_weight(e));
- m1 = m0 + ND_rw_i(e1->tail) + ND_lw_i(e1->head);
+ m1 = m0 + ND_rw(e1->tail) + ND_lw(e1->head);
if (canreach(e1->head, e1->tail) == FALSE)
make_aux_edge(e1->tail, e1->head, m1,
ED_weight(e));
h0 = e->tail;
}
- width = ND_rw_i(t0) + ND_lw_i(h0);
+ width = ND_rw(t0) + ND_lw(h0);
m0 = ED_minlen(e) * GD_nodesep(g) + width;
if ((e0 = find_fast_edge(t0, h0))) {
&& (i == ND_save_out(n).size / 2 - 1)) {
node_t *u = ND_save_out(n).list[i]->head;
node_t *v = ND_save_out(n).list[i + 1]->head;
- int width = ND_rw_i(u) + ND_lw_i(v) + GD_nodesep(g);
+ double width = ND_rw(u) + ND_lw(v) + GD_nodesep(g);
m0 = width / 2 - 1;
}
#endif
u = GD_rank(g->root)[r].v[i];
/* can't use "is_a_vnode_of" because elists are swapped */
if ((ND_node_type(u) == NORMAL) || vnode_not_related_to(g, u)) {
- make_aux_edge(u, GD_ln(g), CL_OFFSET + ND_rw_i(u), 0);
+ make_aux_edge(u, GD_ln(g), CL_OFFSET + ND_rw(u), 0);
break;
}
}
i++) {
u = ND_rank(g->root)[r].v[i];
if ((ND_node_type(u) == NORMAL) || vnode_not_related_to(g, u)) {
- make_aux_edge(GD_rn(g), u, CL_OFFSET + ND_lw_i(u), 0);
+ make_aux_edge(GD_rn(g), u, CL_OFFSET + ND_lw(u), 0);
break;
}
}
n = rank[r].v[i];
/* assumes symmetry, ht1 = ht2 */
- ht2 = (ND_ht_i(n) + 1) / 2;
+ ht2 = (ROUND(ND_ht(n)) + 1) / 2;
/* have to look for high self-edge labels, too */
for (c = 1; (ND_node_type(v) != NORMAL) && c < rnkn; c++)
v = GD_rank(g)[r].v[c];
if (ND_node_type(v) == NORMAL) {
- x = ND_coord(v).x - ND_lw_i(v);
+ x = ND_coord(v).x - ND_lw(v);
LL.x = MIN(LL.x, x);
}
else continue;
v = GD_rank(g)[r].v[rnkn - 1];
for (c = rnkn-2; ND_node_type(v) != NORMAL; c--)
v = GD_rank(g)[r].v[c];
- x = ND_coord(v).x + ND_rw_i(v);
+ x = ND_coord(v).x + ND_rw(v);
UR.x = MAX(UR.x, x);
}
offset = CL_OFFSET;
{
dot_nodesize(leaf, GD_flip(leaf->graph));
ND_coord(leaf).y = lbound.y;
- ND_coord(leaf).x = lbound.x + ND_lw_i(leaf);
- lbound.x = lbound.x + ND_lw_i(leaf) + ND_rw_i(leaf) + GD_nodesep(leaf->graph);
+ ND_coord(leaf).x = lbound.x + ND_lw(leaf);
+ lbound.x = lbound.x + ND_lw(leaf) + ND_rw(leaf) + GD_nodesep(leaf->graph);
return lbound;
}
if (ND_UF_size(leader) <= 1)
return;
- lbound.x = ND_coord(leader).x - ND_lw_i(leader);
+ lbound.x = ND_coord(leader).x - ND_lw(leader);
lbound.y = ND_coord(leader).y;
lbound = resize_leaf(leader, lbound);
if (ND_out(leader).size > 0) { /* in-edge leaves */
continue;
}
make_aux_edge(ln, v,
- ND_lw_i(v) + CL_OFFSET + GD_border(g)[LEFT_IX].x, 0);
+ ND_lw(v) + CL_OFFSET + GD_border(g)[LEFT_IX].x, 0);
v = GD_rank(g)[r].v[GD_rank(g)[r].n - 1];
make_aux_edge(v, rn,
- ND_rw_i(v) + CL_OFFSET + GD_border(g)[RIGHT_IX].x,
- 0);
+ ND_rw(v) + CL_OFFSET + GD_border(g)[RIGHT_IX].x, 0);
}
}
rv = new;
else {
rv = UF_union(cur, new);
- ND_ht_i(rv) = MAX(ND_ht_i(cur), ND_ht_i(new));
- ND_lw_i(rv) = ND_lw_i(cur) + ND_lw_i(new) + GD_nodesep(g) / 2;
- ND_rw_i(rv) = ND_rw_i(cur) + ND_rw_i(new) + GD_nodesep(g) / 2;
+ ND_ht(rv) = MAX(ND_ht(cur), ND_ht(new));
+ ND_lw(rv) = ND_lw(cur) + ND_lw(new) + GD_nodesep(g) / 2;
+ ND_rw(rv) = ND_rw(cur) + ND_rw(new) + GD_nodesep(g) / 2;
}
return rv;
}
/* (x1,y1),(x2,y2) is a segment that must cross the node boundary */
x1 = ND_coord(u).x;
y1 = ND_coord(u).y; /* center of node */
- r = MAX(ND_lw_i(u) + ND_rw_i(u), ND_ht_i(u) + GD_ranksep(u->graph)); /* far away */
+ r = MAX(ND_lw(u) + ND_rw(u), ND_ht(u) + GD_ranksep(u->graph)); /* far away */
x2 = x * r + ND_coord(u).x;
y2 = y * r + ND_coord(u).y;
{ /* now move (x1,y1) to the node boundary */
prt.p.y = ROUND(y1);
prt.bp = 0;
prt.order =
- (MC_SCALE * (ND_lw_i(u) + prt.p.x)) / (ND_lw_i(u) + ND_rw_i(u));
+ (MC_SCALE * (ND_lw(u) + prt.p.x)) / (ND_lw(u) + ND_rw(u));
prt.constrained = FALSE;
prt.defined = TRUE;
prt.clip = FALSE;
ND_width(n) = w;
ND_height(n) = h;
ND_xsize(n) = POINTS(w);
- ND_lw_i(n) = ND_rw_i(n) = w2;
- ND_ht_i(n) = ND_ysize(n) = h_i;
+ ND_lw(n) = ND_rw(n) = w2;
+ ND_ht(n) = ND_ysize(n) = h_i;
vertices = ((polygon_t *) ND_shape_info(n))->vertices;
- vertices[0].x = ND_rw_i(n);
+ vertices[0].x = ND_rw(n);
vertices[0].y = h2;
- vertices[1].x = -ND_lw_i(n);
+ vertices[1].x = -ND_lw(n);
vertices[1].y = h2;
- vertices[2].x = -ND_lw_i(n);
+ vertices[2].x = -ND_lw(n);
vertices[2].y = -h2;
- vertices[3].x = ND_rw_i(n);
+ vertices[3].x = ND_rw(n);
vertices[3].y = -h2;
}
}
c = cos(2.0 * M_PI * j / sides + adj);
s = sin(2.0 * M_PI * j / sides + adj);
if (pmargin->doAdd) {
- polyp.x = c*(ND_lw_i(n)+ND_rw_i(n)+pmargin->x) / 2.0;
- polyp.y = s*(ND_ht_i(n)+pmargin->y) / 2.0;
+ polyp.x = c*(ND_lw(n)+ND_rw(n)+pmargin->x) / 2.0;
+ polyp.y = s*(ND_ht(n)+pmargin->y) / 2.0;
}
else {
- polyp.x = pmargin->x * c * (ND_lw_i(n) + ND_rw_i(n)) / 2.0;
- polyp.y = pmargin->y * s * ND_ht_i(n) / 2.0;
+ polyp.x = pmargin->x * c * (ND_lw(n) + ND_rw(n)) / 2.0;
+ polyp.y = pmargin->y * s * ND_ht(n) / 2.0;
}
}
obs->ps[sides - j - 1].x = polyp.x + ND_coord(n).x;
/* CW order */
pt = ND_coord(n);
if (pmargin->doAdd) {
- obs->ps[0] = genPt(-ND_lw_i(n)-pmargin->x, -ND_ht_i(n)-pmargin->y,pt);
- obs->ps[1] = genPt(-ND_lw_i(n)-pmargin->x, ND_ht_i(n)+pmargin->y,pt);
- obs->ps[2] = genPt(ND_rw_i(n)+pmargin->x, ND_ht_i(n)+pmargin->y,pt);
- obs->ps[3] = genPt(ND_rw_i(n)+pmargin->x, -ND_ht_i(n)-pmargin->y,pt);
+ obs->ps[0] = genPt(-ND_lw(n)-pmargin->x, -ND_ht(n)-pmargin->y,pt);
+ obs->ps[1] = genPt(-ND_lw(n)-pmargin->x, ND_ht(n)+pmargin->y,pt);
+ obs->ps[2] = genPt(ND_rw(n)+pmargin->x, ND_ht(n)+pmargin->y,pt);
+ obs->ps[3] = genPt(ND_rw(n)+pmargin->x, -ND_ht(n)-pmargin->y,pt);
}
else {
- obs->ps[0] = recPt(-ND_lw_i(n), -ND_ht_i(n), pt, pmargin);
- obs->ps[1] = recPt(-ND_lw_i(n), ND_ht_i(n), pt, pmargin);
- obs->ps[2] = recPt(ND_rw_i(n), ND_ht_i(n), pt, pmargin);
- obs->ps[3] = recPt(ND_rw_i(n), -ND_ht_i(n), pt, pmargin);
+ obs->ps[0] = recPt(-ND_lw(n), -ND_ht(n), pt, pmargin);
+ obs->ps[1] = recPt(-ND_lw(n), ND_ht(n), pt, pmargin);
+ obs->ps[2] = recPt(ND_rw(n), ND_ht(n), pt, pmargin);
+ obs->ps[3] = recPt(ND_rw(n), -ND_ht(n), pt, pmargin);
}
break;
default:
int w;
w = ND_xsize(n) = POINTS(ND_width(n));
- ND_lw_i(n) = ND_rw_i(n) = w / 2;
- ND_ht_i(n) = ND_ysize(n) = POINTS(ND_height(n));
+ ND_lw(n) = ND_rw(n) = w / 2;
+ ND_ht(n) = ND_ysize(n) = POINTS(ND_height(n));
}
gv_nodesize(n,GD_flip(n->graph));
finishNode (n);
/*fprintf(stderr,"%s coord %.3g %.3g ht %d width %d\n",
- n->name, ND_coord(n).x, ND_coord(n).y, ND_ht_i(n),
- ND_rw_i(n)+ND_lw_i(n));*/
+ n->name, ND_coord(n).x, ND_coord(n).y, ND_ht(n),
+ ND_rw(n)+ND_lw(n));*/
break;
default: abort();
}
A = malloc(A_size*sizeof(pointf));
}
- xsize = ((ND_lw_i(n) + ND_rw_i(n)) / POINTS(ND_width(n))) * 16.0;
- ysize = ((ND_ht_i(n)) / POINTS(ND_height(n))) * 16.0;
+ xsize = ((ND_lw(n) + ND_rw(n)) / POINTS(ND_width(n))) * 16.0;
+ ysize = ((ND_ht(n)) / POINTS(ND_height(n))) * 16.0;
for (j = 0; j < peripheries; j++) {
for (i = 0; i < sides; i++) {
/* make rv relative to PNG canvas */
if (job->rotation) {
- rv.x = ( (p.y - job->pad.y) - ND_coord(n).y + ND_lw_i(n) ) * Scale + NODE_PAD;
- rv.y = (-(p.x - job->pad.x) + ND_coord(n).x + ND_ht_i(n) / 2.) * Scale + NODE_PAD;
+ rv.x = ( (p.y - job->pad.y) - ND_coord(n).y + ND_lw(n) ) * Scale + NODE_PAD;
+ rv.y = (-(p.x - job->pad.x) + ND_coord(n).x + ND_ht(n) / 2.) * Scale + NODE_PAD;
} else {
- rv.x = ( (p.x - job->pad.x) - ND_coord(n).x + ND_lw_i(n) ) * Scale + NODE_PAD;
- rv.y = (-(p.y - job->pad.y) + ND_coord(n).y + ND_ht_i(n) / 2.) * Scale + NODE_PAD;
+ rv.x = ( (p.x - job->pad.x) - ND_coord(n).x + ND_lw(n) ) * Scale + NODE_PAD;
+ rv.y = (-(p.y - job->pad.y) + ND_coord(n).y + ND_ht(n) / 2.) * Scale + NODE_PAD;
}
return rv;
}
if (shapeOf(n) != SH_POINT) {
PNGfile = nodefile(job->output_filename, n);
- width = (ND_lw_i(n) + ND_rw_i(n)) * Scale + 2 * NODE_PAD;
- height = (ND_ht_i(n) ) * Scale + 2 * NODE_PAD;
+ width = (ND_lw(n) + ND_rw(n)) * Scale + 2 * NODE_PAD;
+ height = (ND_ht(n) ) * Scale + 2 * NODE_PAD;
im = gdImageCreate(width, height);
/* make background transparent */