diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-04-15 14:09:27 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-04-15 14:09:27 +0400 |
commit | db53faffa3e86fb44bfa2a025a5261eb69d3bc09 (patch) | |
tree | a2de3a7992a3d2655cfe2a06ee36191f30e55360 /source/blender/bmesh | |
parent | 97538bd9edf48f07c132fbddeccc421c56bd9b69 (diff) |
make ngon_perimeter into a public api function and expose to python.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_polygon.c | 16 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_polygon.h | 1 | ||||
-rw-r--r-- | source/blender/bmesh/operators/bmo_utils.c | 32 |
3 files changed, 18 insertions, 31 deletions
diff --git a/source/blender/bmesh/intern/bmesh_polygon.c b/source/blender/bmesh/intern/bmesh_polygon.c index 33549660cb3..67e3d24ade1 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.c +++ b/source/blender/bmesh/intern/bmesh_polygon.c @@ -191,6 +191,22 @@ float BM_face_area_calc(BMesh *bm, BMFace *f) } /** + * compute the perimeter of an ngon + */ +float BM_face_perimeter_calc(BMesh *UNUSED(bm), BMFace *f) +{ + BMLoop *l_iter, *l_first; + float perimeter = 0.0f; + + l_iter = l_first = BM_FACE_FIRST_LOOP(f); + do { + perimeter += len_v3v3(l_iter->v->co, l_iter->next->v->co); + } while ((l_iter = l_iter->next) != l_first); + + return perimeter; +} + +/** * computes center of face in 3d. uses center of bounding box. */ void BM_face_center_bounds_calc(BMesh *UNUSED(bm), BMFace *f, float r_cent[3]) diff --git a/source/blender/bmesh/intern/bmesh_polygon.h b/source/blender/bmesh/intern/bmesh_polygon.h index 3c8f3dc3339..71387f18ce2 100644 --- a/source/blender/bmesh/intern/bmesh_polygon.h +++ b/source/blender/bmesh/intern/bmesh_polygon.h @@ -28,6 +28,7 @@ */ float BM_face_area_calc(BMesh *bm, BMFace *f); +float BM_face_perimeter_calc(BMesh *bm, BMFace *f); void BM_face_center_bounds_calc(BMesh *bm, BMFace *f, float center[3]); void BM_face_center_mean_calc(BMesh *bm, BMFace *f, float center[3]); diff --git a/source/blender/bmesh/operators/bmo_utils.c b/source/blender/bmesh/operators/bmo_utils.c index c359d530f73..ea1fc5171e5 100644 --- a/source/blender/bmesh/operators/bmo_utils.c +++ b/source/blender/bmesh/operators/bmo_utils.c @@ -459,36 +459,6 @@ void bmo_vertexsmooth_exec(BMesh *bm, BMOperator *op) } /* - * compute the perimeter of an ngon - * - * NOTE: This should probably go to bmesh_polygon.c - */ -static float ngon_perimeter(BMesh *bm, BMFace *f) -{ - BMIter liter; - BMLoop *l; - int num_verts = 0; - float v[3], sv[3]; - float perimeter = 0.0f; - - BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) { - if (num_verts == 0) { - copy_v3_v3(v, l->v->co); - copy_v3_v3(sv, l->v->co); - } - else { - perimeter += len_v3v3(v, l->v->co); - copy_v3_v3(v, l->v->co); - } - num_verts++; - } - - perimeter += len_v3v3(v, sv); - - return perimeter; -} - -/* * compute the fake surface of an ngon * This is done by decomposing the ngon into triangles who share the centroid of the ngon * while this method is far from being exact, it should garantee an invariance. @@ -593,7 +563,7 @@ void bmo_similarfaces_exec(BMesh *bm, BMOperator *op) switch (type) { case SIMFACE_PERIMETER: /* set the perimeter */ - f_ext[i].perim = ngon_perimeter(bm, f_ext[i].f); + f_ext[i].perim = BM_face_perimeter_calc(bm, f_ext[i].f); break; case SIMFACE_COPLANAR: |