diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-06-16 09:13:12 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-06-16 09:13:12 +0400 |
commit | 72abfbfc9514ff18e5d96e17ef42cc6777b8cf5a (patch) | |
tree | 8cce5f0d2b8a30130ebf166fee9f3ca3e13ee461 /source/blender/editors/transform/transform_conversions.c | |
parent | 07a537eb1a8c5bf9a59c2c4ff551ef0890721d82 (diff) |
fix automerge + mirror, previously only the selected verts would auto-merge.
Diffstat (limited to 'source/blender/editors/transform/transform_conversions.c')
-rw-r--r-- | source/blender/editors/transform/transform_conversions.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c index 2b99405c749..d8f763c6a54 100644 --- a/source/blender/editors/transform/transform_conversions.c +++ b/source/blender/editors/transform/transform_conversions.c @@ -5161,6 +5161,40 @@ static void special_aftertrans_update__mask(bContext *C, TransInfo *t) } } +static void special_aftertrans_update__mesh(bContext *UNUSED(C), TransInfo *t) +{ + /* so automerge supports mirror */ + if ((t->scene->toolsettings->automerge) && + (t->obedit && t->obedit->type == OB_MESH)) + { + BMEditMesh *em = BKE_editmesh_from_object(t->obedit); + BMesh *bm = em->bm; + char hflag; + + if (t->flag & T_MIRROR) { + TransData *td; + int i; + + /* rather then adjusting the selection (which the user would notice) + * tag all mirrored verts, then automerge those */ + BM_mesh_elem_hflag_disable_all(bm, BM_VERT, BM_ELEM_TAG, false); + + for (i = 0, td = t->data; i < t->total; i++, td++) { + if (td->extra) { + BM_elem_flag_enable((BMVert *)td->extra, BM_ELEM_TAG); + } + } + + hflag = BM_ELEM_SELECT | BM_ELEM_TAG; + } + else { + hflag = BM_ELEM_SELECT; + } + + EDBM_automerge(t->scene, t->obedit, true, hflag); + } +} + /* inserting keys, pointcache, redraw events... */ /* * note: sequencer freeing has its own function now because of a conflict with transform's order of freeing (campbell) @@ -5193,7 +5227,10 @@ void special_aftertrans_update(bContext *C, TransInfo *t) * during cleanup - psy-fi */ freeEdgeSlideTempFaces(sld); } - EDBM_automerge(t->scene, t->obedit, true); + + if (t->obedit->type == OB_MESH) { + special_aftertrans_update__mesh(C, t); + } } else { if (t->mode == TFM_EDGE_SLIDE) { |