73 #define BM_ITYPE_MAX 14
78 #define BM_ITER_MESH(ele, iter, bm, itype) \
79 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL); ele; \
80 BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter))
82 #define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar) \
83 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL), indexvar = 0; ele; \
84 BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter), (indexvar)++)
89 # define BM_ITER_MESH_MUTABLE(ele, ele_next, iter, bm, itype) \
90 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL); \
91 ele ? ((void)((iter)->count = BM_iter_mesh_count(itype, bm)), \
92 (void)(ele_next = BM_iter_step(iter)), \
95 BM_CHECK_TYPE_ELEM_ASSIGN(ele) = ele_next)
97 # define BM_ITER_MESH_MUTABLE(ele, ele_next, iter, bm, itype) \
98 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, bm, itype, NULL); \
99 ele ? ((BM_CHECK_TYPE_ELEM_ASSIGN(ele_next) = BM_iter_step(iter)), 1) : 0; \
103 #define BM_ITER_ELEM(ele, iter, data, itype) \
104 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, NULL, itype, data); ele; \
105 BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter))
107 #define BM_ITER_ELEM_INDEX(ele, iter, data, itype, indexvar) \
108 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new(iter, NULL, itype, data), indexvar = 0; ele; \
109 BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter), (indexvar)++)
158 typedef void *(*BMIter__step_cb)(
void *);
196 const char *slot_name,
197 const char restrictmask,
201 const char *slot_name,
202 const char restrictmask,
206 int stack_array_size);
226 #define BMITER_CB_DEF(name) \
227 struct BMIter__##name; \
228 void bmiter__##name##_begin(struct BMIter__##name *iter); \
229 void *bmiter__##name##_step(struct BMIter__##name *iter)
247 #define BM_ITER_CHECK_TYPE_DATA(data) \
248 CHECK_TYPE_ANY(data, void *, BMFace *, BMEdge *, BMVert *, BMLoop *, BMElem *)
250 #define BM_iter_new(iter, bm, itype, data) \
251 (BM_ITER_CHECK_TYPE_DATA(data), BM_iter_new(iter, bm, itype, data))
252 #define BM_iter_init(iter, bm, itype, data) \
253 (BM_ITER_CHECK_TYPE_DATA(data), BM_iter_init(iter, bm, itype, data))
void BLI_kdtree_nd_() int BLI_kdtree_nd_() int BLI_kdtree_nd_() int BLI_kdtree_nd_() ATTR_WARN_UNUSED_RESULT
int BMO_iter_elem_count_flag(BMesh *bm, const char itype, void *data, const short oflag, const bool value)
Elem Iter Tool Flag Count.
int BMO_iter_as_array(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char restrictmask, void **array, const int len)
Operator Iterator as Array.
const char bm_iter_itype_htype_map[BM_ITYPE_MAX]
int BM_iter_mesh_bitmap_from_filter_tessface(BMesh *bm, uint *bitmap, bool(*test_fn)(BMFace *, void *user_data), void *user_data)
void *(* BMIter__step_cb)(void *)
void * BMO_iter_as_arrayN(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char restrictmask, int *r_len, void **stack_array, int stack_array_size)
BMIterType
BMesh Iterators.
void * BM_iter_as_arrayN(BMesh *bm, const char itype, void *data, int *r_len, void **stack_array, int stack_array_size) ATTR_WARN_UNUSED_RESULT
Iterator as Array.
int BM_iter_mesh_count_flag(const char itype, BMesh *bm, const char hflag, const bool value)
Mesh Iter Flag Count.
int BM_iter_mesh_bitmap_from_filter(const char itype, BMesh *bm, uint *bitmap, bool(*test_fn)(BMElem *, void *user_data), void *user_data)
int BM_iter_as_array(BMesh *bm, const char itype, void *data, void **array, const int len)
Iterator as Array.
#define BMITER_CB_DEF(name)
int BM_iter_mesh_count(const char itype, BMesh *bm)
int BM_iter_elem_count_flag(const char itype, void *data, const char hflag, const bool value)
Elem Iter Flag Count.
void(* BMIter__begin_cb)(void *)
void * BM_iter_at_index(BMesh *bm, const char itype, void *data, int index) ATTR_WARN_UNUSED_RESULT
ATTR_WARN_UNUSED_RESULT BMesh const char itype
ATTR_WARN_UNUSED_RESULT BMesh * bm
ATTR_WARN_UNUSED_RESULT const BMFlagLayer const short oflag
BLI_mempool_iter pooliter
struct BMIter__edge_of_vert edge_of_vert
struct BMIter__face_of_edge face_of_edge
struct BMIter__vert_of_face vert_of_face
struct BMIter__loop_of_face loop_of_face
struct BMIter__loop_of_edge loop_of_edge
struct BMIter__vert_of_edge vert_of_edge
struct BMIter__edge_of_face edge_of_face
struct BMIter__face_of_vert face_of_vert
struct BMIter__loop_of_vert loop_of_vert
struct BMIter__elem_of_mesh elem_of_mesh
struct BMIter__loop_of_loop loop_of_loop