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);
                }
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to