[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57493] trunk/blender/source/blender/ editors: fix automerge + mirror, previously only the selected verts would auto-merge.
Campbell Barton
ideasman42 at gmail.com
Sun Jun 16 07:13:12 CEST 2013
Revision: 57493
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57493
Author: campbellbarton
Date: 2013-06-16 05:13:12 +0000 (Sun, 16 Jun 2013)
Log Message:
-----------
fix automerge + mirror, previously only the selected verts would auto-merge.
Modified Paths:
--------------
trunk/blender/source/blender/editors/include/ED_mesh.h
trunk/blender/source/blender/editors/mesh/editmesh_select.c
trunk/blender/source/blender/editors/transform/transform_conversions.c
Modified: trunk/blender/source/blender/editors/include/ED_mesh.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_mesh.h 2013-06-16 04:37:39 UTC (rev 57492)
+++ trunk/blender/source/blender/editors/include/ED_mesh.h 2013-06-16 05:13:12 UTC (rev 57493)
@@ -143,7 +143,7 @@
/* editmesh_select.c */
void EDBM_select_mirrored(struct BMEditMesh *em, bool extend,
int *r_totmirr, int *r_totfail);
-void EDBM_automerge(struct Scene *scene, struct Object *ob, bool update);
+void EDBM_automerge(struct Scene *scene, struct Object *ob, bool update, const char hflag);
bool EDBM_backbuf_border_init(struct ViewContext *vc, short xmin, short ymin, short xmax, short ymax);
int EDBM_backbuf_check(unsigned int index);
Modified: trunk/blender/source/blender/editors/mesh/editmesh_select.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_select.c 2013-06-16 04:37:39 UTC (rev 57492)
+++ trunk/blender/source/blender/editors/mesh/editmesh_select.c 2013-06-16 05:13:12 UTC (rev 57493)
@@ -119,26 +119,17 @@
*r_totfail = totfail;
}
-void EDBM_automerge(Scene *scene, Object *obedit, bool update)
+void EDBM_automerge(Scene *scene, Object *obedit, bool update, const char hflag)
{
-
- if ((scene->toolsettings->automerge) &&
- (obedit && obedit->type == OB_MESH))
- {
- int ok;
- BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ int ok;
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
- if (!em) {
- return;
- }
+ ok = BMO_op_callf(em->bm, BMO_FLAG_DEFAULTS,
+ "automerge verts=%hv dist=%f",
+ hflag, scene->toolsettings->doublimit);
- ok = BMO_op_callf(em->bm, BMO_FLAG_DEFAULTS,
- "automerge verts=%hv dist=%f",
- BM_ELEM_SELECT, scene->toolsettings->doublimit);
-
- if (LIKELY(ok) && update) {
- EDBM_update_generic(em, true, true);
- }
+ if (LIKELY(ok) && update) {
+ EDBM_update_generic(em, true, true);
}
}
Modified: trunk/blender/source/blender/editors/transform/transform_conversions.c
===================================================================
--- trunk/blender/source/blender/editors/transform/transform_conversions.c 2013-06-16 04:37:39 UTC (rev 57492)
+++ trunk/blender/source/blender/editors/transform/transform_conversions.c 2013-06-16 05:13:12 UTC (rev 57493)
@@ -5161,6 +5161,40 @@
}
}
+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 @@
* 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) {
More information about the Bf-blender-cvs
mailing list