diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2012-05-22 19:19:33 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2012-05-22 19:19:33 +0400 |
commit | 5e22802fae30feb9fe0dc5f1ee5ddd565f3d1c4d (patch) | |
tree | dbd431d8ba2cd4284e913f140347d915544b6546 /source/blender/bmesh/intern | |
parent | 39f2f997943430249a3cb753cb7c2bebfa1ed0f7 (diff) |
Add new BMesh length query functions.
BMEdge *BM_face_find_shortest_edge(BMFace *f);
BMEdge *BM_face_find_longest_edge(BMFace *f);
Reviewed by Campbell Barton.
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_queries.c | 43 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_queries.h | 3 |
2 files changed, 46 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index f61f9666d6d..549cc44c338 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -952,6 +952,49 @@ float BM_vert_calc_mean_tagged_edge_length(BMVert *v) /** + * Returns the shortest edge in f. + */ +BMEdge *BM_face_find_shortest_edge(BMFace *f) +{ + BMIter iter; + BMEdge *shortest_edge = NULL, *e; + float shortest_len = FLT_MAX; + + BM_ITER_ELEM(e, &iter, f, BM_EDGES_OF_FACE) { + float len = BM_edge_calc_length(e); + + if (len <= shortest_len) { + shortest_edge = e; + shortest_len = len; + } + } + + return shortest_edge; +} + +/** + * Returns the longest edge in f. + */ +BMEdge *BM_face_find_longest_edge(BMFace *f) +{ + BMIter iter; + BMEdge *longest_edge = NULL, *e; + float longest_len = 0; + + BM_ITER_ELEM(e, &iter, f, BM_EDGES_OF_FACE) { + float len = BM_edge_calc_length(e); + + if (len >= longest_len) { + longest_edge = e; + longest_len = len; + } + } + + return longest_edge; +} + + +/** * Returns the edge existing between v1 and v2, or NULL if there isn't one. * * \note multiple edges may exist between any two vertices, and therefore diff --git a/source/blender/bmesh/intern/bmesh_queries.h b/source/blender/bmesh/intern/bmesh_queries.h index 08e15884b3f..9712c0066b7 100644 --- a/source/blender/bmesh/intern/bmesh_queries.h +++ b/source/blender/bmesh/intern/bmesh_queries.h @@ -67,6 +67,9 @@ float BM_vert_calc_edge_angle(BMVert *v); float BM_vert_calc_shell_factor(BMVert *v); float BM_vert_calc_mean_tagged_edge_length(BMVert *v); +BMEdge *BM_face_find_shortest_edge(BMFace *f); +BMEdge *BM_face_find_longest_edge(BMFace *f); + BMEdge *BM_edge_exists(BMVert *v1, BMVert *v2); int BM_face_exists_overlap(BMesh *bm, BMVert **varr, int len, BMFace **r_existface); |