Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2013-06-16 09:13:12 +0400
committerCampbell Barton <ideasman42@gmail.com>2013-06-16 09:13:12 +0400
commit72abfbfc9514ff18e5d96e17ef42cc6777b8cf5a (patch)
tree8cce5f0d2b8a30130ebf166fee9f3ca3e13ee461 /source/blender/editors/transform/transform_conversions.c
parent07a537eb1a8c5bf9a59c2c4ff551ef0890721d82 (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.c39
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) {