From: Barak Itkin Date: Sat, 19 May 2012 10:06:26 +0000 (+0300) Subject: Fix several bugs in p2tr_mesh_find_point_local2 X-Git-Tag: p2tc-0.1.0~67 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b07e6766e5e37c6e10f913e3bc3490fdd08eb7ee;p=poly2tri-c Fix several bugs in p2tr_mesh_find_point_local2 --- diff --git a/refine/mesh.c b/refine/mesh.c index 2272c6f..a770a96 100644 --- a/refine/mesh.c +++ b/refine/mesh.c @@ -216,18 +216,23 @@ p2tr_mesh_find_point_local2 (P2trMesh *self, gdouble *u, gdouble *v) { - P2trHashSet *checked_tris = p2tr_hash_set_new_default (); + P2trHashSet *checked_tris; GQueue to_check; P2trTriangle *result = NULL; - + + if (initial_guess == NULL) + return p2tr_mesh_find_point2(self, pt, u, v); + + checked_tris = p2tr_hash_set_new_default (); g_queue_init (&to_check); - + g_queue_push_head (&to_check, initial_guess); + while (! g_queue_is_empty (&to_check)) { P2trTriangle *tri = (P2trTriangle*) g_queue_pop_head (&to_check); p2tr_hash_set_insert (checked_tris, tri); - if (p2tr_triangle_contains_point2 (tri, pt, u, v)) + if (p2tr_triangle_contains_point2 (tri, pt, u, v) != P2TR_INTRIANGLE_OUT) { result = tri; break;