[Bf-blender-cvs] [06bd7b7] bmesh-boolean-experiment: Fix for booleans with edges overlapping faces exactly

Campbell Barton noreply at git.blender.org
Fri Dec 4 01:47:38 CET 2015


Commit: 06bd7b70fba132f7ad353731e50b24ecc8b6c6d1
Author: Campbell Barton
Date:   Fri Dec 4 11:40:25 2015 +1100
Branches: bmesh-boolean-experiment
https://developer.blender.org/rB06bd7b70fba132f7ad353731e50b24ecc8b6c6d1

Fix for booleans with edges overlapping faces exactly

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

M	source/blender/bmesh/tools/bmesh_intersect.c

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

diff --git a/source/blender/bmesh/tools/bmesh_intersect.c b/source/blender/bmesh/tools/bmesh_intersect.c
index 639071d..b7a9e15 100644
--- a/source/blender/bmesh/tools/bmesh_intersect.c
+++ b/source/blender/bmesh/tools/bmesh_intersect.c
@@ -483,6 +483,10 @@ static BMVert *bm_isect_edge_tri(
 
 static bool bm_loop_filter_fn(const BMLoop *l, void *UNUSED(user_data))
 {
+	if (BM_elem_flag_test(l->e, BM_ELEM_TAG)) {
+		return false;
+	}
+
 	if (l->radial_next != l) {
 		BMLoop *l_iter = l->radial_next;
 		const char hflag_test = BM_ELEM_DRAW;  /* XXX, set in MOD_boolean.c */
@@ -1566,6 +1570,16 @@ bool BM_mesh_intersect(
 
 		BM_mesh_edgesplit(bm, false, true, false);
 	}
+	else if (boolean_mode != BOOLEAN_NONE) {
+		GSetIterator gs_iter;
+
+		/* no need to clear for boolean */
+
+		GSET_ITER (gs_iter, s.wire_edges) {
+			BMEdge *e = BLI_gsetIterator_getKey(&gs_iter);
+			BM_elem_flag_enable(e, BM_ELEM_TAG);
+		}
+	}
 #else
 	(void)use_separate;
 #endif  /* USE_SEPARATE */




More information about the Bf-blender-cvs mailing list