From 1db6d629a04fe56c0ae7248286e2465cade8f07c Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 1 Sep 2011 08:27:35 +0000 Subject: BKE_mesh_calc_edges() now uses polygons when available. --- source/blender/blenkernel/intern/mesh_validate.c | 43 ++++++++++++++++-------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'source/blender/blenkernel/intern/mesh_validate.c') diff --git a/source/blender/blenkernel/intern/mesh_validate.c b/source/blender/blenkernel/intern/mesh_validate.c index aca98665cc7..ce1e11cee28 100644 --- a/source/blender/blenkernel/intern/mesh_validate.c +++ b/source/blender/blenkernel/intern/mesh_validate.c @@ -338,20 +338,35 @@ void BKE_mesh_calc_edges(Mesh *mesh, int update) BLI_edgehash_insert(eh, med->v1, med->v2, med); } - for (i = 0; i < totface; i++, mf++) { - if (!BLI_edgehash_haskey(eh, mf->v1, mf->v2)) - BLI_edgehash_insert(eh, mf->v1, mf->v2, NULL); - if (!BLI_edgehash_haskey(eh, mf->v2, mf->v3)) - BLI_edgehash_insert(eh, mf->v2, mf->v3, NULL); - - if (mf->v4) { - if (!BLI_edgehash_haskey(eh, mf->v3, mf->v4)) - BLI_edgehash_insert(eh, mf->v3, mf->v4, NULL); - if (!BLI_edgehash_haskey(eh, mf->v4, mf->v1)) - BLI_edgehash_insert(eh, mf->v4, mf->v1, NULL); - } else { - if (!BLI_edgehash_haskey(eh, mf->v3, mf->v1)) - BLI_edgehash_insert(eh, mf->v3, mf->v1, NULL); + if(mesh->totpoly) { + /* mesh loops (bmesh only) */ + MPoly *mp= mesh->mpoly; + for(i=0; i < mesh->totpoly; i++, mp++) { + MLoop *l= &mesh->mloop[mp->loopstart]; + int j, l_prev= (l + (mp->totloop-1))->v; + for (j=0; j < mp->totloop; j++, l++) { + BLI_edgehash_insert(eh, l_prev, l->v, NULL); + l_prev= l->v; + } + } + } + else { + /* regular faces (note, we could remove this for bmesh - campbell) */ + for (i = 0; i < totface; i++, mf++) { + if (!BLI_edgehash_haskey(eh, mf->v1, mf->v2)) + BLI_edgehash_insert(eh, mf->v1, mf->v2, NULL); + if (!BLI_edgehash_haskey(eh, mf->v2, mf->v3)) + BLI_edgehash_insert(eh, mf->v2, mf->v3, NULL); + + if (mf->v4) { + if (!BLI_edgehash_haskey(eh, mf->v3, mf->v4)) + BLI_edgehash_insert(eh, mf->v3, mf->v4, NULL); + if (!BLI_edgehash_haskey(eh, mf->v4, mf->v1)) + BLI_edgehash_insert(eh, mf->v4, mf->v1, NULL); + } else { + if (!BLI_edgehash_haskey(eh, mf->v3, mf->v1)) + BLI_edgehash_insert(eh, mf->v3, mf->v1, NULL); + } } } -- cgit v1.2.3