diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-12-24 11:51:41 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-12-24 12:30:02 +0300 |
commit | 4a356d767b3a3481c836e0a5b4e5c56a6f92efc2 (patch) | |
tree | 6b3b7288dc681d36537acf428cfc3aa0db972553 | |
parent | c8c7d04d69d62f6c220af8ec5a401a17c6082295 (diff) |
BMesh: BM_verts_from_edges utility function
-rw-r--r-- | source/blender/bmesh/intern/bmesh_construct.c | 21 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_construct.h | 2 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_queries.c | 17 |
3 files changed, 24 insertions, 16 deletions
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index 3c2a85e9f52..fdad93ee90d 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -46,10 +46,29 @@ #define SELECT 1 + +/** + * Fill in a vertex array from an edge array. + * + * \returns false if any verts aren't found. + */ +bool BM_verts_from_edges(BMVert **vert_arr, BMEdge **edge_arr, const int len) +{ + int i, i_prev = len - 1; + for (i = 0; i < len; i++) { + vert_arr[i] = BM_edge_share_vert(edge_arr[i_prev], edge_arr[i]); + if (vert_arr[i] == NULL) { + return false; + } + i_prev = i; + } + return true; +} + /** * Fill in an edge array from a vertex array (connected polygon loop). * - * \returns false if any edges aren't found . + * \returns false if any edges aren't found. */ bool BM_edges_from_verts(BMEdge **edge_arr, BMVert **vert_arr, const int len) { diff --git a/source/blender/bmesh/intern/bmesh_construct.h b/source/blender/bmesh/intern/bmesh_construct.h index ce8b8dd8391..06bc5465a19 100644 --- a/source/blender/bmesh/intern/bmesh_construct.h +++ b/source/blender/bmesh/intern/bmesh_construct.h @@ -29,6 +29,8 @@ struct BMAllocTemplate; +bool BM_verts_from_edges(BMVert **vert_arr, BMEdge **edge_arr, const int len); + bool BM_edges_from_verts(BMEdge **edge_arr, BMVert **vert_arr, const int len); void BM_edges_from_verts_ensure(BMesh *bm, BMEdge **edge_arr, BMVert **vert_arr, const int len); diff --git a/source/blender/bmesh/intern/bmesh_queries.c b/source/blender/bmesh/intern/bmesh_queries.c index 5ed8ab20b69..253fa950c73 100644 --- a/source/blender/bmesh/intern/bmesh_queries.c +++ b/source/blender/bmesh/intern/bmesh_queries.c @@ -2094,26 +2094,13 @@ bool BM_face_exists_multi_edge(BMEdge **earr, int len) { BMVert **varr = BLI_array_alloca(varr, len); - bool ok; - int i, i_next; - /* first check if verts have edges, if not we can bail out early */ - ok = true; - for (i = len - 1, i_next = 0; i_next < len; (i = i_next++)) { - if (!(varr[i] = BM_edge_share_vert(earr[i], earr[i_next]))) { - ok = false; - break; - } - } - - if (ok == false) { + if (!BM_verts_from_edges(varr, earr, len)) { BMESH_ASSERT(0); return false; } - ok = BM_face_exists_multi(varr, earr, len); - - return ok; + return BM_face_exists_multi(varr, earr, len); } |