29 const char *identifier);
31 const char *identifier);
67 if (
bm->toolflag_index > 0) {
77 if (
bm->toolflag_index > 0) {
89 for (
i = 0; slot_types[
i].
type;
i++) {
119 for (
i = 0; slot_types[
i].
type;
i++) {
120 slot = &slot_args[
i];
173 if (
bm->toolflag_index == 1) {
178 if (
bm->toolflag_index == 1) {
196 memset(op, 0xff,
sizeof(*op));
205 return (slot_code >= 0);
218 return &slot_args[slot_code];
222 const char *slot_name_src,
224 const char *slot_name_dst,
230 if (slot_src == slot_dst) {
242 slot_dst->
len = slot_src->
len;
250 if ((src_elem_flag | dst_elem_flag) == dst_elem_flag) {
255 const uint tot = slot_src->
len;
259 for (
i = 0;
i < tot;
i++, ele_src++) {
260 if ((*ele_src)->head.htype & dst_elem_flag) {
272 if (slot_src->
len == slot_dst->
len) {
277 const uint tot = slot_src->
len;
281 for (
i = 0;
i < tot;
i++, ele_src++) {
282 if ((*ele_src)->head.htype & dst_elem_flag) {
345 const char *slot_name,
361 else if (
size == 3) {
365 fprintf(stderr,
"%s: invalid size argument %d (bmesh internal error)\n", __func__,
size);
372 const char *slot_name,
390 const char *slot_name,
419 const char *slot_name,
510 const bool test_for_enabled)
512 int count_vert = 0, count_edge = 0, count_face = 0;
542 return (count_vert + count_edge + count_face);
584 const bool check_select)
586 if (
bm->selected.first) {
590 for (ese =
static_cast<BMEditSelection *
>(
bm->selected.first); ese; ese = ese_next) {
591 ese_next = ese->
next;
593 switch (ese->
htype) {
595 slot_elem_map = slot_vert_map;
598 slot_elem_map = slot_edge_map;
601 slot_elem_map = slot_face_map;
605 ese->
ele =
static_cast<BMElem *
>(BMO_slot_map_elem_get(slot_elem_map, ese->
ele));
617 BMFace *f =
static_cast<BMFace *
>(BMO_slot_map_elem_get(slot_face_map,
bm->act_face));
657 BMOpSlot *slot = &op->slots[slot_code];
668 if (slot->flag & BMOS_DYNAMIC_ARRAY) {
669 if (slot->
len >= slot->size) {
670 slot->size = (slot->size + 1 + totadd) * 2;
680 slot->flag |= BMOS_DYNAMIC_ARRAY;
682 slot->size = slot->
len + 2;
689 memcpy(slot->
data.
buf, tmp, allocsize);
698 const char *slot_name,
718 const char *slot_name,
730 slot->
data.
buf =
static_cast<void **
>(
743 const char *slot_name,
747 int totelement = 0,
i = 0;
753 totelement +=
bm->totvert;
756 totelement +=
bm->totedge;
759 totelement +=
bm->totface;
802 const char *slot_name,
805 const bool test_for_enabled)
808 int totelement = 0,
i = 0;
816 if (test_for_enabled) {
872 const char *slot_name,
882 const char *slot_name,
898 slot->
data.
buf =
static_cast<void **
>(
913 if (slot->
data.
buf ==
nullptr) {
914 slot->
data.
buf =
static_cast<void **
>(
918 slot->
len = ele_buffer_len;
919 memcpy(slot->
data.
buf, ele_buffer, ele_buffer_len *
sizeof(*slot->
data.
buf));
932 const char *slot_name_dst,
934 const char *slot_name_src,
943 if (slot_dst->
len == 0) {
945 _bmo_slot_copy(slot_args_src, slot_name_src, slot_args_dst, slot_name_dst, arena_dst);
947 else if (slot_src->
len != 0) {
949 int alloc_size = elem_size * (slot_dst->
len + slot_src->
len);
954 memcpy(buf, slot_dst->
data.
buf, elem_size * slot_dst->
len);
956 ((
char *)buf) + elem_size * slot_dst->
len, slot_src->
data.
buf, elem_size * slot_src->
len);
958 slot_dst->
data.
buf =
static_cast<void **
>(buf);
959 slot_dst->
len += slot_src->
len;
972 const char *slot_name,
975 const bool test_for_enabled)
978 int totelement,
i = 0;
986 if (test_for_enabled) {
1039 const char *slot_name,
1049 const char *slot_name,
1058 const char *slot_name,
1061 const bool do_flush)
1066 const bool do_flush_select = (do_flush && (hflag &
BM_ELEM_SELECT));
1067 const bool do_flush_hide = (do_flush && (hflag &
BM_ELEM_HIDDEN));
1074 if (!(htype & (*data)->head.htype)) {
1078 if (do_flush_select) {
1082 if (do_flush_hide) {
1092 const char *slot_name,
1095 const bool do_flush)
1100 const bool do_flush_select = (do_flush && (hflag &
BM_ELEM_SELECT));
1101 const bool do_flush_hide = (do_flush && (hflag &
BM_ELEM_HIDDEN));
1107 if (!(htype & (*data)->head.htype)) {
1111 if (do_flush_select) {
1115 if (do_flush_hide) {
1125 const char *slot_name,
1136 for (
i = 0;
i < slot->
len;
i++) {
1137 if (!(htype &
data[
i]->htype)) {
1147 const char *slot_name,
1158 for (
i = 0;
i < slot->
len;
i++) {
1159 if (!(htype &
data[
i]->htype)) {
1190 const size_t old_totflags_size = (
bm->totflags *
sizeof(
BMFlagLayer));
1208 void *oldflags = v_oflag->
oflags;
1210 memcpy(v_oflag->
oflags, oldflags, old_totflags_size);
1216 newpool =
bm->etoolflagpool;
1218 void *oldflags = e_oflag->
oflags;
1220 memcpy(e_oflag->
oflags, oldflags, old_totflags_size);
1226 newpool =
bm->ftoolflagpool;
1228 void *oldflags = f_oflag->
oflags;
1230 memcpy(f_oflag->
oflags, oldflags, old_totflags_size);
1252 const size_t new_totflags_size = ((
bm->totflags - 1) *
sizeof(
BMFlagLayer));
1268 void *oldflags = v_oflag->
oflags;
1270 memcpy(v_oflag->
oflags, oldflags, new_totflags_size);
1276 newpool =
bm->etoolflagpool;
1278 void *oldflags = e_oflag->
oflags;
1280 memcpy(e_oflag->
oflags, oldflags, new_totflags_size);
1286 newpool =
bm->ftoolflagpool;
1288 void *oldflags = f_oflag->
oflags;
1290 memcpy(f_oflag->
oflags, oldflags, new_totflags_size);
1308 const int totflags_offset =
bm->totflags - 1;
1316 ele->
oflags[totflags_offset] = zero_flag;
1325 ele->
oflags[totflags_offset] = zero_flag;
1334 ele->
oflags[totflags_offset] = zero_flag;
1355 const char *slot_name,
1356 const char restrictmask)
1360 memset(iter, 0,
sizeof(
BMOIter));
1385 if (iter->
cur >= slot->
len) {
1391 if (iter->
cur >= slot->
len) {
1414 iter->
val =
nullptr;
1436 return iter->
val ? *iter->
val :
nullptr;
1442 return **((
float **)iter->
val);
1448 return **((
int **)iter->
val);
1454 return **((
bool **)iter->
val);
1488 if (err->level == level) {
1498 if (err ==
nullptr) {
1509 *r_level = err->
level;
1521 if (err->level >= level) {
1549#define NEXT_CHAR(fmt) ((fmt)[0] != 0 ? (fmt)[1] : 0)
1555 while (slot_args->slot_name) {
1567 const char *identifier)
1572 "%s: ! could not find bmesh slot for name %s! (bmesh internal error)\n",
1585 for (
i = 0;
i < tot;
i++) {
1598 "%s: could not find bmesh slot for name %s! (bmesh internal error)\n",
1608 char *opname, *ofmt, *fmt;
1609 char slot_name[64] = {0};
1614 const char *err_reason =
"Unknown";
1617#define GOTO_ERROR(reason) \
1619 err_reason = reason; \
1620 lineno = __LINE__; \
1629 i = strcspn(fmt,
" ");
1632 noslot = (opname[
i] ==
'\0');
1635 fmt +=
i + (noslot ? 0 : 1);
1654 i = strspn(fmt,
" ");
1663 i = strcspn(fmt,
"=");
1665 GOTO_ERROR(
"could not match end of slot name");
1671 GOTO_ERROR(
"name to slot code check failed");
1693 else if (c ==
'4') {
1714 int ele_buffer_len = va_arg(vlist,
int);
1732 const char *slot_name_other = va_arg(vlist,
char *);
1736 BMO_slot_copy(op_other, slots_in, slot_name_other, op, slots_in, slot_name);
1740 BMO_slot_copy(op_other, slots_out, slot_name_other, op, slots_in, slot_name);
1776 else if (c ==
'e') {
1779 else if (c ==
'v') {
1796 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1798 else if (type ==
'H') {
1800 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1802 else if (type ==
'a') {
1811 else if (type ==
'f') {
1813 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1815 else if (type ==
'F') {
1817 bm, op, op->
slots_in, slot_name, htype, va_arg(vlist,
int));
1825 "%s: unrecognized bmop format char: '%c', %d in '%s'\n",
1841 fprintf(stderr,
"%s: error parsing formatting string\n", __func__);
1843 fprintf(stderr,
"string: '%s', position %d\n", _fmt,
int(fmt - ofmt));
1844 fprintf(stderr,
" ");
1846 int pos = int(fmt - ofmt);
1847 for (
i = 0;
i <
pos;
i++) {
1848 fprintf(stderr,
" ");
1850 fprintf(stderr,
"^\n");
1853 fprintf(stderr,
"source code: %s:%d\n", __FILE__, lineno);
1855 fprintf(stderr,
"reason: %s\n", err_reason);
1869 va_start(list, fmt);
1871 printf(
"%s: failed\n", __func__);
1885 va_start(list, fmt);
1887 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
#define LISTBASE_FOREACH(type, var, list)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_addhead(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 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])
void unit_m4(float m[4][4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define BLI_MEMARENA_STD_BUFSIZE
MemArena * BLI_memarena_new(size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_RETURNS_NONNULL ATTR_NONNULL(2) ATTR_MALLOC
void BLI_memarena_free(MemArena *ma) ATTR_NONNULL(1)
void * BLI_memarena_alloc(MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
void BLI_memarena_use_calloc(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
char * STRNCPY(char(&dst)[N], const char *src)
#define STREQLEN(a, b, n)
Read Guarded memory(de)allocation.
#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)
BMesh const char void * data
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
const int BMO_OPSLOT_TYPEINFO[BMO_OP_SLOT_TOTAL_TYPES]
#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 void * element
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)
static int bmo_name_to_slotcode(const BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
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)
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)
void BMO_slot_int_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int i)
static int bmo_name_to_slotcode_check(const BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
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 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)
void * MEM_callocN(size_t len, const char *str)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void *(* MEM_recallocN_id)(void *vmemh, size_t len, const char *str)
void MEM_freeN(void *vmemh)
static void error(const char *str)
static void init(bNodeTree *, bNode *node)
struct BMFlagLayer * oflags
struct BMEditSelection * next
struct BMFlagLayer * oflags
eBMOpSlotSubType_Union subtype
union BMOpSlot::@313121210037300127305053354046356312170117023254 data
eBMOpSlotSubType_Union slot_subtype
struct BMOpSlot::@313121210037300127305053354046356312170117023254::@263061076130337244124145337307265057223360175210 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
eBMOpSlotSubType_Int intg
eBMOpSlotSubType_Elem elem