fix [#32575] Seperate more than one object from a mesh generates additional edges

This commit is contained in:
Campbell Barton 2012-09-19 00:09:14 +00:00
parent 22fdc63b86
commit e00bf04912

@ -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) static int mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
{ {
Base *base_new; Base *base_new;
BMIter iter;
BMVert *v;
BMEdge *e;
Object *obedit = base_old->object; Object *obedit = base_old->object;
BMesh *bm_new; 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), BMO_op_callf(bm_old, (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE),
"delete geom=%hvef context=%i", BM_ELEM_TAG, DEL_FACES); "delete geom=%hvef context=%i", BM_ELEM_TAG, DEL_FACES);
/* deselect loose data - this used to get deleted */ /* deselect loose data - this used to get deleted,
BM_ITER_MESH (e, &iter, bm_old, BM_EDGES_OF_MESH) { * we could de-select edges and verts only, but this turns out to be less complicated
BM_edge_select_set(bm_old, e, FALSE); * 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);
/* clean up any loose verts */
BM_ITER_MESH (v, &iter, bm_old, BM_VERTS_OF_MESH) {
BM_vert_select_set(bm_old, v, FALSE);
}
BM_mesh_normals_update(bm_new, 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) 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); 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); return mesh_separate_tagged(bmain, scene, base_old, bm_old);