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-13 13:34:12 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-12-13 16:16:09 +0300
commitb7090b3d1c0fdeee9d6b2d136db6c9b8ff6ad48c (patch)
tree95b4562d18169b8c8e47bdd2eb2f3d000b47b3bc /source/blender/editors/mesh/editmesh_intersect.c
parent81b32e88a3ec1e1671a916492cff299d340e9285 (diff)
BMesh: replace BLI_array w/ BLI_buffer
Also reuse temporary buffer between calls.
Diffstat (limited to 'source/blender/editors/mesh/editmesh_intersect.c')
-rw-r--r--source/blender/editors/mesh/editmesh_intersect.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/source/blender/editors/mesh/editmesh_intersect.c b/source/blender/editors/mesh/editmesh_intersect.c
index fcba1e5ec72..4fa97506d2b 100644
--- a/source/blender/editors/mesh/editmesh_intersect.c
+++ b/source/blender/editors/mesh/editmesh_intersect.c
@@ -27,7 +27,7 @@
#include "DNA_object_types.h"
#include "BLI_math.h"
-#include "BLI_array.h"
+#include "BLI_buffer.h"
#include "BLI_linklist_stack.h"
@@ -282,11 +282,11 @@ void MESH_OT_intersect_boolean(struct wmOperatorType *ot)
/** \name Face/Edge Split
* \{ */
-static void bm_face_split_by_edges(BMesh *bm, BMFace *f, const char hflag)
+static void bm_face_split_by_edges(
+ BMesh *bm, BMFace *f, const char hflag,
+ /* reusable memory buffer */
+ BLI_Buffer *edge_net_temp_buf)
{
- BMEdge **edge_net = NULL;
- BLI_array_declare(edge_net);
-
const int f_index = BM_elem_index_get(f);
BMLoop *l_iter;
@@ -301,6 +301,7 @@ static void bm_face_split_by_edges(BMesh *bm, BMFace *f, const char hflag)
BLI_SMALLSTACK_DECLARE(vert_stack, BMVert *);
BLI_SMALLSTACK_DECLARE(vert_stack_next, BMVert *);
+ BLI_assert(edge_net_temp_buf->count == 0);
/* collect all edges */
l_iter = l_first = BM_FACE_FIRST_LOOP(f);
@@ -316,7 +317,7 @@ static void bm_face_split_by_edges(BMesh *bm, BMFace *f, const char hflag)
v->e = e;
BLI_SMALLSTACK_PUSH(vert_stack, v);
- BLI_array_append(edge_net, e);
+ BLI_buffer_append(edge_net_temp_buf, BMEdge *, e);
}
}
} while ((l_iter = l_iter->next) != l_first);
@@ -337,7 +338,7 @@ static void bm_face_split_by_edges(BMesh *bm, BMFace *f, const char hflag)
v_next = BM_edge_other_vert(e_next, v);
BM_elem_index_set(e_next, f_index);
BLI_SMALLSTACK_PUSH(vert_stack_next, v_next);
- BLI_array_append(edge_net, e_next);
+ BLI_buffer_append(edge_net_temp_buf, BMEdge *, e_next);
}
}
@@ -346,8 +347,11 @@ static void bm_face_split_by_edges(BMesh *bm, BMFace *f, const char hflag)
}
}
- BM_face_split_edgenet(bm, f, edge_net, BLI_array_count(edge_net), &face_arr, &face_arr_len);
- BLI_array_free(edge_net);
+ BM_face_split_edgenet(
+ bm, f, edge_net_temp_buf->data, edge_net_temp_buf->count,
+ &face_arr, &face_arr_len);
+
+ BLI_buffer_empty(edge_net_temp_buf);
if (face_arr_len) {
int i;
@@ -470,11 +474,15 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op))
bm->elem_index_dirty |= BM_EDGE;
+ {
+ BLI_buffer_declare_static(BMEdge **, edge_net_temp_buf, 0, 128);
- BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
- if (BM_elem_flag_test(f, hflag)) {
- bm_face_split_by_edges(bm, f, hflag);
+ BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) {
+ if (BM_elem_flag_test(f, hflag)) {
+ bm_face_split_by_edges(bm, f, hflag, &edge_net_temp_buf);
+ }
}
+ BLI_buffer_free(&edge_net_temp_buf);
}
EDBM_mesh_normals_update(em);