[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50734] trunk/blender/source/blender/ editors/mesh/editmesh_tools.c: fix [#32575] Seperate more than one object from a mesh generates additional edges

Campbell Barton ideasman42 at gmail.com
Wed Sep 19 02:09:15 CEST 2012


Revision: 50734
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50734
Author:   campbellbarton
Date:     2012-09-19 00:09:14 +0000 (Wed, 19 Sep 2012)
Log Message:
-----------
fix [#32575] Seperate more than one object from a mesh generates additional edges

Modified Paths:
--------------
    trunk/blender/source/blender/editors/mesh/editmesh_tools.c

Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-09-18 19:20:26 UTC (rev 50733)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c	2012-09-19 00:09:14 UTC (rev 50734)
@@ -2858,9 +2858,6 @@
 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,16 +2883,11 @@
 	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);
-	}
+	/* 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);
 
-	/* 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_bm_to_me(bm_new, base_new->object->data, FALSE);
@@ -2908,7 +2900,10 @@
 
 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);




More information about the Bf-blender-cvs mailing list