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-06-21 02:46:12 +0300
committerCampbell Barton <ideasman42@gmail.com>2015-06-21 02:46:12 +0300
commite3d6269ec4b74bf6a210396b3d733f88f30e2394 (patch)
tree3cfe0673f3e84f26a189bcc4975d7c8fabce75cb /source/blender/editors
parentcdb0cf3ec7df59a7b66234f218c167ae3daf1342 (diff)
BMesh: replace BLI_array -> BLI_stack
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/mesh/editmesh_loopcut.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/source/blender/editors/mesh/editmesh_loopcut.c b/source/blender/editors/mesh/editmesh_loopcut.c
index c7f9522ab3f..ec9ecd6706c 100644
--- a/source/blender/editors/mesh/editmesh_loopcut.c
+++ b/source/blender/editors/mesh/editmesh_loopcut.c
@@ -32,7 +32,7 @@
#include "MEM_guardedalloc.h"
-#include "BLI_array.h"
+#include "BLI_stack.h"
#include "BLI_string.h"
#include "BLI_math.h"
@@ -224,7 +224,8 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
BMEdge *eed, *eed_last;
BMVert *v[2][2] = {{NULL}}, *v_last;
float (*edges)[2][3] = NULL;
- BLI_array_declare(edges);
+ BLI_Stack *edge_stack;
+
int i, tot = 0;
BMW_init(&walker, bm, BMW_EDGERING,
@@ -232,10 +233,24 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
BMW_FLAG_TEST_HIDDEN,
BMW_NIL_LAY);
+
+ edge_stack = BLI_stack_new(sizeof(BMEdge *), __func__);
+
+ eed_last = NULL;
+ for (eed = eed_start = BMW_begin(&walker, eed_start); eed; eed = BMW_step(&walker)) {
+ BLI_stack_push(edge_stack, &eed);
+ eed_last = eed;
+ }
+
+ edges = MEM_mallocN(
+ (sizeof(*edges) * (BLI_stack_count(edge_stack) + (eed_last != eed_start))) * previewlines, __func__);
+
v_last = NULL;
eed_last = NULL;
- for (eed = eed_start = BMW_begin(&walker, eed_start); eed; eed = BMW_step(&walker)) {
+ while (!BLI_stack_is_empty(edge_stack)) {
+ BLI_stack_pop(edge_stack, &eed);
+
if (eed_last) {
if (v_last) {
v[1][0] = v[0][0];
@@ -250,8 +265,6 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
edgering_find_order(eed_last, eed, v_last, v);
v_last = v[0][0];
- BLI_array_grow_items(edges, previewlines);
-
for (i = 1; i <= previewlines; i++) {
const float fac = (i / ((float)previewlines + 1));
float v_cos[2][2][3];
@@ -279,8 +292,6 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
edgering_find_order(eed_last, eed_start, v_last, v);
- BLI_array_grow_items(edges, previewlines);
-
for (i = 1; i <= previewlines; i++) {
const float fac = (i / ((float)previewlines + 1));
float v_cos[2][2][3];
@@ -297,6 +308,8 @@ static void edgering_preview_calc_edges(RingSelOpData *lcd, DerivedMesh *dm, con
}
}
+ BLI_stack_free(edge_stack);
+
BMW_end(&walker);
lcd->edges = edges;
lcd->totedge = tot;