32 const char *identifier);
90 for (i = 0; slot_types[i].
type; i++) {
120 for (i = 0; slot_types[i].
type; i++) {
121 slot = &slot_args[i];
193 memset(op, 0xff,
sizeof(*op));
202 return (slot_code >= 0);
215 return &slot_args[slot_code];
219 const char *slot_name_src,
221 const char *slot_name_dst,
227 if (slot_src == slot_dst) {
239 slot_dst->
len = slot_src->
len;
247 if ((src_elem_flag | dst_elem_flag) == dst_elem_flag) {
252 const uint tot = slot_src->
len;
256 for (i = 0; i < tot; i++, ele_src++) {
257 if ((*ele_src)->head.htype & dst_elem_flag) {
269 if (slot_src->
len == slot_dst->
len) {
274 const uint tot = slot_src->
len;
278 for (i = 0; i < tot; i++, ele_src++) {
279 if ((*ele_src)->head.htype & dst_elem_flag) {
342 const char *slot_name,
356 copy_m4_m4(
static_cast<float(*)[4]
>(slot->
data.
p), (
const float(*)[4])mat);
358 else if (size == 3) {
359 copy_m4_m3(
static_cast<float(*)[4]
>(slot->
data.
p), (
const float(*)[3])mat);
362 fprintf(stderr,
"%s: invalid size argument %d (bmesh internal error)\n", __func__, size);
369 const char *slot_name,
387 const char *slot_name,
416 const char *slot_name,
507 const bool test_for_enabled)
509 int count_vert = 0, count_edge = 0, count_face = 0;
539 return (count_vert + count_edge + count_face);
581 const bool check_select)
588 ese_next = ese->
next;
590 switch (ese->
htype) {
592 slot_elem_map = slot_vert_map;
595 slot_elem_map = slot_edge_map;
598 slot_elem_map = slot_face_map;
602 ese->
ele =
static_cast<BMElem *
>(BMO_slot_map_elem_get(slot_elem_map, ese->
ele));
654 BMOpSlot *slot = &op->slots[slot_code];
665 if (slot->flag & BMOS_DYNAMIC_ARRAY) {
666 if (slot->
len >= slot->size) {
667 slot->size = (slot->size + 1 + totadd) * 2;
677 slot->flag |= BMOS_DYNAMIC_ARRAY;
679 slot->size = slot->
len + 2;
686 memcpy(slot->
data.
buf, tmp, allocsize);
695 const char *slot_name,
715 const char *slot_name,
727 slot->
data.
buf =
static_cast<void **
>(
740 const char *slot_name,
744 int totelement = 0, i = 0;
769 output->data.buf[i] = ele;
776 output->
data.buf[i] = ele;
783 output->
data.buf[i] = ele;
799 const char *slot_name,
802 const bool test_for_enabled)
805 int totelement = 0, i = 0;
813 if (test_for_enabled) {
833 output->data.buf[i] = ele;
844 output->data.buf[i] = ele;
855 output->data.buf[i] = ele;
869 const char *slot_name,
879 const char *slot_name,
895 slot->
data.
buf =
static_cast<void **
>(
910 if (slot->
data.
buf ==
nullptr) {
911 slot->
data.
buf =
static_cast<void **
>(
915 slot->
len = ele_buffer_len;
916 memcpy(slot->
data.
buf, ele_buffer, ele_buffer_len *
sizeof(*slot->
data.
buf));
929 const char *slot_name_dst,
931 const char *slot_name_src,
940 if (slot_dst->
len == 0) {
942 _bmo_slot_copy(slot_args_src, slot_name_src, slot_args_dst, slot_name_dst, arena_dst);
944 else if (slot_src->
len != 0) {
946 int alloc_size = elem_size * (slot_dst->
len + slot_src->
len);
951 memcpy(buf, slot_dst->
data.
buf, elem_size * slot_dst->
len);
953 ((
char *)buf) + elem_size * slot_dst->
len, slot_src->
data.
buf, elem_size * slot_src->
len);
955 slot_dst->
data.
buf =
static_cast<void **
>(buf);
956 slot_dst->
len += slot_src->
len;
969 const char *slot_name,
972 const bool test_for_enabled)
975 int totelement, i = 0;
983 if (test_for_enabled) {
1036 const char *slot_name,
1046 const char *slot_name,
1055 const char *slot_name,
1058 const bool do_flush)
1063 const bool do_flush_select = (do_flush && (hflag &
BM_ELEM_SELECT));
1064 const bool do_flush_hide = (do_flush && (hflag &
BM_ELEM_HIDDEN));
1070 for (i = 0; i < slot->
len; i++, data++) {
1071 if (!(htype & (*data)->head.htype)) {
1075 if (do_flush_select) {
1079 if (do_flush_hide) {
1089 const char *slot_name,
1092 const bool do_flush)
1097 const bool do_flush_select = (do_flush && (hflag &
BM_ELEM_SELECT));
1098 const bool do_flush_hide = (do_flush && (hflag &
BM_ELEM_HIDDEN));
1103 for (i = 0; i < slot->
len; i++, data++) {
1104 if (!(htype & (*data)->head.htype)) {
1108 if (do_flush_select) {
1112 if (do_flush_hide) {
1122 const char *slot_name,
1133 for (i = 0; i < slot->
len; i++) {
1134 if (!(htype & data[i]->htype)) {
1144 const char *slot_name,
1155 for (i = 0; i < slot->
len; i++) {
1156 if (!(htype & data[i]->htype)) {
1205 void *oldflags = v_oflag->
oflags;
1207 memcpy(v_oflag->
oflags, oldflags, old_totflags_size);
1215 void *oldflags = e_oflag->
oflags;
1217 memcpy(e_oflag->
oflags, oldflags, old_totflags_size);
1225 void *oldflags = f_oflag->
oflags;
1227 memcpy(f_oflag->
oflags, oldflags, old_totflags_size);
1265 void *oldflags = v_oflag->
oflags;
1267 memcpy(v_oflag->
oflags, oldflags, new_totflags_size);
1275 void *oldflags = e_oflag->
oflags;
1277 memcpy(e_oflag->
oflags, oldflags, new_totflags_size);
1285 void *oldflags = f_oflag->
oflags;
1287 memcpy(f_oflag->
oflags, oldflags, new_totflags_size);
1305 const int totflags_offset =
bm->
totflags - 1;
1313 ele->
oflags[totflags_offset] = zero_flag;
1322 ele->
oflags[totflags_offset] = zero_flag;
1331 ele->
oflags[totflags_offset] = zero_flag;
1352 const char *slot_name,
1353 const char restrictmask)
1357 memset(iter, 0,
sizeof(
BMOIter));
1382 if (iter->
cur >= slot->
len) {
1388 if (iter->
cur >= slot->
len) {
1411 iter->
val =
nullptr;
1433 return iter->
val ? *iter->
val :
nullptr;
1439 return **((
float **)iter->
val);
1445 return **((
int **)iter->
val);
1451 return **((
bool **)iter->
val);
1485 if (err->level == level) {
1495 if (err ==
nullptr) {
1506 *r_level = err->
level;
1518 if (err->level >= level) {
1546#define NEXT_CHAR(fmt) ((fmt)[0] != 0 ? (fmt)[1] : 0)
1552 while (slot_args->slot_name) {
1568 "%s: ! could not find bmesh slot for name %s! (bmesh internal error)\n",
1581 for (i = 0; i < tot; i++) {
1594 "%s: could not find bmesh slot for name %s! (bmesh internal error)\n",
1604 char *opname, *ofmt, *fmt;
1605 char slot_name[64] = {0};
1610 const char *err_reason =
"Unknown";
1613#define GOTO_ERROR(reason) \
1615 err_reason = reason; \
1616 lineno = __LINE__; \
1625 i = strcspn(fmt,
" ");
1628 noslot = (opname[i] ==
'\0');
1631 fmt += i + (noslot ? 0 : 1);
1650 i = strspn(fmt,
" ");
1659 i = strcspn(fmt,
"=");
1661 GOTO_ERROR(
"could not match end of slot name");
1667 GOTO_ERROR(
"name to slot code check failed");
1689 else if (c ==
'4') {
1710 int ele_buffer_len = va_arg(vlist,
int);
1728 const char *slot_name_other = va_arg(vlist,
char *);
1732 BMO_slot_copy(op_other, slots_in, slot_name_other, op, slots_in, slot_name);
1736 BMO_slot_copy(op_other, slots_out, slot_name_other, op, slots_in, slot_name);
1772 else if (c ==
'e') {
1775 else if (c ==
'v') {
1792 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1794 else if (type ==
'H') {
1796 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1798 else if (type ==
'a') {
1807 else if (type ==
'f') {
1809 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1811 else if (type ==
'F') {
1813 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1821 "%s: unrecognized bmop format char: '%c', %d in '%s'\n",
1837 fprintf(stderr,
"%s: error parsing formatting string\n", __func__);
1839 fprintf(stderr,
"string: '%s', position %d\n", _fmt,
int(fmt - ofmt));
1840 fprintf(stderr,
" ");
1842 int pos =
int(fmt - ofmt);
1843 for (i = 0; i <
pos; i++) {
1844 fprintf(stderr,
" ");
1846 fprintf(stderr,
"^\n");
1849 fprintf(stderr,
"source code: %s:%d\n", __FILE__, lineno);
1851 fprintf(stderr,
"reason: %s\n", err_reason);
1865 va_start(list, fmt);
1867 printf(
"%s: failed\n", __func__);
1881 va_start(list, fmt);
1883 printf(
"%s: failed, format is:\n \"%s\"\n", __func__, fmt);
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
void BLI_ghashIterator_step(GHashIterator *ghi)
BLI_INLINE void * BLI_ghashIterator_getValue(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
BLI_INLINE void ** BLI_ghashIterator_getValue_p(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
#define GHASH_ITER(gh_iter_, ghash_)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
unsigned int BLI_ghash_len(const GHash *gh) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_ghash_free(GHash *gh, GHashKeyFreeFP keyfreefp, GHashValFreeFP valfreefp)
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh)
BLI_INLINE bool BLI_ghashIterator_done(const GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void zero_m4(float m[4][4])
void unit_m3(float m[3][3])
void copy_m3_m4(float m1[3][3], const float m2[4][4])
void unit_m4(float m[4][4])
void copy_m4_m3(float m1[4][4], const float m2[3][3])
void copy_m4_m4(float m1[4][4], const float m2[4][4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
void * BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
void BLI_memarena_free(struct MemArena *ma) ATTR_NONNULL(1)
struct MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
#define BLI_MEMARENA_STD_BUFSIZE
void BLI_memarena_use_calloc(struct MemArena *ma) ATTR_NONNULL(1)
void * BLI_mempool_alloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
BLI_mempool * BLI_mempool_create(unsigned int esize, unsigned int elem_num, unsigned int pchunk, unsigned int flag) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL
void * BLI_mempool_calloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(1)
void BLI_mempool_destroy(BLI_mempool *pool) ATTR_NONNULL(1)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define STRNCPY(dst, src)
#define STREQLEN(a, b, n)
Read Guarded memory(de)allocation.
struct BMFlagLayer BMFlagLayer
#define BM_ELEM_INDEX_VALIDATE(_bm, _msg_a, _msg_b)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_index_set(ele, index)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_test_bool(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_INDEX(ele, iter, bm, itype, indexvar)
ATTR_WARN_UNUSED_RESULT BMesh * bm
int BM_mesh_elem_hflag_count_disabled(BMesh *bm, const char htype, const char hflag, const bool respecthide)
void BM_elem_select_set(BMesh *bm, BMElem *ele, const bool select)
int BM_mesh_elem_hflag_count_enabled(BMesh *bm, const char htype, const char hflag, const bool respecthide)
#define BM_elem_hide_set(bm, ele, hide)
void bmesh_edit_begin(BMesh *, BMOpTypeFlag)
BMesh Begin Edit.
void BM_mesh_elem_toolflags_ensure(BMesh *bm)
void bmesh_edit_end(BMesh *bm, BMOpTypeFlag type_flag)
BMesh End Edit.
const int bmo_opdefines_total
const BMOpDefine * bmo_opdefines[]
#define BMO_elem_flag_disable(bm, ele, oflag)
#define BMO_edge_flag_test_bool(bm, e, oflag)
#define BMO_vert_flag_disable(bm, e, oflag)
#define BMO_face_flag_test_bool(bm, e, oflag)
@ BMO_OP_SLOT_SUBTYPE_ELEM_IS_SINGLE
@ BMO_OP_SLOT_ELEMENT_BUF
@ BMO_OP_SLOT_SUBTYPE_MAP_ELEM
@ BMO_OP_SLOT_SUBTYPE_MAP_BOOL
@ BMO_OP_SLOT_SUBTYPE_MAP_INTERNAL
@ BMO_OP_SLOT_SUBTYPE_MAP_INT
@ BMO_OP_SLOT_SUBTYPE_MAP_FLT
#define BMO_ASSERT_SLOT_IN_OP(slot, op)
#define BMO_slot_copy(op_src, slots_src, slot_name_src, op_dst, slots_dst, slot_name_dst)
@ BMO_OP_SLOT_SUBTYPE_INT_FLAG
@ BMO_OP_SLOT_SUBTYPE_INT_ENUM
#define BMO_SLOT_AS_MATRIX(slot)
#define BMO_elem_flag_enable(bm, ele, oflag)
#define BMO_OP_SLOT_TOTAL_TYPES
#define BMO_vert_flag_test_bool(bm, e, oflag)
#define BMO_face_flag_disable(bm, e, oflag)
#define BMO_edge_flag_disable(bm, e, oflag)
ATTR_WARN_UNUSED_RESULT const BMFlagLayer const short oflag
int BMO_mesh_enabled_flag_count(BMesh *bm, const char htype, const short oflag)
void BMO_slot_mat4_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_mat[4][4])
void BMO_slot_buffer_hflag_enable(BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag, const bool do_flush)
BMO_FLAG_BUFFER.
void * BMO_slot_buffer_get_single(BMOpSlot *slot)
void BMO_op_flag_disable(BMesh *, BMOperator *op, const int op_flag)
void BMO_slot_buffer_flag_enable(BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
BMO_FLAG_BUFFER.
static void bmo_flag_layer_alloc(BMesh *bm)
ALLOC/FREE FLAG LAYER.
void BMO_slot_vec_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const float vec[3])
void BMO_op_flag_enable(BMesh *, BMOperator *op, const int op_flag)
void BMO_slot_buffer_from_all(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype)
BMO_ALL_TO_SLOT.
int BMO_mesh_disabled_flag_count(BMesh *bm, const char htype, const short oflag)
void BMO_slot_map_to_flag(BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
void BMO_slot_bool_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const bool i)
void BMO_slot_buffer_from_enabled_hflag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag)
void * BMO_slot_ptr_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
bool BMO_iter_map_value_bool(BMOIter *iter)
void BMO_mesh_selected_remap(BMesh *bm, BMOpSlot *slot_vert_map, BMOpSlot *slot_edge_map, BMOpSlot *slot_face_map, const bool check_select)
void * BMO_iter_map_value_ptr(BMOIter *iter)
void BMO_mesh_flag_disable_all(BMesh *bm, BMOperator *, const char htype, const short oflag)
void BMO_slot_mat_set(BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const float *mat, int size)
static void bmo_op_slots_init(const BMOSlotType *slot_types, BMOpSlot *slot_args)
void ** BMO_iter_map_value_p(BMOIter *iter)
void BMO_error_clear(BMesh *bm)
void BMO_slot_buffer_from_disabled_hflag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag)
void BMO_slot_vec_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_vec[3])
bool BMO_error_get_at_level(BMesh *bm, eBMOpErrorLevel level, const char **r_msg, BMOperator **r_op)
int BMO_slot_map_len(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
float BMO_slot_float_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
static void bmo_op_slots_free(const BMOSlotType *slot_types, BMOpSlot *slot_args)
void BMO_slot_buffer_from_disabled_flag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
void BMO_slot_buffer_from_single(BMOperator *op, BMOpSlot *slot, BMHeader *ele)
static void bmo_slot_buffer_from_hflag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag, const bool test_for_enabled)
BMO_HEADERFLAG_TO_SLOT.
int BMO_iter_map_value_int(BMOIter *iter)
BMOpSlot * BMO_slot_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
BMESH OPSTACK GET SLOT.
void BMO_slot_buffer_hflag_disable(BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const char hflag, const bool do_flush)
BMO_FLAG_BUFFER.
static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag, const bool test_for_enabled)
BMO_FLAG_TO_SLOT.
void BMO_op_exec(BMesh *bm, BMOperator *op)
BMESH OPSTACK EXEC OP.
void BMO_pop(BMesh *bm)
BMESH OPSTACK POP.
bool BMO_op_initf(BMesh *bm, BMOperator *op, const int flag, const char *fmt,...)
static void bmo_flag_layer_clear(BMesh *bm)
void * BMO_slot_buffer_get_first(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
int BMO_opcode_from_opname(const char *opname)
bool BMO_error_get(BMesh *bm, const char **r_msg, BMOperator **r_op, eBMOpErrorLevel *r_level)
static int BMO_opcode_from_opname_check(const char *opname)
const int BMO_OPSLOT_TYPEINFO[BMO_OP_SLOT_TOTAL_TYPES]
float BMO_iter_map_value_float(BMOIter *iter)
void BMO_slot_mat3_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_mat[3][3])
void BMO_push(BMesh *bm, BMOperator *)
BMESH OPSTACK PUSH.
void _bmo_slot_buffer_append(BMOpSlot slot_args_dst[BMO_OP_MAX_SLOTS], const char *slot_name_dst, BMOpSlot slot_args_src[BMO_OP_MAX_SLOTS], const char *slot_name_src, MemArena *arena_dst)
void BMO_slot_buffer_from_array(BMOperator *op, BMOpSlot *slot, BMHeader **ele_buffer, int ele_buffer_len)
int BMO_slot_int_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
void BMO_slot_float_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const float f)
void _bmo_slot_copy(BMOpSlot slot_args_src[BMO_OP_MAX_SLOTS], const char *slot_name_src, BMOpSlot slot_args_dst[BMO_OP_MAX_SLOTS], const char *slot_name_dst, MemArena *arena_dst)
BMESH OPSTACK COPY SLOT.
bool BMO_op_vinitf(BMesh *bm, BMOperator *op, const int flag, const char *_fmt, va_list vlist)
bool BMO_error_occurred_at_level(BMesh *bm, eBMOpErrorLevel level)
void BMO_op_finish(BMesh *bm, BMOperator *op)
BMESH OPSTACK FINISH OP.
static int bmo_mesh_flag_count(BMesh *bm, const char htype, const short oflag, const bool test_for_enabled)
void BMO_slot_map_insert(BMOperator *op, BMOpSlot *slot, const void *element, const void *data)
int BMO_slot_buffer_len(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
#define GOTO_ERROR(reason)
void BMO_error_raise(BMesh *bm, BMOperator *owner, eBMOpErrorLevel level, const char *msg)
void * BMO_slot_as_arrayN(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, int *len)
void BMO_slot_ptr_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, void *p)
static int bmo_name_to_slotcode_check(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
void BMO_slot_int_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int i)
void BMO_slot_buffer_flag_disable(BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
BMO_FLAG_BUFFER.
void * BMO_iter_new(BMOIter *iter, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char restrictmask)
New Iterator.
static int bmo_name_to_slotcode(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
static void bmo_flag_layer_free(BMesh *bm)
bool BMO_slot_exists(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
BMESH OPSTACK HAS SLOT.
bool BMO_error_pop(BMesh *bm, const char **r_msg, BMOperator **r_op, eBMOpErrorLevel *r_level)
void * BMO_slot_buffer_alloc(BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int len)
void BMO_slot_buffer_from_enabled_flag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char htype, const short oflag)
bool BMO_slot_bool_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
void BMO_op_init(BMesh *bm, BMOperator *op, const int flag, const char *opname)
BMESH OPSTACK INIT OP.
bool BMO_op_callf(BMesh *bm, const int flag, const char *fmt,...)
void * BMO_iter_step(BMOIter *iter)
#define BM_ELEM_API_FLAG_CLEAR(element)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
void *(* MEM_mallocN)(size_t len, const char *str)
void *(* MEM_recallocN_id)(void *vmemh, size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
static void error(const char *str)
struct BMFlagLayer * oflags
struct BMEditSelection * next
struct BMFlagLayer * oflags
eBMOpSlotSubType_Union subtype
BMOSlotType slot_types_in[BMO_OP_MAX_SLOTS]
BMOSlotType slot_types_out[BMO_OP_MAX_SLOTS]
void(* exec)(BMesh *bm, BMOperator *op)
eBMOpSlotSubType_Union slot_subtype
union BMOpSlot::@139 data
struct BMOpSlot::@139::@140 enum_data
struct BMOpSlot slots_out[BMO_OP_MAX_SLOTS]
struct BMOpSlot slots_in[BMO_OP_MAX_SLOTS]
void(* exec)(BMesh *bm, struct BMOperator *op)
struct BMFlagLayer * oflags
struct BLI_mempool * vtoolflagpool
struct BLI_mempool * etoolflagpool
struct BLI_mempool * ftoolflagpool
eBMOpSlotSubType_Int intg
eBMOpSlotSubType_Elem elem