static int edgecmp(Agedge_t **, Agedge_t **);
static void make_flat_edge(spline_info_t*, path *, Agedge_t **, int, int, int);
static void make_regular_edge(spline_info_t*, path *, Agedge_t **, int, int, int);
-static boxf makeregularend(boxf, int, int);
+static boxf makeregularend(boxf, int, double);
static boxf maximal_bbox(spline_info_t*, Agnode_t *, Agedge_t *, Agedge_t *);
static Agnode_t *neighbor(Agnode_t *, Agedge_t *, Agedge_t *, int);
static void place_vnlabel(Agnode_t *);
}
for (i = 0; i < n_edges;) {
+ boolean havePorts;
ind = i;
le0 = getmainedge((e0 = edges[i++]));
- ea = (ED_tail_port(e0).defined
- || ED_head_port(e0).defined) ? e0 : le0;
+ if (ED_tail_port(e0).defined || ED_head_port(e0).defined) {
+ havePorts = TRUE;
+ ea = e0;
+ } else {
+ havePorts = FALSE;
+ ea = le0;
+ }
if (ED_tree_index(ea) & BWDEDGE) {
MAKEFWDEDGE(&fwdedgea.out, ea);
ea = &fwdedgea.out;
if (le0 != (le1 = getmainedge((e1 = edges[i]))))
break;
if (ED_adjacent(e0)) continue; /* all flat adjacent edges at once */
- eb = (ED_tail_port(e1).defined
- || ED_head_port(e1).defined) ? e1 : le1;
+ if (ED_tail_port(e1).defined || ED_head_port(e1).defined) {
+ if (!havePorts) break;
+ else
+ eb = e1;
+ } else {
+ if (havePorts) break;
+ else
+ eb = le1;
+ }
if (ED_tree_index(eb) & BWDEDGE) {
MAKEFWDEDGE(&fwdedgeb.out, eb);
eb = &fwdedgeb.out;
GD_ranksep(auxg) = GD_ranksep(g);
//copy node attrs to auxg
-// list = g->root->univ->nodeattr->list;
- sym=agnxtattr(agroot(g),AGNODE,NULL); //get the first attr.
- while ((sym = agnxtattr(agroot(g),AGNODE,sym))) {
- agattr (auxg, AGNODE,sym->name, sym->defval );
- }
+ sym=agnxtattr(agroot(g),AGNODE,NULL); //get the first attr.
+ for (; sym; sym = agnxtattr(agroot(g),AGNODE,sym))
+ agattr (auxg, AGNODE,sym->name, sym->defval);
//copy edge attributes
- sym=agnxtattr(agroot(g),AGEDGE,NULL); //get the first attr.
- while ((sym = agnxtattr(agroot(g),AGEDGE,sym))) {
+ sym=agnxtattr(agroot(g),AGEDGE,NULL); //get the first attr.
+ for (; sym; sym = agnxtattr(agroot(g),AGEDGE,sym))
agattr (auxg, AGEDGE,sym->name, sym->defval);
- }
if (!agattr(auxg,AGEDGE, "headport", NULL))
agattr(auxg,AGEDGE, "headport", "");
{
edge_t* e = agedge(g, tn, hn,NULL,1);
/* for (; ED_edge_type(orig) != NORMAL; orig = ED_to_orig(orig)); */
+ agbindrec(e, "Agedgeinfo_t", sizeof(Agedgeinfo_t), TRUE);
agcopyattr (orig, e);
/*
if (orig->tail != ND_alg(tn)) {
* nodes in a given rank can differ in height.
* for now, regular edges always go from top to bottom
*/
-static boxf makeregularend(boxf b, int side, int y)
+static boxf makeregularend(boxf b, int side, double y)
{
boxf newb;
switch (side) {