diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-05-28 04:45:53 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-05-28 04:46:58 +0300 |
commit | 3e0c6a8ca2e2859dabc488dee2356357c5fdc0c0 (patch) | |
tree | 97bc3965c7f5df0fe557be1056319f7f041feb1a /source/blender/bmesh/intern/bmesh_construct.c | |
parent | 46d8bcb617bcc774e6b312e555edba54a3654f75 (diff) |
BMesh: util functions to get edge loops from verts
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_construct.c')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_construct.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c index fb7f936318b..7664108f348 100644 --- a/source/blender/bmesh/intern/bmesh_construct.c +++ b/source/blender/bmesh/intern/bmesh_construct.c @@ -46,6 +46,37 @@ #define SELECT 1 +/** + * Fill in an edge array from a vertex array (connected polygon loop). + * + * \returns false if any edges aren't found . + */ +bool BM_edges_from_verts(BMEdge **edge_arr, BMVert **vert_arr, const int len) +{ + int i, i_prev = len - 1; + for (i = 0; i < len; i++) { + edge_arr[i_prev] = BM_edge_exists(vert_arr[i_prev], vert_arr[i]); + if (edge_arr[i_prev] == NULL) { + return false; + } + i_prev = i; + } + return true; +} + +/** + * Fill in an edge array from a vertex array (connected polygon loop). + * Creating edges as-needed. + */ +void BM_edges_from_verts_ensure(BMesh *bm, BMEdge **edge_arr, BMVert **vert_arr, const int len) +{ + int i, i_prev = len - 1; + for (i = 0; i < len; i++) { + edge_arr[i_prev] = BM_edge_create(bm, vert_arr[i_prev], vert_arr[i], NULL, BM_CREATE_NO_DOUBLE); + i_prev = i; + } +} + /* prototypes */ static void bm_loop_attrs_copy( BMesh *source_mesh, BMesh *target_mesh, |