From e3d9c68927884c8346fa7c5679989d3e8733e98e Mon Sep 17 00:00:00 2001 From: Jesse Yurkovich Date: Sat, 23 Mar 2024 21:25:24 -0700 Subject: [PATCH] Cleanup: Remove BLI_array macros in bmesh edgenet --- .../bmesh/intern/bmesh_polygon_edgenet.cc | 28 ++++++------------- .../bmesh/intern/bmesh_polygon_edgenet.hh | 5 ++-- source/blender/bmesh/tools/bmesh_intersect.cc | 2 +- .../bmesh/tools/bmesh_intersect_edges.cc | 17 +++++------ .../editors/mesh/editmesh_intersect.cc | 28 ++++++------------- source/blender/editors/mesh/editmesh_knife.cc | 9 +----- source/blender/python/bmesh/bmesh_py_utils.cc | 11 ++------ 7 files changed, 32 insertions(+), 68 deletions(-) diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.cc b/source/blender/bmesh/intern/bmesh_polygon_edgenet.cc index 5e5aa0fbfd7..37138f28165 100644 --- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.cc +++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.cc @@ -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 *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 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); diff --git a/source/blender/bmesh/intern/bmesh_polygon_edgenet.hh b/source/blender/bmesh/intern/bmesh_polygon_edgenet.hh index 8170d6be2c7..f772d0ddd4c 100644 --- a/source/blender/bmesh/intern/bmesh_polygon_edgenet.hh +++ b/source/blender/bmesh/intern/bmesh_polygon_edgenet.hh @@ -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 *r_face_arr); /** * For when the edge-net has holes in it-this connects them. diff --git a/source/blender/bmesh/tools/bmesh_intersect.cc b/source/blender/bmesh/tools/bmesh_intersect.cc index 13b11f658fb..88cd77484ce 100644 --- a/source/blender/bmesh/tools/bmesh_intersect.cc +++ b/source/blender/bmesh/tools/bmesh_intersect.cc @@ -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 diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.cc b/source/blender/bmesh/tools/bmesh_intersect_edges.cc index 73a2297cb58..c89fc409a9a 100644 --- a/source/blender/bmesh/tools/bmesh_intersect_edges.cc +++ b/source/blender/bmesh/tools/bmesh_intersect_edges.cc @@ -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 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); } } } diff --git a/source/blender/editors/mesh/editmesh_intersect.cc b/source/blender/editors/mesh/editmesh_intersect.cc index 2bcea1f27d9..bb8857f5f34 100644 --- a/source/blender/editors/mesh/editmesh_intersect.cc +++ b/source/blender/editors/mesh/editmesh_intersect.cc @@ -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(edge_net_temp_buf->data), - edge_net_temp_buf->count, - &face_arr, - &face_arr_len); + Vector face_arr; + BM_face_split_edgenet( + bm, f, static_cast(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); diff --git a/source/blender/editors/mesh/editmesh_knife.cc b/source/blender/editors/mesh/editmesh_knife.cc index 94228ccbfb1..1114c35dc2f 100644 --- a/source/blender/editors/mesh/editmesh_knife.cc +++ b/source/blender/editors/mesh/editmesh_knife.cc @@ -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. */ diff --git a/source/blender/python/bmesh/bmesh_py_utils.cc b/source/blender/python/bmesh/bmesh_py_utils.cc index b04df38a07c..5594b0ccd40 100644 --- a/source/blender/python/bmesh/bmesh_py_utils.cc +++ b/source/blender/python/bmesh/bmesh_py_utils.cc @@ -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 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; } -- 2.30.2