diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-09-19 04:09:14 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-09-19 04:09:14 +0400 |
commit | e00bf04912f2fb510623b9452f51385e94eba7ef (patch) | |
tree | c1fed3c599305d0cd07e65ab0e72c4997eacd6d4 /source | |
parent | 22fdc63b862533e5d7dc1e8b5e3b4f6056668363 (diff) |
fix [#32575] Seperate more than one object from a mesh generates additional edges
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/editors/mesh/editmesh_tools.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 546b28bfb25..8f2e27a0ab4 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -2858,9 +2858,6 @@ void MESH_OT_knife_cut(wmOperatorType *ot) static int mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old) { Base *base_new; - BMIter iter; - BMVert *v; - BMEdge *e; Object *obedit = base_old->object; BMesh *bm_new; @@ -2886,15 +2883,10 @@ static int mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh BMO_op_callf(bm_old, (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE), "delete geom=%hvef context=%i", BM_ELEM_TAG, DEL_FACES); - /* deselect loose data - this used to get deleted */ - BM_ITER_MESH (e, &iter, bm_old, BM_EDGES_OF_MESH) { - BM_edge_select_set(bm_old, e, FALSE); - } - - /* clean up any loose verts */ - BM_ITER_MESH (v, &iter, bm_old, BM_VERTS_OF_MESH) { - BM_vert_select_set(bm_old, v, FALSE); - } + /* deselect loose data - this used to get deleted, + * we could de-select edges and verts only, but this turns out to be less complicated + * since de-selecting all skips selection flushing logic */ + BM_mesh_elem_hflag_disable_all(bm_old, BM_VERT | BM_EDGE | BM_FACE, BM_ELEM_SELECT, FALSE); BM_mesh_normals_update(bm_new, FALSE); @@ -2908,7 +2900,10 @@ static int mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh static int mesh_separate_selected(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old) { - /* tag -> select */ + /* we may have tags from previous operators */ + BM_mesh_elem_hflag_disable_all(bm_old, BM_FACE | BM_EDGE | BM_VERT, BM_ELEM_TAG, FALSE); + + /* sel -> tag */ BM_mesh_elem_hflag_enable_test(bm_old, BM_FACE | BM_EDGE | BM_VERT, BM_ELEM_TAG, TRUE, BM_ELEM_SELECT); return mesh_separate_tagged(bmain, scene, base_old, bm_old); |