nodes were moved or not.
* Use flag value to determine if and how to remove
* node overlaps.
*/
-void
+int
removeOverlapAs(graph_t * G, char* flag)
{
/* int userWindow = 0; */
adjust_data *am;
if (agnnodes(G) < 2)
- return;
+ return 0;
if (flag == NULL)
- return;
+ return 0;
am = getAdjustMode(flag);
if (am->mode == AM_NONE)
- return;
+ return 0;
if (Verbose)
fprintf(stderr, "Adjusting %s using %s\n", G->name, am->print);
/* start_timer(); */
switch (am->mode) {
case AM_NSCALE:
- scAdjust(G, 1);
+ ret = scAdjust(G, 1);
break;
case AM_SCALEXY:
- scAdjust(G, 0);
+ ret = scAdjust(G, 0);
break;
case AM_PUSH:
/* scanAdjust (G, 1); */
cAdjust(G, am->mode);
break;
case AM_COMPRESS:
- scAdjust(G, -1);
+ ret = scAdjust(G, -1);
break;
default: /* to silence warnings */
break;
}
/* fprintf (stderr, "%s %.4f sec\n", am->attrib, elapsed_sec()); */
- return;
+ return ret;
}
/* create main array */
sites = 0;
/* fprintf (stderr, "old scale %.4f sec\n", elapsed_sec()); */
+ return ret;
}
/* removeOverlap:
*/
-void
+int
removeOverlap(graph_t * G)
{
- removeOverlapAs(G, agget(G, "overlap"));
+ return (removeOverlapAs(G, agget(G, "overlap")));
}
-void adjustNodes(graph_t * G)
+/* adjustNodes:
+ * Remove node overlap relying on graph's overlap attribute.
+ * Return non-zero if graph has changed.
+ */
+int adjustNodes(graph_t * G)
{
if (agnnodes(G) < 2)
- return;
+ return 0;
normalize(G);
- removeOverlap (G);
+ return removeOverlap (G);
}
/* expFactor:
} adjust_mode;
extern double expFactor(graph_t * G);
- extern void adjustNodes(graph_t * G);
+ extern int adjustNodes(graph_t * G);
extern void normalize(graph_t * g);
- extern void removeOverlap(graph_t * G);
- extern void removeOverlapAs(graph_t*, char*);
- extern void cAdjust(graph_t *, int);
- extern void scAdjust(graph_t *, int);
+ extern int removeOverlap(graph_t * G);
+ extern int removeOverlapAs(graph_t*, char*);
+ extern int cAdjust(graph_t *, int);
+ extern int scAdjust(graph_t *, int);
#ifdef __cplusplus
}
* mode = AM_ORTHO => first X, then Y
* mode = AM_ORTHO_YX => first Y, then X
*/
-void cAdjust(graph_t * g, int mode)
+int cAdjust(graph_t * g, int mode)
{
double margin;
- int i, nnodes = agnnodes(g);
+ int ret, i, nnodes = agnnodes(g);
nitem *nlist = N_GNEW(nnodes, nitem);
nitem *p = nlist;
node_t *n;
ND_pos(n)[1] = PS2INCH(pt.y) / SCALE;
p++;
}
+ ret = 1;
}
+ else ret = 0;
free(nlist);
+ return ret;
}
typedef struct {
* "Removing Node Overlapping in Graph Layout Using Constrained Optimization",
* Constraints,8(2):143--172, 2003.
*/
-void scAdjust(graph_t * g, int equal)
+int scAdjust(graph_t * g, int equal)
{
int nnodes = agnnodes(g);
info *nlist = N_GNEW(nnodes, info);
s.x = s.y = compress(nlist, nnodes);
if (s.x == 0) { /* overlaps exist */
free(nlist);
- return;
+ return 0;
}
fprintf(stderr, "compress %g \n", s.x);
} else {
if (m == 0) { /* no overlaps */
free(aarr);
free(nlist);
- return;
+ return 0;
}
if (equal) {
}
free(nlist);
+ return 1;
}