25 uint tot_edge_boundary = 0;
26 uint tot_edge_manifold = 0;
27 uint tot_edge_wire = 0;
51 if (((tot_edge == 4) && (tot_edge_boundary == 0) && (tot_edge_manifold == 4)) ||
52 ((tot_edge == 3) && (tot_edge_boundary == 0) && (tot_edge_manifold == 3)) ||
53 ((tot_edge == 3) && (tot_edge_boundary == 2) && (tot_edge_manifold == 1))) {
58 else if ((tot_edge == 2) && (tot_edge_wire == 2)) {
79 uint tot_edge_boundary = 0;
80 uint tot_edge_manifold = 0;
81 uint tot_edge_wire = 0;
98 if (tot_edge_wire == 2) {
102 else if (tot_edge == 4) {
104 if (tot_edge_boundary == 0 && tot_edge_manifold == 4) {
109 else if (tot_edge == 3) {
111 if (tot_edge_boundary == 2 && tot_edge_manifold == 1) {
115 else if (tot_edge_boundary == 0 && tot_edge_manifold == 3) {
129 for (i = 0; i < tot_loop; i++) {
160 # define ELE_VERT_TAG 1
164 uint vert_seek_a_tot = 0;
165 uint vert_seek_b_tot = 0;
177 if (tag_only ==
false) {
184 for (iter_step = 0; iter_step < iterations; iter_step++) {
226 if (v_first ==
NULL) {
263 vert_seek_b[vert_seek_b_tot++] = v_first;
268 if ((
offset + depth) % nth) {
270 for (i = 0; i < vert_seek_b_tot; i++) {
277 vert_seek_a[vert_seek_a_tot++] = v_other;
281 if (vert_seek_a_tot == 0) {
287 for (i = 0; i < vert_seek_a_tot; i++) {
294 vert_seek_b[vert_seek_b_tot++] = v_other;
298 if (vert_seek_b_tot == 0) {
318 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.
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)