From bffd4b5eee29fe2eb00e362d03f34e7238bb30c5 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Fri, 2 Sep 2011 06:48:14 +0000 Subject: [PATCH] patch [#28463] BMesh: fixes for removedoubles and friends from Andrew Wiggin (ender79) --- source/blender/bmesh/operators/removedoubles.c | 18 ++++++++---------- source/blender/editors/mesh/bmesh_select.c | 2 +- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/source/blender/bmesh/operators/removedoubles.c b/source/blender/bmesh/operators/removedoubles.c index 5ae5c4bb4ec..c3c733eaa44 100644 --- a/source/blender/bmesh/operators/removedoubles.c +++ b/source/blender/bmesh/operators/removedoubles.c @@ -477,8 +477,8 @@ void bmesh_removedoubles_exec(BMesh *bm, BMOperator *op) v2 = verts[j]; //if ((v2->co[0]+v2->co[1]+v2->co[2]) - (v->co[0]+v->co[1]+v->co[2]) - // > distsqr) break; - if ((v2->co[0]-v->co[0]) + (v2->co[1]-v->co[1]) + (v2->co[2]-v->co[2]) > distsqr*4.0f) + // > dist) break; + if ((v2->co[0]-v->co[0]) + (v2->co[1]-v->co[1]) + (v2->co[2]-v->co[2]) > dist) break; vec[0] = v->co[0] - v2->co[0]; @@ -508,11 +508,10 @@ void bmesh_finddoubles_exec(BMesh *bm, BMOperator *op) BMVert *v, *v2; BMVert **verts=NULL; BLI_array_declare(verts); - float dist, distsqr; + float dist; int i, j, len, keepvert; dist = BMO_Get_Float(op, "dist"); - distsqr = dist*dist; i = 0; BMO_ITER(v, &oiter, bm, op, "verts", BM_VERT) { @@ -534,9 +533,9 @@ void bmesh_finddoubles_exec(BMesh *bm, BMOperator *op) for (j=i+1; jco[0]+v2->co[1]+v2->co[2]) - (v->co[0]+v->co[1]+v->co[2]) - > distsqr) break; - + if ((v2->co[0]+v2->co[1]+v2->co[2]) - (v->co[0]+v->co[1]+v->co[2]) > dist) + break; + if (keepvert) { if (BMO_TestFlag(bm, v2, VERT_KEEP) == BMO_TestFlag(bm, v, VERT_KEEP)) continue; @@ -561,11 +560,10 @@ void bmesh_automerge_exec(BMesh *bm, BMOperator *op) BMVert *v, *v2; BMVert **verts=NULL; BLI_array_declare(verts); - float dist, distsqr; + float dist; int i, j, len /* , keepvert */; dist = BMO_Get_Float(op, "dist"); - distsqr = dist*dist; i = 0; BMO_ITER(v, &oiter, bm, op, "verts", BM_VERT) { @@ -588,7 +586,7 @@ void bmesh_automerge_exec(BMesh *bm, BMOperator *op) for (j=i+1; jco[0]+v2->co[1]+v2->co[2]) - (v->co[0]+v->co[1]+v->co[2]) - > distsqr) break; + > dist) break; /* only allow unselected -> selected */ if (BMO_TestFlag(bm, v2, VERT_IN)) diff --git a/source/blender/editors/mesh/bmesh_select.c b/source/blender/editors/mesh/bmesh_select.c index 0b29c664d1b..e5411eeb154 100644 --- a/source/blender/editors/mesh/bmesh_select.c +++ b/source/blender/editors/mesh/bmesh_select.c @@ -129,7 +129,7 @@ void EDBM_automerge(Scene *scene, Object *obedit, int update) if (!em) return; - BMO_CallOpf(em->bm, "automerge verts=%hv dist=%f", BM_SELECT, scene->toolsettings->doublimit); + BMO_CallOpf(em->bm, "automerge verts=%av dist=%f", scene->toolsettings->doublimit); if (update) { DAG_id_tag_update(obedit->data, OB_RECALC_DATA); }