]> granicus.if.org Git - poly2tri-c/commitdiff
Add changes according to commit 186e581d4152 in poly2tri (C++)
authorBarak Itkin <lightningismyname@gmail.com>
Sat, 18 May 2013 07:29:26 +0000 (10:29 +0300)
committerBarak Itkin <barakitk@barak-lap-ubuntu-server.(none)>
Sat, 18 May 2013 08:42:19 +0000 (11:42 +0300)
poly2tri-c/p2t/sweep/sweep_context.c

index 9ed52d5669f8a0beb704d19f8cab27c2e99b693e..a2738fde90afd8d7f6487733c357501d91c4efb2 100644 (file)
@@ -269,15 +269,24 @@ p2t_sweepcontext_remove_from_map (P2tSweepContext *THIS, P2tTriangle* triangle)
 void
 p2t_sweepcontext_mesh_clean (P2tSweepContext *THIS, P2tTriangle* triangle)
 {
+  GQueue triangles = G_QUEUE_INIT;
   int i;
-  if (triangle != NULL && !p2t_triangle_is_interior (triangle))
+
+  g_queue_push_tail (&triangles, triangle);
+
+  while (! g_queue_is_empty (&triangles))
     {
-      p2t_triangle_is_interior_b (triangle, TRUE);
-      g_ptr_array_add (THIS->triangles_, triangle);
-      for (i = 0; i < 3; i++)
+      P2tTriangle* t = (P2tTriangle*) g_queue_pop_tail (&triangles);
+
+      if (t != NULL && !p2t_triangle_is_interior (t))
         {
-          if (!triangle->constrained_edge[i])
-            p2t_sweepcontext_mesh_clean (THIS, p2t_triangle_get_neighbor (triangle, i));
+          p2t_triangle_is_interior_b (t, TRUE);
+          g_ptr_array_add (THIS->triangles_, t);
+          for (i = 0; i < 3; i++)
+            {
+              if (! t->constrained_edge[i])
+                g_queue_push_tail (&triangles, p2t_triangle_get_neighbor (t, i));
+            }
         }
     }
 }