patch [#28463] BMesh: fixes for removedoubles and friends

from Andrew Wiggin (ender79)
This commit is contained in:
Campbell Barton
2011-09-02 06:48:14 +00:00
parent b62b9f16b8
commit bffd4b5eee
2 changed files with 9 additions and 11 deletions

View File

@@ -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; j<len; j++) {
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]+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; j<len; j++) {
v2 = verts[j];
if ((v2->co[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))

View File

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