23 #define EDGE_OUT_ADJ 2
26 #define FACE_EXCLUDE 4
30 const uint pair_split_max = f->
len / 2;
51 l_tag_prev = l_tag_first = l_iter;
60 l_pair[0] = l_tag_prev;
67 }
while ((l_iter = l_iter->
next) != l_first);
75 (((loops_split[0][0] == l_tag_first) && (loops_split[0][1] == l_tag_prev)) == 0)) {
77 l_pair[0] = l_tag_first;
78 l_pair[1] = l_tag_prev;
81 if (check_degenerate) {
88 for (i = 0; i <
STACK_SIZE(loops_split); i++) {
90 if (loops_split[i][0] ==
NULL) {
95 v_pair[0] = loops_split[i][0]->
v;
96 v_pair[1] = loops_split[i][1]->
v;
102 for (i = 0; i <
STACK_SIZE(verts_pair); i++) {
117 for (
int j = 0; j < 2; j++) {
119 if (l_pair_deferred_remove ==
NULL) {
121 l_pair_deferred_remove[0] =
NULL;
122 l_pair_deferred_remove[1] =
NULL;
124 l_pair_deferred_remove[j] = l_pair[j];
134 if (!l_new || !f_new) {
144 for (i = 0; i <
STACK_SIZE(loops_split); i++) {
145 for (
int j = 0; j < 2; j++) {
146 if (loops_split[i][j] !=
NULL) {
#define BLI_array_alloca(arr, realsize)
BLI_LINKSTACK_*** wrapper macros for using a LinkNode to store a stack of pointers,...
#define BLI_LINKSTACK_PUSH(var, ptr)
#define BLI_LINKSTACK_DECLARE(var, type)
#define BLI_LINKSTACK_FREE(var)
#define BLI_LINKSTACK_INIT(var)
#define BLI_LINKSTACK_POP(var)
#define STACK_CLEAR(stack)
#define STACK_DECLARE(stack)
#define STACK_SIZE(stack)
#define STACK_INIT(stack, stack_num)
#define STACK_PUSH_RET(stack)
#define BM_FACE_FIRST_LOOP(p)
void BM_face_kill(BMesh *bm, BMFace *f)
void BMO_error_raise(BMesh *bm, BMOperator *owner, eBMOpErrorLevel level, const char *msg) ATTR_NONNULL(1
#define BM_ITER_ELEM(ele, iter, data, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
BMFace * BM_face_split(BMesh *bm, BMFace *f, BMLoop *l_a, BMLoop *l_b, BMLoop **r_l, BMEdge *example, const bool no_double)
Face Split.
void BMO_slot_buffer_flag_enable(BMesh *bm, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, char htype, short oflag)
BMO_FLAG_BUFFER.
#define BMO_edge_flag_test(bm, e, oflag)
#define BMO_edge_flag_enable(bm, e, oflag)
#define BMO_vert_flag_enable(bm, e, oflag)
void BMO_slot_buffer_from_enabled_flag(BMesh *bm, BMOperator *op, BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name, char htype, short oflag)
#define BMO_face_flag_enable(bm, e, oflag)
#define BMO_ITER(ele, iter, slot_args, slot_name, restrict_flag)
#define BMO_vert_flag_test(bm, e, oflag)
#define BMO_face_flag_test(bm, e, oflag)
bool BMO_slot_bool_get(BMOpSlot slot_args[BMO_OP_MAX_SLOTS], const char *slot_name)
void BM_face_splits_check_optimal(BMFace *f, BMLoop *(*loops)[2], int len)
void BM_face_splits_check_legal(BMesh *bm, BMFace *f, BMLoop *(*loops)[2], int len)
BMEdge * BM_edge_exists(BMVert *v_a, BMVert *v_b)
BMFace * BM_face_find_double(BMFace *f)
BMLoop * BM_face_vert_share_loop(BMFace *f, BMVert *v)
Return the Loop Shared by Face and Vertex.
BLI_INLINE bool BM_loop_is_adjacent(const BMLoop *l_a, const BMLoop *l_b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
void bmo_connect_verts_exec(BMesh *bm, BMOperator *op)
static int bm_face_connect_verts(BMesh *bm, BMFace *f, const bool check_degenerate)
struct BMOpSlot slots_out[BMO_OP_MAX_SLOTS]
struct BMOpSlot slots_in[BMO_OP_MAX_SLOTS]