36#define BPy_BMesh_Check(v) (Py_TYPE(v) == &BPy_BMesh_Type)
37#define BPy_BMVert_Check(v) (Py_TYPE(v) == &BPy_BMVert_Type)
38#define BPy_BMEdge_Check(v) (Py_TYPE(v) == &BPy_BMEdge_Type)
39#define BPy_BMFace_Check(v) (Py_TYPE(v) == &BPy_BMFace_Type)
40#define BPy_BMLoop_Check(v) (Py_TYPE(v) == &BPy_BMLoop_Type)
41#define BPy_BMElemSeq_Check(v) (Py_TYPE(v) == &BPy_BMElemSeq_Type)
42#define BPy_BMVertSeq_Check(v) (Py_TYPE(v) == &BPy_BMVertSeq_Type)
43#define BPy_BMEdgeSeq_Check(v) (Py_TYPE(v) == &BPy_BMEdgeSeq_Type)
44#define BPy_BMFaceSeq_Check(v) (Py_TYPE(v) == &BPy_BMFaceSeq_Type)
45#define BPy_BMLoopSeq_Check(v) (Py_TYPE(v) == &BPy_BMLoopSeq_Type)
46#define BPy_BMIter_Check(v) (Py_TYPE(v) == &BPy_BMIter_Type)
48#define BPy_BMElem_Check(v) (Py_TYPE(v)->tp_hash == BPy_BMVert_Type.tp_hash)
160 Py_ssize_t *r_seq_num,
162 bool do_unique_check,
164 const char *error_prefix);
169 Py_ssize_t *r_seq_num,
171 bool do_unique_check,
173 const char *error_prefix);
179 Py_ssize_t *r_seq_num,
180 bool do_unique_check,
182 const char *error_prefix);
187 Py_ssize_t *r_seq_num,
188 bool do_unique_check,
190 const char *error_prefix);
195 Py_ssize_t *r_seq_num,
196 bool do_unique_check,
198 const char *error_prefix);
203 Py_ssize_t *r_seq_num,
204 bool do_unique_check,
206 const char *error_prefix);
214 Py_ssize_t elem_num);
228 const char *error_prefix,
235 const char *error_prefix);
237#define BPY_BM_CHECK_OBJ(obj) \
238 if (UNLIKELY(bpy_bm_generic_valid_check((BPy_BMGeneric *)obj) == -1)) { \
242#define BPY_BM_CHECK_INT(obj) \
243 if (UNLIKELY(bpy_bm_generic_valid_check((BPy_BMGeneric *)obj) == -1)) { \
251#define BPY_BM_CHECK_SOURCE_OBJ(bm, errmsg, ...) \
253 void *_args[] = {__VA_ARGS__}; \
254 if (UNLIKELY(bpy_bm_generic_valid_check_source(bm, errmsg, _args, ARRAY_SIZE(_args)) == -1)) \
260#define BPY_BM_CHECK_SOURCE_INT(bm, errmsg, ...) \
262 void *_args[] = {__VA_ARGS__}; \
263 if (UNLIKELY(bpy_bm_generic_valid_check_source(bm, errmsg, _args, ARRAY_SIZE(_args)) == -1)) \
270#define BPY_BM_IS_VALID(obj) (LIKELY((obj)->bm != NULL))
272#define BM_ITER_BPY_BM_SEQ(ele, iter, bpy_bmelemseq) \
273 for (BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_new( \
275 (bpy_bmelemseq)->bm, \
276 (bpy_bmelemseq)->itype, \
277 (bpy_bmelemseq)->py_ele ? ((BPy_BMElem *)(bpy_bmelemseq)->py_ele)->ele : NULL); \
279 BM_CHECK_TYPE_ELEM_ASSIGN(ele) = BM_iter_step(iter))
#define ATTR_NONNULL(...)
PyTypeObject BPy_BMesh_Type
PyTypeObject BPy_BMVertSeq_Type
PyTypeObject BPy_BMLoopSeq_Type
PyTypeObject BPy_BMEdgeSeq_Type
PyTypeObject BPy_BMEdge_Type
PyTypeObject BPy_BMFaceSeq_Type
PyTypeObject BPy_BMVert_Type
PyTypeObject BPy_BMIter_Type
PyTypeObject BPy_BMElemSeq_Type
PyTypeObject BPy_BMFace_Type
PyTypeObject BPy_BMLoop_Type
PyObject * BPy_BMEdgeSeq_CreatePyObject(BMesh *bm)
PyObject * BPy_BMFace_CreatePyObject(BMesh *bm, BMFace *f)
char * BPy_BMElem_StringFromHType_ex(char htype, char ret[32])
PyObject * BPy_BMLoop_Array_As_Tuple(BMesh *bm, BMLoop *const *elem, Py_ssize_t elem_num)
PyObject * BPy_BMLoopSeq_CreatePyObject(BMesh *bm)
PyObject * BPy_BMFaceSeq_CreatePyObject(BMesh *bm)
char * BPy_BMElem_StringFromHType(char htype)
PyObject * BPy_BMElem_CreatePyObject(BMesh *bm, BMHeader *ele)
PyObject * BPy_BMVert_Array_As_Tuple(BMesh *bm, BMVert **elem, Py_ssize_t elem_num)
PyObject * BPy_BMesh_CreatePyObject(BMesh *bm, int flag)
PyObject * BPy_BMElemSeq_CreatePyObject(BMesh *bm, BPy_BMElem *py_ele, char itype)
int int bpy_bm_check_uv_select_sync_valid(BMesh *bm, const char *error_prefix)
PyObject * BPy_BMVert_CreatePyObject(BMesh *bm, BMVert *v)
PyObject * BPy_BMLoop_CreatePyObject(BMesh *bm, BMLoop *l)
int bpy_bm_generic_valid_check_source(BMesh *bm_source, const char *error_prefix, void **args, uint args_tot) ATTR_NONNULL(1
PyObject * BPy_BMVertSeq_CreatePyObject(BMesh *bm)
PyObject * BPy_BMFace_Array_As_Tuple(BMesh *bm, BMFace **elem, Py_ssize_t elem_num)
int BPy_BMElem_CheckHType(PyTypeObject *type, char htype)
int bpy_bm_uv_layer_offset_or_error(BMesh *bm, const char *error_prefix)
BMVert ** BPy_BMVert_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_seq_num, bool do_unique_check, bool do_bm_check, const char *error_prefix)
BMEdge ** BPy_BMEdge_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_seq_num, bool do_unique_check, bool do_bm_check, const char *error_prefix)
int bpy_bm_check_bm_match_or_error(BMesh *bm_a, BMesh *bm_b, const char *error_prefix)
PyObject * BPy_BMEdge_Array_As_Tuple(BMesh *bm, BMEdge **elem, Py_ssize_t elem_num)
BMLoop ** BPy_BMLoop_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_seq_num, bool do_unique_check, bool do_bm_check, const char *error_prefix)
int bpy_bm_generic_valid_check(BPy_BMGeneric *self)
void * BPy_BMElem_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_seq_num, char htype, bool do_unique_check, bool do_bm_check, const char *error_prefix)
PyObject * BPy_BMElem_Array_As_Tuple(BMesh *bm, BMHeader **elem, Py_ssize_t elem_num)
PyObject * BPy_BMIter_CreatePyObject(BMesh *bm)
PyObject * BPyInit_bmesh_types()
PyObject * BPy_BMEdge_CreatePyObject(BMesh *bm, BMEdge *e)
BMFace ** BPy_BMFace_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_seq_num, bool do_unique_check, bool do_bm_check, const char *error_prefix)
void * BPy_BMElem_PySeq_As_Array_FAST(BMesh **r_bm, PyObject *seq_fast, Py_ssize_t min, Py_ssize_t max, Py_ssize_t *r_seq_num, char htype, bool do_unique_check, bool do_bm_check, const char *error_prefix)
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm
PyObject_VAR_HEAD BMesh * bm