43 const char *identifier);
47 N_(
"Could not connect vertices"),
48 N_(
"Could not dissolve faces"),
49 N_(
"Invalid selection"),
50 N_(
"Internal mesh error"),
51 N_(
"Convex hull failed"),
125 for (i = 0; slot_types[i].
type; i++) {
126 slot = &slot_args[i];
154 for (i = 0; slot_types[i].
type; i++) {
155 slot = &slot_args[i];
246 memset(op, 0xff,
sizeof(*op));
260 return (slot_code >= 0);
278 return &slot_args[slot_code];
288 const char *slot_name_src,
290 const char *slot_name_dst,
296 if (slot_src == slot_dst) {
308 slot_dst->
len = slot_src->
len;
314 if ((src_elem_flag | dst_elem_flag) == dst_elem_flag) {
319 const uint tot = slot_src->
len;
323 for (i = 0; i < tot; i++, ele_src++) {
324 if ((*ele_src)->head.htype & dst_elem_flag) {
336 if (slot_src->
len == slot_dst->
len) {
341 const uint tot = slot_src->
len;
345 for (i = 0; i < tot; i++, ele_src++) {
346 if ((*ele_src)->head.htype & dst_elem_flag) {
410 const char *slot_name,
426 else if (
size == 3) {
430 fprintf(stderr,
"%s: invalid size argument %d (bmesh internal error)\n", __func__,
size);
437 const char *slot_name,
455 const char *slot_name,
484 const char *slot_name,
576 const bool test_for_enabled)
578 int count_vert = 0, count_edge = 0, count_face = 0;
608 return (count_vert + count_edge + count_face);
653 const bool check_select)
660 ese_next = ese->
next;
662 switch (ese->
htype) {
664 slot_elem_map = slot_vert_map;
667 slot_elem_map = slot_edge_map;
670 slot_elem_map = slot_face_map;
674 ese->
ele = BMO_slot_map_elem_get(slot_elem_map, ese->
ele);
728 BMOpSlot *slot = &op->slots[slot_code];
739 if (slot->flag & BMOS_DYNAMIC_ARRAY) {
740 if (slot->
len >= slot->size) {
741 slot->size = (slot->size + 1 + totadd) * 2;
751 slot->flag |= BMOS_DYNAMIC_ARRAY;
753 slot->size = slot->
len + 2;
760 memcpy(slot->
data.
buf, tmp, allocsize);
769 const char *slot_name,
789 const char *slot_name,
818 const char *slot_name,
822 int totelement = 0, i = 0;
847 output->data.buf[i] = ele;
854 output->data.buf[i] = ele;
861 output->data.buf[i] = ele;
877 const char *slot_name,
880 const bool test_for_enabled)
883 int totelement = 0, i = 0;
891 if (test_for_enabled) {
910 output->data.buf[i] = ele;
920 output->data.buf[i] = ele;
930 output->data.buf[i] = ele;
944 const char *slot_name,
954 const char *slot_name,
988 slot->
len = ele_buffer_len;
989 memcpy(slot->
data.
buf, ele_buffer, ele_buffer_len *
sizeof(*slot->
data.
buf));
1005 const char *slot_name_dst,
1007 const char *slot_name_src,
1016 if (slot_dst->
len == 0) {
1018 _bmo_slot_copy(slot_args_src, slot_name_src, slot_args_dst, slot_name_dst, arena_dst);
1020 else if (slot_src->
len != 0) {
1022 int alloc_size = elem_size * (slot_dst->
len + slot_src->
len);
1027 memcpy(buf, slot_dst->
data.
buf, elem_size * slot_dst->
len);
1029 ((
char *)buf) + elem_size * slot_dst->
len, slot_src->
data.
buf, elem_size * slot_src->
len);
1032 slot_dst->
len += slot_src->
len;
1045 const char *slot_name,
1048 const bool test_for_enabled)
1051 int totelement, i = 0;
1059 if (test_for_enabled) {
1112 const char *slot_name,
1122 const char *slot_name,
1137 const char *slot_name,
1140 const bool do_flush)
1145 const bool do_flush_select = (do_flush && (hflag &
BM_ELEM_SELECT));
1146 const bool do_flush_hide = (do_flush && (hflag &
BM_ELEM_HIDDEN));
1152 for (i = 0; i < slot->
len; i++,
data++) {
1153 if (!(htype & (*data)->head.htype)) {
1157 if (do_flush_select) {
1161 if (do_flush_hide) {
1177 const char *slot_name,
1180 const bool do_flush)
1185 const bool do_flush_select = (do_flush && (hflag &
BM_ELEM_SELECT));
1186 const bool do_flush_hide = (do_flush && (hflag &
BM_ELEM_HIDDEN));
1191 for (i = 0; i < slot->
len; i++,
data++) {
1192 if (!(htype & (*data)->head.htype)) {
1196 if (do_flush_select) {
1200 if (do_flush_hide) {
1215 const char *slot_name,
1226 for (i = 0; i < slot->
len; i++) {
1227 if (!(htype &
data[i]->htype)) {
1242 const char *slot_name,
1253 for (i = 0; i < slot->
len; i++) {
1254 if (!(htype &
data[i]->htype)) {
1303 void *oldflags = v_oflag->
oflags;
1305 memcpy(v_oflag->
oflags, oldflags, old_totflags_size);
1313 void *oldflags = e_oflag->
oflags;
1315 memcpy(e_oflag->
oflags, oldflags, old_totflags_size);
1323 void *oldflags = f_oflag->
oflags;
1325 memcpy(f_oflag->
oflags, oldflags, old_totflags_size);
1363 void *oldflags = v_oflag->
oflags;
1365 memcpy(v_oflag->
oflags, oldflags, new_totflags_size);
1373 void *oldflags = e_oflag->
oflags;
1375 memcpy(e_oflag->
oflags, oldflags, new_totflags_size);
1383 void *oldflags = f_oflag->
oflags;
1385 memcpy(f_oflag->
oflags, oldflags, new_totflags_size);
1403 const int totflags_offset =
bm->
totflags - 1;
1411 ele->
oflags[totflags_offset] = zero_flag;
1420 ele->
oflags[totflags_offset] = zero_flag;
1429 ele->
oflags[totflags_offset] = zero_flag;
1456 const char *slot_name,
1457 const char restrictmask)
1461 memset(iter, 0,
sizeof(
BMOIter));
1486 if (iter->
cur >= slot->
len) {
1492 if (iter->
cur >= slot->
len) {
1547 return **((
float **)iter->
val);
1553 return **((
int **)iter->
val);
1559 return **((
bool **)iter->
val);
1581 err->errorcode = errcode;
1611 return err->errorcode;
1628 #define NEXT_CHAR(fmt) ((fmt)[0] != 0 ? (fmt)[1] : 0)
1634 while (slot_args->slot_name) {
1650 "%s: ! could not find bmesh slot for name %s! (bmesh internal error)\n",
1663 for (i = 0; i < tot; i++) {
1676 "%s: could not find bmesh slot for name %s! (bmesh internal error)\n",
1740 char *opname, *ofmt, *fmt;
1741 char slot_name[64] = {0};
1746 const char *err_reason =
"Unknown";
1749 #define GOTO_ERROR(reason) \
1751 err_reason = reason; \
1752 lineno = __LINE__; \
1761 i = strcspn(fmt,
" ");
1764 noslot = (opname[i] ==
'\0');
1767 fmt += i + (noslot ? 0 : 1);
1786 i = strspn(fmt,
" ");
1795 i = strcspn(fmt,
"=");
1797 GOTO_ERROR(
"could not match end of slot name");
1803 GOTO_ERROR(
"name to slot code check failed");
1825 else if (
c ==
'4') {
1845 BMHeader **ele_buffer = va_arg(vlist,
void *);
1846 int ele_buffer_len = va_arg(vlist,
int);
1853 BMHeader *ele = va_arg(vlist,
void *);
1863 BMOperator *op_other = va_arg(vlist,
void *);
1864 const char *slot_name_other = va_arg(vlist,
char *);
1868 BMO_slot_copy(op_other, slots_in, slot_name_other,
op, slots_in, slot_name);
1872 BMO_slot_copy(op_other, slots_out, slot_name_other,
op, slots_in, slot_name);
1908 else if (
c ==
'e') {
1911 else if (
c ==
'v') {
1930 else if (
type ==
'H') {
1934 else if (
type ==
'a') {
1943 else if (
type ==
'f') {
1947 else if (
type ==
'F') {
1957 "%s: unrecognized bmop format char: '%c', %d in '%s'\n",
1973 fprintf(stderr,
"%s: error parsing formatting string\n", __func__);
1975 fprintf(stderr,
"string: '%s', position %d\n", _fmt, (
int)(fmt - ofmt));
1976 fprintf(stderr,
" ");
1978 int pos = (int)(fmt - ofmt);
1979 for (i = 0; i <
pos; i++) {
1980 fprintf(stderr,
" ");
1982 fprintf(stderr,
"^\n");
1985 fprintf(stderr,
"source code: %s:%d\n", __FILE__, lineno);
1987 fprintf(stderr,
"reason: %s\n", err_reason);
2001 va_start(list, fmt);
2003 printf(
"%s: failed\n", __func__);
2017 va_start(list, fmt);
2019 printf(
"%s: failed, format is:\n \"%s\"\n", __func__, fmt);
typedef float(TangentPoint)[2]
BLI_INLINE void * BLI_ghashIterator_getKey(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
void BLI_ghashIterator_step(GHashIterator *ghi)
BLI_INLINE bool BLI_ghashIterator_done(GHashIterator *ghi) ATTR_WARN_UNUSED_RESULT
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_)
unsigned int BLI_ghash_len(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)
GHash * BLI_ghash_ptr_new(const char *info) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_ghashIterator_init(GHashIterator *ghi, GHash *gh)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
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_free(struct MemArena *ma) ATTR_NONNULL(1)
#define BLI_MEMARENA_STD_BUFSIZE
void BLI_memarena_use_calloc(struct MemArena *ma) ATTR_NONNULL(1)
void * BLI_memarena_alloc(struct MemArena *ma, size_t size) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC ATTR_ALLOC_SIZE(2)
struct MemArena * BLI_memarena_new(const size_t bufsize, const char *name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2) ATTR_MALLOC
void * BLI_mempool_calloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
BLI_mempool * BLI_mempool_create(unsigned int esize, unsigned int totelem, unsigned int pchunk, unsigned int flag) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_mempool_alloc(BLI_mempool *pool) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT 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() ATTR_MALLOC
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
#define STREQLEN(a, b, n)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
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 BM_mesh_elem_toolflags_ensure(BMesh *bm)
void bmesh_edit_begin(BMesh *UNUSED(bm), BMOpTypeFlag UNUSED(type_flag))
BMesh Begin Edit.
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 void * element
ATTR_WARN_UNUSED_RESULT const BMFlagLayer const short oflag
bool BMO_error_occurred(BMesh *bm)
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_iter_new(BMOIter *iter, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const char restrictmask)
New Iterator.
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_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, struct MemArena *arena_dst)
BMESH OPSTACK COPY SLOT.
void * BMO_slot_buffer_get_first(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
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_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_buffer_alloc(BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int len)
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_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_op_flag_enable(BMesh *UNUSED(bm), BMOperator *op, const int op_flag)
void BMO_push(BMesh *bm, BMOperator *UNUSED(op))
BMESH OPSTACK PUSH.
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])
void * BMO_iter_step(BMOIter *iter)
float BMO_slot_float_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
void * BMO_slot_buffer_get_single(BMOpSlot *slot)
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)
int BMO_error_pop(BMesh *bm, const char **msg, BMOperator **op)
void BMO_slot_buffer_from_single(BMOperator *op, BMOpSlot *slot, BMHeader *ele)
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, struct MemArena *arena_dst)
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.
BLI_STATIC_ASSERT(ARRAY_SIZE(bmo_error_messages)==BMERR_TOTAL, "message mismatch")
int BMO_iter_map_value_int(BMOIter *iter)
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.
struct BMOpError BMOpError
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_as_arrayN(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, int *len)
int BMO_opcode_from_opname(const char *opname)
void ** BMO_iter_map_value_p(BMOIter *iter)
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_op_flag_disable(BMesh *UNUSED(bm), BMOperator *op, const int op_flag)
int BMO_slot_map_count(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
void BMO_slot_mat3_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, float r_mat[3][3])
int BMO_slot_buffer_count(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
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)
bool BMO_op_vinitf(BMesh *bm, BMOperator *op, const int flag, const char *_fmt, va_list vlist)
Format Strings for BMOperator Initialization.
void BMO_mesh_flag_disable_all(BMesh *bm, BMOperator *UNUSED(op), const char htype, const short oflag)
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)
#define GOTO_ERROR(reason)
void * BMO_iter_map_value_ptr(BMOIter *iter)
static const char * bmo_error_messages[]
void BMO_slot_ptr_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, void *p)
BMOpSlot * BMO_slot_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
BMESH OPSTACK GET SLOT.
static int bmo_name_to_slotcode_check(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *identifier)
void * BMO_slot_ptr_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
void BMO_slot_int_set(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, const int i)
void BMO_error_raise(BMesh *bm, BMOperator *owner, int errcode, const char *msg)
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.
int BMO_error_get(BMesh *bm, const char **msg, BMOperator **op)
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.
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,...)
#define BM_ELEM_API_FLAG_CLEAR(element)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_recallocN_id)(void *vmemh, size_t len, const char *str)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(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