50#define GROW(len_alloc) ((len_alloc) + ((len_alloc) - ((len_alloc) / 2)))
51#define GROW_ARRAY(mem, len_alloc) \
53 *(void **)&mem = MEM_reallocN(mem, sizeof(*mem) * ((len_alloc) = GROW(len_alloc))); \
57#define GROW_ARRAY_AS_NEEDED(mem, len_alloc, index) \
58 if (UNLIKELY(len_alloc == index)) { \
59 GROW_ARRAY(mem, len_alloc); \
93 const int verts_mask_count)
103 const int default_verts_len_alloc = verts_mask_count;
104 const int default_faces_len_alloc =
min_ii(
bm->
totface, verts_mask_count);
129 if (bmpinfo->
faces ==
nullptr) {
145 if (e_iter !=
nullptr) {
150 if (e_iter->
l !=
nullptr) {
154 if (l_iter->
v ==
v) {
157 }
while ((l_iter = l_iter->
radial_next) != l_first);
173 if (bmpinfo->
verts ==
nullptr) {
180 for (
int i = 0; i < bmpinfo->
faces_len; i++) {
186 }
while ((l_iter = l_iter->
next) != l_first);
206 const int verts_mask_count)
215 const int default_faces_len_alloc = 1;
217 int face_tag_loop_len = 0;
222 if (bmpinfo->
faces ==
nullptr) {
233 enum Side { SIDE_A = (1 << 0), SIDE_B = (1 << 1) } side_flag = Side(0);
239 side_flag = Side(side_flag | (
BLI_BITMAP_TEST(verts_mask, j) ? SIDE_A : SIDE_B));
240 if (
UNLIKELY(side_flag == (SIDE_A | SIDE_B))) {
242 face_tag_loop_len += f->
len;
245 }
while ((l_iter = l_iter->
next) != l_first);
257 if (bmpinfo->
verts ==
nullptr) {
264 for (
int i = 0; i < bmpinfo->
faces_len; i++) {
270 }
while ((l_iter = l_iter->
next) != l_first);
274 if (bmpinfo->
verts_len < verts_mask_count) {
301 const int *verts_group,
302 const int verts_group_count)
314 const int default_faces_len_alloc = 1;
316 int face_tag_loop_len = 0;
321 if (bmpinfo->
faces ==
nullptr) {
341 if (
UNLIKELY((group_iter != group_test) || (group_iter == -1))) {
343 face_tag_loop_len += f->
len;
349 }
while ((l_iter = l_iter->
next) != l_first);
361 if (bmpinfo->
verts ==
nullptr) {
368 for (
int i = 0; i < bmpinfo->
faces_len; i++) {
374 }
while ((l_iter = l_iter->
next) != l_first);
378 if (bmpinfo->
verts_len < verts_group_count) {
404 if (bmpinfo->
verts) {
407 if (bmpinfo->
faces) {
#define BLI_BITMAP_NEW(_num, _alloc_string)
#define BLI_BITMAP_TEST(_bitmap, _index)
#define BLI_BITMAP_ENABLE(_bitmap, _index)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
Read Guarded memory(de)allocation.
#define BM_DISK_EDGE_NEXT(e, v)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_index_get(ele)
#define BM_elem_index_set(ele, index)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
ATTR_WARN_UNUSED_RESULT BMesh * bm
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
BMPartialUpdate * BM_mesh_partial_create_from_verts(BMesh *bm, const BMPartialUpdate_Params *params, const BLI_bitmap *verts_mask, const int verts_mask_count)
BLI_INLINE bool partial_elem_vert_ensure(BMPartialUpdate *bmpinfo, BLI_bitmap *verts_tag, BMVert *v)
BMPartialUpdate * BM_mesh_partial_create_from_verts_group_multi(BMesh *bm, const BMPartialUpdate_Params *params, const int *verts_group, const int verts_group_count)
BLI_INLINE bool partial_elem_face_ensure(BMPartialUpdate *bmpinfo, BLI_bitmap *faces_tag, BMFace *f)
#define GROW_ARRAY_AS_NEEDED(mem, len_alloc, index)
BMPartialUpdate * BM_mesh_partial_create_from_verts_group_single(BMesh *bm, const BMPartialUpdate_Params *params, const BLI_bitmap *verts_mask, const int verts_mask_count)
void BM_mesh_partial_destroy(BMPartialUpdate *bmpinfo)
BMLoop * BM_vert_find_first_loop(BMVert *v)
ATTR_WARN_UNUSED_RESULT const BMVert * v
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
struct BMLoop * radial_next
BMPartialUpdate_Params params