]> granicus.if.org Git - graphviz/commitdiff
Fix node adjustment functions to have a return value indicated whether
authorerg <devnull@localhost>
Tue, 17 Jan 2006 22:56:22 +0000 (22:56 +0000)
committererg <devnull@localhost>
Tue, 17 Jan 2006 22:56:22 +0000 (22:56 +0000)
nodes were moved or not.

lib/neatogen/adjust.c
lib/neatogen/adjust.h
lib/neatogen/constraint.c

index d79e1b09ba45e63126f3b3827e21a1440d2ef9b3..874a79bf386c60f1e5638f5783bc6525523f8817 100644 (file)
@@ -726,7 +726,7 @@ static adjust_data *getAdjustMode(char *s)
  * Use flag value to determine if and how to remove
  * node overlaps.
  */
-void 
+int 
 removeOverlapAs(graph_t * G, char* flag)
 {
     /* int          userWindow = 0; */
@@ -736,13 +736,13 @@ removeOverlapAs(graph_t * G, char* flag)
     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);
@@ -751,10 +751,10 @@ removeOverlapAs(graph_t * G, char* flag)
 /* 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); */
@@ -773,13 +773,13 @@ removeOverlapAs(graph_t * G, char* flag)
            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 */
@@ -802,22 +802,27 @@ removeOverlapAs(graph_t * G, char* flag)
     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:
index dec8d4b4540775e2526afa7b03070b2b4659bf6e..f2b9c8b5c33aef0df5bf73f0c8b4a88d3714f802 100644 (file)
@@ -31,12 +31,12 @@ typedef enum {
 } 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
 }
index 387cb03ec6046a63f291dc06ed592ac87f8858ae..bb900a5a88d86c85e7712f7794b7e721457100f3 100644 (file)
@@ -621,10 +621,10 @@ static void initItem(node_t * n, nitem * p, double margin)
  * 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;
@@ -680,8 +680,11 @@ void cAdjust(graph_t * g, int mode)
            ND_pos(n)[1] = PS2INCH(pt.y) / SCALE;
            p++;
        }
+       ret = 1;
     }
+    else ret = 0;
     free(nlist);
+    return ret;
 }
 
 typedef struct {
@@ -853,7 +856,7 @@ static double computeScale(pointf * aarr, int m)
  * "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);
@@ -886,7 +889,7 @@ void scAdjust(graph_t * g, int equal)
        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 {
@@ -895,7 +898,7 @@ void scAdjust(graph_t * g, int equal)
        if (m == 0) {           /* no overlaps */
            free(aarr);
            free(nlist);
-           return;
+           return 0;
        }
 
        if (equal) {
@@ -914,4 +917,5 @@ void scAdjust(graph_t * g, int equal)
     }
 
     free(nlist);
+    return 1;
 }