Cleanup: Remove BLI_array macros in bmesh edgenet #119975

Open
Jesse Yurkovich wants to merge 1 commits from deadpin/blender:cleanup-array-edgenet into main

When changing the target branch, be careful to rebase the branch in your fork to match. See documentation.
7 changed files with 32 additions and 68 deletions

View File

@ -13,7 +13,6 @@
#include "MEM_guardedalloc.h"
#include "BLI_alloca.h"
#include "BLI_array.h"
#include "BLI_kdopbvh.h"
#include "BLI_linklist_stack.h"
#include "BLI_math_geom.h"
@ -22,6 +21,7 @@
#include "BLI_memarena.h"
#include "BLI_sort_utils.h"
#include "BLI_utildefines_stack.h"
#include "BLI_vector.hh"
#include "BKE_customdata.hh"
@ -446,16 +446,12 @@ bool BM_face_split_edgenet(BMesh *bm,
BMFace *f,
BMEdge **edge_net,
const int edge_net_len,
BMFace ***r_face_arr,
int *r_face_arr_len)
blender::Vector<BMFace *> *r_face_arr)
{
/* re-use for new face verts */
BMVert **face_verts;
int face_verts_len;
BMFace **face_arr = nullptr;
BLI_array_declare(face_arr);
BMVert **vert_queue;
STACK_DECLARE(vert_queue);
int i;
@ -469,8 +465,7 @@ bool BM_face_split_edgenet(BMesh *bm,
if (!edge_net_len) {
if (r_face_arr) {
*r_face_arr = nullptr;
*r_face_arr_len = 0;
r_face_arr->clear_and_shrink();
}
return false;
}
@ -528,6 +523,7 @@ bool BM_face_split_edgenet(BMesh *bm,
STACK_PUSH(vert_queue, l_first->v);
BM_ELEM_API_FLAG_ENABLE(l_first->v, VERT_IN_QUEUE);
blender::Vector<BMFace *> face_arr;
while ((v = STACK_POP(vert_queue))) {
BM_ELEM_API_FLAG_DISABLE(v, VERT_IN_QUEUE);
if (bm_face_split_edgenet_find_loop(
@ -542,7 +538,7 @@ bool BM_face_split_edgenet(BMesh *bm,
}
if (f_new) {
BLI_array_append(face_arr, f_new);
face_arr.append(f_new);
copy_v3_v3(f_new->no, f->no);
/* warning, normally don't do this,
@ -645,7 +641,7 @@ bool BM_face_split_edgenet(BMesh *bm,
BM_ELEM_API_FLAG_DISABLE(l_iter->v, VERT_VISIT);
} while ((l_iter = l_iter->next) != l_first);
if (BLI_array_len(face_arr)) {
if (!face_arr.is_empty()) {
bmesh_face_swap_data(f, face_arr[0]);
BM_face_kill(bm, face_arr[0]);
face_arr[0] = f;
@ -654,18 +650,12 @@ bool BM_face_split_edgenet(BMesh *bm,
BM_ELEM_API_FLAG_DISABLE(f, FACE_NET);
}
for (i = 0; i < BLI_array_len(face_arr); i++) {
BM_ELEM_API_FLAG_DISABLE(face_arr[i], FACE_NET);
for (BMFace *face : face_arr) {
BM_ELEM_API_FLAG_DISABLE(face, FACE_NET);
}
if (r_face_arr) {
*r_face_arr = face_arr;
*r_face_arr_len = BLI_array_len(face_arr);
}
else {
if (face_arr) {
MEM_freeN(face_arr);
}
*r_face_arr = std::move(face_arr);
}
MEM_freeN(edge_order);

View File

@ -4,6 +4,8 @@
#pragma once
#include "BLI_vector.hh"
/** \file
* \ingroup bmesh
*/
@ -20,8 +22,7 @@ bool BM_face_split_edgenet(BMesh *bm,
BMFace *f,
BMEdge **edge_net,
int edge_net_len,
BMFace ***r_face_arr,
int *r_face_arr_len);
blender::Vector<BMFace *> *r_face_arr);
/**
* For when the edge-net has holes in it-this connects them.

View File

@ -246,7 +246,7 @@ static void face_edges_split(BMesh *bm,
UNUSED_VARS(use_island_connect, mem_arena_edgenet);
# endif
BM_face_split_edgenet(bm, f, edge_arr, int(edge_arr_len), nullptr, nullptr);
BM_face_split_edgenet(bm, f, edge_arr, int(edge_arr_len), nullptr);
}
#endif

View File

@ -12,6 +12,7 @@
#include "BLI_math_vector.h"
#include "BLI_sort.h"
#include "BLI_stack.h"
#include "BLI_vector.hh"
#include "BKE_bvhutils.hh"
@ -1017,16 +1018,12 @@ bool BM_mesh_intersect_edges(
}
if (best_face) {
BMFace **face_arr = nullptr;
int face_arr_len = 0;
BM_face_split_edgenet(bm, best_face, edgenet, edgenet_len, &face_arr, &face_arr_len);
if (face_arr) {
/* Update the new faces normal.
* Normal is necessary to obtain the best face for edgenet */
while (face_arr_len--) {
BM_face_normal_update(face_arr[face_arr_len]);
}
MEM_freeN(face_arr);
blender::Vector<BMFace *> face_arr;
BM_face_split_edgenet(bm, best_face, edgenet, edgenet_len, &face_arr);
/* Update the new faces normal.
* Normal is necessary to obtain the best face for edgenet */
for (BMFace *face : face_arr) {
BM_face_normal_update(face);
}
}
}

View File

@ -16,6 +16,7 @@
#include "BLI_math_vector.h"
#include "BLI_memarena.h"
#include "BLI_stack.h"
#include "BLI_vector.hh"
#include "BKE_context.hh"
#include "BKE_editmesh.hh"
@ -486,9 +487,6 @@ static void bm_face_split_by_edges(BMesh *bm,
BMLoop *l_first;
BMVert *v;
BMFace **face_arr;
int face_arr_len;
/* likely this will stay very small
* all verts pushed into this stack _must_ have their previous edges set! */
BLI_SMALLSTACK_DECLARE(vert_stack, BMVert *);
@ -534,25 +532,15 @@ static void bm_face_split_by_edges(BMesh *bm,
}
}
BM_face_split_edgenet(bm,
f,
static_cast<BMEdge **>(edge_net_temp_buf->data),
edge_net_temp_buf->count,
&face_arr,
&face_arr_len);
Vector<BMFace *> face_arr;
BM_face_split_edgenet(
bm, f, static_cast<BMEdge **>(edge_net_temp_buf->data), edge_net_temp_buf->count, &face_arr);
BLI_buffer_clear(edge_net_temp_buf);
if (face_arr_len) {
int i;
for (i = 0; i < face_arr_len; i++) {
BM_face_select_set(bm, face_arr[i], true);
BM_elem_flag_disable(face_arr[i], hflag);
}
}
if (face_arr) {
MEM_freeN(face_arr);
for (BMFace *face : face_arr) {
BM_face_select_set(bm, face, true);
BM_elem_flag_disable(face, hflag);
}
}
@ -652,7 +640,7 @@ static void bm_face_split_by_edges_island_connect(
}
}
BM_face_split_edgenet(bm, f, edge_arr, edge_arr_len, nullptr, nullptr);
BM_face_split_edgenet(bm, f, edge_arr, edge_arr_len, nullptr);
for (int i = e_link_len; i < edge_arr_len; i++) {
BM_edge_select_set(bm, edge_arr[i], true);

View File

@ -2197,14 +2197,7 @@ static void knife_make_face_cuts(KnifeTool_OpData *kcd, BMesh *bm, BMFace *f, Li
#endif
{
BMFace **face_arr = nullptr;
int face_arr_len;
BM_face_split_edgenet(bm, f, edge_array, edge_array_len, &face_arr, &face_arr_len);
if (face_arr) {
MEM_freeN(face_arr);
}
BM_face_split_edgenet(bm, f, edge_array, edge_array_len, nullptr);
}
/* Remove dangling edges, not essential - but nice for users. */

View File

@ -564,8 +564,6 @@ static PyObject *bpy_bm_utils_face_split_edgenet(PyObject * /*self*/, PyObject *
BMesh *bm;
BMFace **face_arr;
int face_arr_len;
bool ok;
if (!PyArg_ParseTupleAndKeywords(args,
@ -598,16 +596,13 @@ static PyObject *bpy_bm_utils_face_split_edgenet(PyObject * /*self*/, PyObject *
}
/* --- main function body --- */
ok = BM_face_split_edgenet(bm, py_face->f, edge_array, edge_array_len, &face_arr, &face_arr_len);
blender::Vector<BMFace *> face_arr;
ok = BM_face_split_edgenet(bm, py_face->f, edge_array, edge_array_len, &face_arr);
PyMem_FREE(edge_array);
if (ok) {
PyObject *ret = BPy_BMFace_Array_As_Tuple(bm, face_arr, face_arr_len);
if (face_arr) {
MEM_freeN(face_arr);
}
PyObject *ret = BPy_BMFace_Array_As_Tuple(bm, face_arr.data(), face_arr.size());
return ret;
}