diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-08-21 09:11:11 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-08-21 09:11:11 +0400 |
commit | 57f8a252d6827861a1678960928a2752b72570d5 (patch) | |
tree | 2ad20f058d67b8690440904e2e9564f373315df7 /source/blender/bmesh/intern | |
parent | f6b13c83ab3e5f3ca7411747ca67a5468f6392ca (diff) |
fix own regression [#36443] Vertex to UV index doesn't match with 2.68a
add BM_face_create_verts wrapper for BM_face_create which creates its own edge array.
Diffstat (limited to 'source/blender/bmesh/intern')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_core.c | 26 | ||||
-rw-r--r-- | source/blender/bmesh/intern/bmesh_core.h | 3 |
2 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c index b296c367575..db9defd56fb 100644 --- a/source/blender/bmesh/intern/bmesh_core.c +++ b/source/blender/bmesh/intern/bmesh_core.c @@ -369,6 +369,32 @@ BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, return f; } +/** + * Wrapper for #BM_face_create when you don't have an edge array + */ +BMFace *BM_face_create_verts(BMesh *bm, BMVert **vert_arr, const int len, const eBMCreateFlag create_flag, + const bool create_edges) +{ + BMEdge **edge_arr = BLI_array_alloca(edge_arr, len); + int i, i_prev = len - 1; + + if (create_edges) { + 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; + } + } + else { + edge_arr[i] = BM_edge_exists(vert_arr[i_prev], vert_arr[i]); + if (edge_arr[i] == NULL) { + return NULL; + } + i_prev = i; + } + + return BM_face_create(bm, vert_arr, edge_arr, len, create_flag); +} + #ifndef NDEBUG /** diff --git a/source/blender/bmesh/intern/bmesh_core.h b/source/blender/bmesh/intern/bmesh_core.h index c9e806335dd..f12be2ed16d 100644 --- a/source/blender/bmesh/intern/bmesh_core.h +++ b/source/blender/bmesh/intern/bmesh_core.h @@ -31,6 +31,7 @@ BMFace *BM_face_copy(BMesh *bm_dst, BMesh *bm_src, BMFace *f, const bool copy_verts, const bool copy_edges); typedef enum eBMCreateFlag { + BM_CREATE_NOP = 0, /* faces and edges only */ BM_CREATE_NO_DOUBLE = (1 << 1), /* Skip CustomData - for all element types data, @@ -42,6 +43,8 @@ typedef enum eBMCreateFlag { BMVert *BM_vert_create(BMesh *bm, const float co[3], const BMVert *example, const eBMCreateFlag create_flag); BMEdge *BM_edge_create(BMesh *bm, BMVert *v1, BMVert *v2, const BMEdge *example, const eBMCreateFlag create_flag); BMFace *BM_face_create(BMesh *bm, BMVert **verts, BMEdge **edges, const int len, const eBMCreateFlag create_flag); +BMFace *BM_face_create_verts(BMesh *bm, BMVert **verts, const int len, const eBMCreateFlag create_flag, + const bool create_edges); void BM_face_edges_kill(BMesh *bm, BMFace *f); void BM_face_verts_kill(BMesh *bm, BMFace *f); |