[Bf-blender-cvs] [649ce9e] bmesh-boolean-experiment: Avoid using macro for main connect searching logic

Campbell Barton noreply at git.blender.org
Thu Dec 10 10:04:45 CET 2015


Commit: 649ce9ec232d4f380886a5912489fff4c42886e0
Author: Campbell Barton
Date:   Thu Dec 10 19:54:55 2015 +1100
Branches: bmesh-boolean-experiment
https://developer.blender.org/rB649ce9ec232d4f380886a5912489fff4c42886e0

Avoid using macro for main connect searching logic

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

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 729b0b3..30110ab 100644
--- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
+++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.c
@@ -876,67 +876,60 @@ static int bm_face_split_edgenet_find_connection(
 	 */
 
 	const float dir[3] = {[SORT_AXIS] = direction_sign ? 1.0 : -1.0f};
-
 	BMEdge *e_hit = test_edges_isect_2d_ray(args, v_origin, dir);
+	BMVert *v_other = NULL;
 
-	BLI_SMALLSTACK_DECLARE(vert_search, BMVert *);
-
-	/* ensure we never add verts multiple times (not all that likely - but possible) */
-	BLI_SMALLSTACK_DECLARE(vert_blacklist, BMVert *);
-
-#define EDGE_VERTS_ADD_SEARCH_STACK(e) \
-	{ \
-		BMVert *v_pair[2]; \
-		/* ensure the closest vertex is popped back off the stack first */ \
-		if (len_squared_v2v2(v_origin->co, (e)->v1->co) > \
-		    len_squared_v2v2(v_origin->co, (e)->v2->co)) \
-		{ \
-			ARRAY_SET_ITEMS(v_pair, (e)->v1, (e)->v2); \
-		} \
-		else { \
-			ARRAY_SET_ITEMS(v_pair, (e)->v2, (e)->v1); \
-		} \
-		for (int j = 0; j < 2; j++) { \
-			BMVert *v_iter = v_pair[j]; \
-			if (BM_elem_flag_test(v_iter, VERT_IS_VALID)) { \
-				if (direction_sign ? (v_iter->co[SORT_AXIS] >= v_origin->co[SORT_AXIS]) : \
-				                     (v_iter->co[SORT_AXIS] <= v_origin->co[SORT_AXIS])) \
-				{ \
-					BLI_SMALLSTACK_PUSH(vert_search, v_iter); \
-					BLI_SMALLSTACK_PUSH(vert_blacklist, v_iter); \
-					BM_elem_flag_disable(v_iter, VERT_IS_VALID); \
-				} \
-			} \
-		} \
-	} ((void)0)
-
-	EDGE_VERTS_ADD_SEARCH_STACK(e_hit);
-
-	BMVert *v_other_fallback = BLI_SMALLSTACK_LAST(vert_search);
+	if (e_hit) {
+		BMVert *v_other_fallback = NULL;
 
-	BMVert *v_other;
-	while ((v_other = BLI_SMALLSTACK_POP(vert_search)) &&
-	       (e_hit   = test_edges_isect_2d_vert(args, v_origin, v_other)))
-	{
-		EDGE_VERTS_ADD_SEARCH_STACK(e_hit);
-	}
+		BLI_SMALLSTACK_DECLARE(vert_search, BMVert *);
 
-#undef EDGE_VERTS_ADD_SEARCH_STACK
+		/* ensure we never add verts multiple times (not all that likely - but possible) */
+		BLI_SMALLSTACK_DECLARE(vert_blacklist, BMVert *);
 
-	if (v_other == NULL) {
-		printf("Using fallback\n");
-		v_other = v_other_fallback;
-	}
+		do {
+			BMVert *v_pair[2];
+			/* ensure the closest vertex is popped back off the stack first */
+			if (len_squared_v2v2(v_origin->co, e_hit->v1->co) >
+			    len_squared_v2v2(v_origin->co, e_hit->v2->co))
+			{
+				ARRAY_SET_ITEMS(v_pair, e_hit->v1, e_hit->v2);
+			}
+			else {
+				ARRAY_SET_ITEMS(v_pair, e_hit->v2, e_hit->v1);
+			}
 
-	/* if we reach this line, v_other is either the best vertex or its NULL */
-	const int index = v_other ? BM_elem_index_get(v_other) : -1;
+			for (int j = 0; j < 2; j++) {
+				BMVert *v_iter = v_pair[j];
+				if (BM_elem_flag_test(v_iter, VERT_IS_VALID)) {
+					if (direction_sign ? (v_iter->co[SORT_AXIS] >= v_origin->co[SORT_AXIS]) :
+					                     (v_iter->co[SORT_AXIS] <= v_origin->co[SORT_AXIS]))
+					{
+						BLI_SMALLSTACK_PUSH(vert_search, v_iter);
+						BLI_SMALLSTACK_PUSH(vert_blacklist, v_iter);
+						BM_elem_flag_disable(v_iter, VERT_IS_VALID);
+					}
+				}
+			}
+			v_other_fallback = v_other;
+
+		} while ((v_other = BLI_SMALLSTACK_POP(vert_search)) &&
+		         (e_hit   = test_edges_isect_2d_vert(args, v_origin, v_other)));
 
-	/* reset the blacklist flag, for future use */
-	while ((v_origin = BLI_SMALLSTACK_POP(vert_blacklist))) {
-		BM_elem_flag_enable(v_origin, VERT_IS_VALID);
+		if (v_other == NULL) {
+			printf("Using fallback\n");
+			v_other = v_other_fallback;
+		}
+
+		/* reset the blacklist flag, for future use */
+		BMVert *v;
+		while ((v = BLI_SMALLSTACK_POP(vert_blacklist))) {
+			BM_elem_flag_enable(v, VERT_IS_VALID);
+		}
 	}
 
-	return index;
+	/* if we reach this line, v_other is either the best vertex or its NULL */
+	return v_other ? BM_elem_index_get(v_other) : -1;
 }
 
 /**




More information about the Bf-blender-cvs mailing list