From 4a356d767b3a3481c836e0a5b4e5c56a6f92efc2 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 24 Dec 2015 19:51:41 +1100 Subject: BMesh: BM_verts_from_edges utility function --- source/blender/bmesh/intern/bmesh_construct.c | 21 ++++++++++++++++++++- source/blender/bmesh/intern/bmesh_construct.h | 2 ++ 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); } -- cgit v1.2.3