[Bf-blender-cvs] [1883dbd] master: Fix T48616: Auto-merge selects extra edges

Campbell Barton noreply at git.blender.org
Mon Jun 13 10:06:38 CEST 2016


Commit: 1883dbd8c3ad00fea7b31769943365698e66317a
Author: Campbell Barton
Date:   Mon Jun 13 17:35:59 2016 +1000
Branches: master
https://developer.blender.org/rB1883dbd8c3ad00fea7b31769943365698e66317a

Fix T48616: Auto-merge selects extra edges

Auto-merge caused all edges between selected vertices to be selected.
This only makes sense in vertex-select-mode.

Correct edge-flag merging code, which now merges flags from multiple edges.

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

M	source/blender/bmesh/operators/bmo_removedoubles.c
M	source/blender/editors/transform/transform_conversions.c

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

diff --git a/source/blender/bmesh/operators/bmo_removedoubles.c b/source/blender/bmesh/operators/bmo_removedoubles.c
index a1f40b3..c58b481 100644
--- a/source/blender/bmesh/operators/bmo_removedoubles.c
+++ b/source/blender/bmesh/operators/bmo_removedoubles.c
@@ -224,22 +224,13 @@ void bmo_weld_verts_exec(BMesh *bm, BMOperator *op)
 			if (v1 == v2) {
 				BMO_elem_flag_enable(bm, e, EDGE_COL);
 			}
-			else if (!BM_edge_exists(v1, v2)) {
-				BMEdge *e_new = BM_edge_create(bm, v1, v2, e, BM_CREATE_NOP);
-
-				/* low level selection, not essential but means we can keep
-				 * edge selection valid on auto-merge for example. */
-				if ((BM_elem_flag_test(e, BM_ELEM_SELECT)   == true) &&
-				    (BM_elem_flag_test(e_new, BM_ELEM_SELECT) == false))
-				{
-					BM_elem_flag_disable(e, BM_ELEM_SELECT);
-					BM_elem_flag_merge_into(e_new, e_new, e);
-					BM_elem_flag_enable(e_new, BM_ELEM_SELECT);
-					/* bm->totedgesel remains valid */
-				}
-				else {
-					BM_elem_flag_merge_into(e_new, e_new, e);
+			else {
+				/* always merge flags, even for edges we already created */
+				BMEdge *e_new = BM_edge_exists(v1, v2);
+				if (e_new == NULL) {
+					e_new = BM_edge_create(bm, v1, v2, e, BM_CREATE_NOP);
 				}
+				BM_elem_flag_merge(e_new, e);
 			}
 
 			BMO_elem_flag_enable(bm, e, ELE_DEL);
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index fa5e868..12cf770 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -5874,6 +5874,7 @@ static void special_aftertrans_update__mesh(bContext *UNUSED(C), TransInfo *t)
 		BMEditMesh *em = BKE_editmesh_from_object(t->obedit);
 		BMesh *bm = em->bm;
 		char hflag;
+		bool has_face_sel = (bm->totfacesel != 0);
 
 		if (t->flag & T_MIRROR) {
 			TransData *td;
@@ -5897,8 +5898,10 @@ static void special_aftertrans_update__mesh(bContext *UNUSED(C), TransInfo *t)
 
 		EDBM_automerge(t->scene, t->obedit, true, hflag);
 
-		if ((em->selectmode & SCE_SELECT_VERTEX) == 0) {
-			EDBM_select_flush(em);
+		/* Special case, this is needed or faces won't re-select.
+		 * Flush selected edges to faces. */
+		if (has_face_sel && (em->selectmode == SCE_SELECT_FACE)) {
+			EDBM_selectmode_flush_ex(em, SCE_SELECT_EDGE);
 		}
 	}
 }




More information about the Bf-blender-cvs mailing list