BMesh: replace BLI_array -> BLI_stack

This commit is contained in:
2015-06-21 09:46:12 +10:00
parent cdb0cf3ec7
commit e3d6269ec4

View File

@@ -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;