Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2015-12-24 11:51:41 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-12-24 12:30:02 +0300
commit4a356d767b3a3481c836e0a5b4e5c56a6f92efc2 (patch)
tree6b3b7288dc681d36537acf428cfc3aa0db972553 /source/blender/bmesh/intern
parentc8c7d04d69d62f6c220af8ec5a401a17c6082295 (diff)
BMesh: BM_verts_from_edges utility function
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r--source/blender/bmesh/intern/bmesh_construct.c21
-rw-r--r--source/blender/bmesh/intern/bmesh_construct.h2
-rw-r--r--source/blender/bmesh/intern/bmesh_queries.c17
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);
}