From e3d6269ec4b74bf6a210396b3d733f88f30e2394 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Sun, 21 Jun 2015 09:46:12 +1000 Subject: BMesh: replace BLI_array -> BLI_stack --- source/blender/editors/mesh/editmesh_loopcut.c | 27 +++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'source/blender/editors') 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; -- cgit v1.2.3