[Bf-blender-cvs] [57744df] master: Correct recent change to edge-net

Campbell Barton noreply at git.blender.org
Thu Jun 23 14:25:55 CEST 2016


Commit: 57744df38fef172edf7781f1e1bb48319f5ef066
Author: Campbell Barton
Date:   Thu Jun 23 22:19:09 2016 +1000
Branches: master
https://developer.blender.org/rB57744df38fef172edf7781f1e1bb48319f5ef066

Correct recent change to edge-net

Need account for cases where vertex connects a single edge.

===================================================================

M	source/blender/bmesh/intern/bmesh_polygon_edgenet.c

===================================================================

diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
index c142dca..5ef19b5 100644
--- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
+++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
@@ -309,36 +309,40 @@ walk_nofork:
 		BMEdge *e_next, *e_first;
 		e_first = v->e;
 		e_next = BM_DISK_EDGE_NEXT(e_first, v);  /* always skip this verts edge */
-		do {
-			BLI_assert(v->e != e_next);
-			if ((BM_ELEM_API_FLAG_TEST(e_next, EDGE_NET)) &&
-			    (bm_edge_flagged_radial_count(e_next) < 2))
-			{
-				BMVert *v_next;
 
-				v_next = BM_edge_other_vert(e_next, v);
+		/* in rare cases there may be edges with a single connecting vertex */
+		if (e_next != e_first) {
+			do {
+				if ((BM_ELEM_API_FLAG_TEST(e_next, EDGE_NET)) &&
+				    (bm_edge_flagged_radial_count(e_next) < 2))
+				{
+					BMVert *v_next;
+
+					v_next = BM_edge_other_vert(e_next, v);
+					BLI_assert(v->e != e_next);
 
 #ifdef DEBUG_PRINT
-				/* indent and print */
-				{
-					BMVert *_v = v;
-					do {
-						printf("  ");
-					} while ((_v = BM_edge_other_vert(_v->e, _v)) != v_init);
-					printf("vert %d -> %d (add=%d)\n",
-					       BM_elem_index_get(v), BM_elem_index_get(v_next),
-					       BM_ELEM_API_FLAG_TEST(v_next, VERT_VISIT) == 0);
-				}
+					/* indent and print */
+					{
+						BMVert *_v = v;
+						do {
+							printf("  ");
+						} while ((_v = BM_edge_other_vert(_v->e, _v)) != v_init);
+						printf("vert %d -> %d (add=%d)\n",
+						       BM_elem_index_get(v), BM_elem_index_get(v_next),
+						       BM_ELEM_API_FLAG_TEST(v_next, VERT_VISIT) == 0);
+					}
 #endif
 
-				if (!BM_ELEM_API_FLAG_TEST(v_next, VERT_VISIT)) {
-					eo = STACK_PUSH_RET_PTR(edge_order);
-					eo->v = v_next;
+					if (!BM_ELEM_API_FLAG_TEST(v_next, VERT_VISIT)) {
+						eo = STACK_PUSH_RET_PTR(edge_order);
+						eo->v = v_next;
 
-					v_next->e = e_next;
+						v_next->e = e_next;
+					}
 				}
-			}
-		} while ((e_next = BM_DISK_EDGE_NEXT(e_next, v)) != e_first);
+			} while ((e_next = BM_DISK_EDGE_NEXT(e_next, v)) != e_first);
+		}
 
 #ifdef USE_FASTPATH_NOFORK
 		if (STACK_SIZE(edge_order) == 1) {




More information about the Bf-blender-cvs mailing list