52 if (v_other == v_pivot) {
55 e_chain = e_chain_next;
57 v_end_pair[j++] = v_other;
72 return (((depths[0][index] != -1) && (depths[1][index] != -1)) &&
73 ((depths[0][index] + depths[1][index]) < pass));
117 const char path_htype)
119 int ele_verts_len[2];
123 for (
int side = 0; side < 2; side++) {
124 BMElem *ele = side ? ele_dst : ele_src;
134 ele_verts[side][j++] = l_iter->
v;
135 }
while ((l_iter = l_iter->
next) != l_first);
141 ele_verts[side][j++] =
e->v1;
142 ele_verts[side][j++] =
e->v2;
148 ele_verts[side][j++] =
v;
153 ele_verts_len[side] = j;
156 int *depths[2] = {
nullptr};
173 bool found_all =
false;
175 for (
int side = 0; side < 2; side++) {
176 const int side_other = !side;
186 for (
int i = 0; i < ele_verts_len[side]; i++) {
187 BMVert *
v = ele_verts[side][i];
199 for (
int i = 0; i < ele_verts_len[side]; i++) {
200 BMVert *
v = ele_verts[side][i];
203 for (
int j = 0; j < 2; j++) {
205 if (depths[side][v_end_index] == -1) {
206 depths[side][v_end_index] = 0;
220 for (pass = 1; (
STACK_SIZE(stack) != 0); pass++) {
229 if (depths[side][v_b_index] == -1) {
236 depths[side][v_b_index] = pass;
242 e_chain = e_chain_next;
248 if (depths[side][v_b_index] == -1) {
253 depths[side][v_b_index] = pass;
267 for (
int i = 0; i < ele_verts_len[side_other]; i++) {
273 if (found_all ==
true) {
283 if (found_all ==
false) {
295 if (found_all ==
false) {
298 else if (path_htype ==
BM_FACE) {
314 }
while ((l_iter = l_iter->
next) != l_first);
319 int ok_tests = f->
len > 3 ? 1 : 0;
328 }
while ((l_iter = l_iter->
next) != l_first);
337 else if (path_htype ==
BM_EDGE) {
345 for (
int j = 0; j < 2; j++) {
358 else if (path_htype ==
BM_VERT) {
369 for (
int side = 0; side < 2; side++) {
387 bool (*filter_fn)(
BMVert *,
void *user_data),
410 bool (*filter_fn)(
BMEdge *,
void *user_data),
428 for (
int j = 0; j < 2; j++) {
442 bool (*filter_fn)(
BMFace *,
void *user_data),
464 }
while ((l_iter = l_iter->
next) != l_first);
#define BLI_array_alloca(arr, realsize)
void void BLI_linklist_prepend(LinkNode **listp, void *ptr) ATTR_NONNULL(1)
void copy_vn_i(int *array_tar, int size, int val)
#define STACK_CLEAR(stack)
#define STACK_PUSH(stack, val)
#define STACK_DECLARE(stack)
#define STACK_SIZE(stack)
#define STACK_INIT(stack, stack_num)
#define STACK_SWAP(stack_a, stack_b)
Read Guarded memory(de)allocation.
#define BM_DISK_EDGE_NEXT(e, v)
#define BM_FACE_FIRST_LOOP(p)
#define BM_elem_index_get(ele)
#define BM_elem_flag_disable(ele, hflag)
#define BM_elem_flag_set(ele, hflag, val)
#define BM_elem_index_set(ele, index)
#define BM_elem_flag_test(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
void BM_mesh_elem_hflag_enable_all(BMesh *bm, const char htype, const char hflag, const bool respecthide)
void BM_mesh_elem_index_ensure(BMesh *bm, const char htype)
LinkNode * BM_mesh_calc_path_region_vert(BMesh *bm, BMElem *ele_src, BMElem *ele_dst, bool(*filter_fn)(BMVert *, void *user_data), void *user_data)
static LinkNode * mesh_calc_path_region_elem(BMesh *bm, BMElem *ele_src, BMElem *ele_dst, const char path_htype)
static bool bm_vert_region_test(BMVert *v, int *const depths[2], const int pass)
static bool bm_vert_pair_ends(BMVert *v_pivot, BMVert *v_end_pair[2])
static bool bm_vert_region_test_chain(BMVert *v, int *const depths[2], const int pass)
LinkNode * BM_mesh_calc_path_region_edge(BMesh *bm, BMElem *ele_src, BMElem *ele_dst, bool(*filter_fn)(BMEdge *, void *user_data), void *user_data)
LinkNode * BM_mesh_calc_path_region_face(BMesh *bm, BMElem *ele_src, BMElem *ele_dst, bool(*filter_fn)(BMFace *, void *user_data), void *user_data)
bool BM_vert_is_edge_pair_manifold(const BMVert *v)
BLI_INLINE BMVert * BM_edge_other_vert(BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)