[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