[Bf-blender-cvs] [e0e7d94] master: Fix error introduced by removing faces before executing bridge

Campbell Barton noreply at git.blender.org
Mon May 9 08:16:54 CEST 2016


Commit: e0e7d94f79a512dd33d2f8cdf1685112a8327674
Author: Campbell Barton
Date:   Mon May 9 16:20:28 2016 +1000
Branches: master
https://developer.blender.org/rBe0e7d94f79a512dd33d2f8cdf1685112a8327674

Fix error introduced by removing faces before executing bridge

Commit 86abddc9, caused an error when the face-region included boundary edges.
Since removing the faces first, caused the edges along the boundaries to be removed.

Add support for deleting faces and internal edges, that keeps boundaries.

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

M	source/blender/bmesh/intern/bmesh_delete.c
M	source/blender/bmesh/intern/bmesh_operator_api.h
M	source/blender/editors/mesh/editmesh_tools.c

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

diff --git a/source/blender/bmesh/intern/bmesh_delete.c b/source/blender/bmesh/intern/bmesh_delete.c
index c5c9403..882d78c 100644
--- a/source/blender/bmesh/intern/bmesh_delete.c
+++ b/source/blender/bmesh/intern/bmesh_delete.c
@@ -161,6 +161,7 @@ void BMO_mesh_delete_oflag_context(BMesh *bm, const short oflag, const int type)
 			break;
 		}
 		case DEL_FACES:
+		case DEL_FACES_KEEP_BOUNDARY:
 		{
 			/* go through and mark all edges and all verts of all faces for delete */
 			BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
@@ -190,11 +191,20 @@ void BMO_mesh_delete_oflag_context(BMesh *bm, const short oflag, const int type)
 			}
 			/* also mark all the vertices of remaining edges for keeping */
 			BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
+
+				/* Only exception to normal 'DEL_FACES' logic. */
+				if (type == DEL_FACES_KEEP_BOUNDARY) {
+					if (BM_edge_is_boundary(e)) {
+						BMO_elem_flag_disable(bm, e, oflag);
+					}
+				}
+
 				if (!BMO_elem_flag_test(bm, e, oflag)) {
 					BMO_elem_flag_disable(bm, e->v1, oflag);
 					BMO_elem_flag_disable(bm, e->v2, oflag);
 				}
 			}
+
 			/* now delete marked face */
 			bmo_remove_tagged_faces(bm, oflag);
 			/* delete marked edge */
diff --git a/source/blender/bmesh/intern/bmesh_operator_api.h b/source/blender/bmesh/intern/bmesh_operator_api.h
index 14e9bf8..cf93fe0 100644
--- a/source/blender/bmesh/intern/bmesh_operator_api.h
+++ b/source/blender/bmesh/intern/bmesh_operator_api.h
@@ -285,6 +285,9 @@ enum {
 	DEL_ONLYFACES,
 	DEL_EDGESFACES,
 	DEL_FACES,
+	/* A version of 'DEL_FACES' that keeps edges on face boundaries,
+	 * allowing the surrounding edge-loop to be kept from removed face regions. */
+	DEL_FACES_KEEP_BOUNDARY,
 	DEL_ONLYTAGGED
 };
 
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index cd84049..ba17684 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -5133,7 +5133,7 @@ static int edbm_bridge_edge_loops_exec(bContext *C, wmOperator *op)
 		}
 		BMO_op_callf(em->bm, BMO_FLAG_DEFAULTS,
 		             "delete geom=%hf context=%i",
-		             BM_ELEM_TAG, DEL_FACES);
+		             BM_ELEM_TAG, DEL_FACES_KEEP_BOUNDARY);
 	}
 
 	BMO_op_exec(em->bm, &bmop);




More information about the Bf-blender-cvs mailing list