]> granicus.if.org Git - graphviz/commitdiff
Reset saved node in three *_inside function before doing a layout.
authorEmden R. Gansner <erg@gentoo.local>
Sun, 25 Oct 2015 19:50:21 +0000 (15:50 -0400)
committerEmden R. Gansner <erg@gentoo.local>
Sun, 25 Oct 2015 19:50:21 +0000 (15:50 -0400)
lib/common/shapes.c
lib/gvc/gvlayout.c

index 0567e4569249698cdf89fcbaf199e8b276973b50..6db30dec467385bf775bba2f35d90994e1903eac 100644 (file)
@@ -2246,9 +2246,16 @@ static boolean poly_inside(inside_t * inside_context, pointf p)
 
     int i, i1, j, s;
     pointf P, Q, R;
-    boxf *bp = inside_context->s.bp;
-    node_t *n = inside_context->s.n;
+    boxf *bp;
+    node_t *n;
 
+    if (!inside_context) {
+       lastn = NULL;
+       return FALSE;
+    }
+
+    bp = inside_context->s.bp;
+    n = inside_context->s.n;
     P = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n)));
 
     /* Quick test if port rectangle is target */
@@ -3029,8 +3036,14 @@ static boolean point_inside(inside_t * inside_context, pointf p)
     static node_t *lastn;      /* last node argument */
     static double radius;
     pointf P;
-    node_t *n = inside_context->s.n;
+    node_t *n;
 
+    if (!inside_context) {
+       lastn = NULL;
+       return FALSE;
+    }
+
+    n = inside_context->s.n;
     P = ccwrotatepf(p, 90 * GD_rankdir(agraphof(n)));
 
     if (n != lastn) {
@@ -3925,6 +3938,10 @@ static boolean star_inside(inside_t * inside_context, pointf p)
     static pointf *vertex;
     static pointf O;           /* point (0,0) */
 
+    if (!inside_context) {
+       lastn = NULL;
+       return FALSE;
+    }
     boxf *bp = inside_context->s.bp;
     node_t *n = inside_context->s.n;
     pointf P, Q, R;
@@ -4086,3 +4103,12 @@ void resolvePorts(edge_t * e)
        ED_head_port(e) =
            resolvePort(aghead(e), agtail(e), &ED_head_port(e));
 }
+
+void gv_initShapes()
+{
+    pointf p;
+    poly_inside(NULL, p);
+    point_inside(NULL, p);
+    star_inside(NULL, p);
+}
+
index c1eb9a03d0fe16583ffe9e88b6e7b2925a1d9307..aeeb4ad373e739deae8e077f2bd924d58be0982c 100644 (file)
@@ -30,6 +30,7 @@
 extern void graph_init(Agraph_t *g, boolean use_rankdir);
 extern void graph_cleanup(Agraph_t *g);
 extern void gv_fixLocale (int set);
+extern void gv_initShapes ();
 
 int gvlayout_select(GVC_t * gvc, const char *layout)
 {
@@ -81,6 +82,7 @@ int gvLayoutJobs(GVC_t * gvc, Agraph_t * g)
     gv_fixLocale (1);
     graph_init(g, gvc->layout.features->flags & LAYOUT_USES_RANKDIR);
     GD_drawing(agroot(g)) = GD_drawing(g);
+    gv_initShapes ();
     if (gvle && gvle->layout) {
        gvle->layout(g);