39 uint tot_edge_boundary = 0;
40 uint tot_edge_manifold = 0;
41 uint tot_edge_wire = 0;
65 if (((tot_edge == 4) && (tot_edge_boundary == 0) && (tot_edge_manifold == 4)) ||
66 ((tot_edge == 3) && (tot_edge_boundary == 0) && (tot_edge_manifold == 3)) ||
67 ((tot_edge == 3) && (tot_edge_boundary == 2) && (tot_edge_manifold == 1))) {
72 else if ((tot_edge == 2) && (tot_edge_wire == 2)) {
93 uint tot_edge_boundary = 0;
94 uint tot_edge_manifold = 0;
95 uint tot_edge_wire = 0;
112 if (tot_edge_wire == 2) {
116 else if (tot_edge == 4) {
118 if (tot_edge_boundary == 0 && tot_edge_manifold == 4) {
123 else if (tot_edge == 3) {
125 if (tot_edge_boundary == 2 && tot_edge_manifold == 1) {
129 else if (tot_edge_boundary == 0 && tot_edge_manifold == 3) {
143 for (i = 0; i < tot_loop; i++) {
176 # define ELE_VERT_TAG 1
180 uint vert_seek_a_tot = 0;
181 uint vert_seek_b_tot = 0;
186 const uint offset = 0;
193 if (tag_only ==
false) {
200 for (iter_step = 0; iter_step < iterations; iter_step++) {
242 if (v_first ==
NULL) {
279 vert_seek_b[vert_seek_b_tot++] = v_first;
284 if ((offset + depth) % nth) {
286 for (i = 0; i < vert_seek_b_tot; i++) {
293 vert_seek_a[vert_seek_a_tot++] = v_other;
297 if (vert_seek_a_tot == 0) {
303 for (i = 0; i < vert_seek_a_tot; i++) {
310 vert_seek_b[vert_seek_b_tot++] = v_other;
314 if (vert_seek_b_tot == 0) {
334 if (iter_done ==
false) {
Read Guarded memory(de)allocation.
static bool bm_vert_dissolve_fan_test(BMVert *v)
static bool bm_vert_dissolve_fan(BMesh *bm, BMVert *v)
void BM_mesh_decimate_unsubdivide(BMesh *bm, const int iterations)
void BM_mesh_decimate_unsubdivide_ex(BMesh *bm, const int iterations, const bool tag_only)
#define BM_elem_index_get(ele)
#define BM_elem_flag_merge_into(ele, ele_a, ele_b)
#define BM_elem_index_set(ele, index)
#define BM_elem_flag_test(ele, hflag)
#define BM_elem_flag_enable(ele, hflag)
void * BM_iter_at_index(BMesh *bm, const char itype, void *data, int index)
int BM_iter_as_array(BMesh *bm, const char itype, void *data, void **array, const int len)
Iterator as Array.
#define BM_ITER_ELEM(ele, iter, data, itype)
#define BM_ITER_MESH(ele, iter, bm, itype)
#define BM_ITER_MESH_MUTABLE(ele, ele_next, iter, bm, itype)
ATTR_WARN_UNUSED_RESULT BMesh * bm
bool BM_vert_dissolve(BMesh *bm, BMVert *v)
Dissolve Vert.
BMEdge * BM_vert_collapse_edge(BMesh *bm, BMEdge *e_kill, BMVert *v_kill, const bool do_del, const bool kill_degenerate_faces, const bool kill_duplicate_faces)
Vert Collapse Faces.
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.
#define BMO_vert_flag_enable(bm, e, oflag)
#define BMO_vert_flag_test(bm, e, oflag)
BMFace * BM_face_exists(BMVert **varr, int len)
BLI_INLINE bool BM_edge_is_manifold(const BMEdge *e) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE bool BM_edge_is_boundary(const BMEdge *e) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE BMVert * BM_edge_other_vert(BMEdge *e, const BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE bool BM_edge_is_wire(const BMEdge *e) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert const BMEdge * e
ATTR_WARN_UNUSED_RESULT const BMVert * v
void BMW_init(BMWalker *walker, BMesh *bm, int type, short mask_vert, short mask_edge, short mask_face, BMWFlag flag, int layer)
Init Walker.
void BMW_end(BMWalker *walker)
End Walker.
int BMW_current_depth(BMWalker *walker)
Walker Current Depth.
void * BMW_begin(BMWalker *walker, void *start)
void * BMW_step(BMWalker *walker)
Step Walker.
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)