Changeset View
Changeset View
Standalone View
Standalone View
source/blender/bmesh/tools/bmesh_bisect_plane.c
| Show First 20 Lines • Show All 147 Lines • ▼ Show 20 Lines | if (LIKELY(STACK_SIZE(vert_split_arr) == 2)) { | ||||
| BMLoop *l_new; | BMLoop *l_new; | ||||
| BMLoop *l_a, *l_b; | BMLoop *l_a, *l_b; | ||||
| l_a = BM_face_vert_share_loop(f, vert_split_arr[0]); | l_a = BM_face_vert_share_loop(f, vert_split_arr[0]); | ||||
| l_b = BM_face_vert_share_loop(f, vert_split_arr[1]); | l_b = BM_face_vert_share_loop(f, vert_split_arr[1]); | ||||
| /* common case, just cut the face once */ | /* common case, just cut the face once */ | ||||
| BM_face_split(bm, f, l_a, l_b, &l_new, NULL, true); | BM_face_split(bm, f, l_a, l_b, &l_new, NULL, true); | ||||
| if (l_new) { | if (l_new && bm->use_toolflags) { | ||||
campbellbarton: Checks for `bm->use_toolflags` shouldn't be needed. Just pass in zero `oflag_center` .. etc. | |||||
| if (oflag_center | oflag_new) { | if (oflag_center | oflag_new) { | ||||
| BMO_edge_flag_enable(bm, l_new->e, oflag_center | oflag_new); | BMO_edge_flag_enable(bm, l_new->e, oflag_center | oflag_new); | ||||
| } | } | ||||
| if (oflag_new) { | if (oflag_new) { | ||||
| BMO_face_flag_enable(bm, l_new->f, oflag_new); | BMO_face_flag_enable(bm, l_new->f, oflag_new); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | else { | ||||
| /* in fact this simple test is good enough, | /* in fact this simple test is good enough, | ||||
| * test if the loops are adjacent */ | * test if the loops are adjacent */ | ||||
| if (found && !BM_loop_is_adjacent(l_a, l_b)) { | if (found && !BM_loop_is_adjacent(l_a, l_b)) { | ||||
| BMLoop *l_new; | BMLoop *l_new; | ||||
| BMFace *f_tmp; | BMFace *f_tmp; | ||||
| f_tmp = BM_face_split(bm, face_split_arr[j], l_a, l_b, &l_new, NULL, true); | f_tmp = BM_face_split(bm, face_split_arr[j], l_a, l_b, &l_new, NULL, true); | ||||
| if (l_new) { | if (l_new && bm->use_toolflags) { | ||||
| if (oflag_center | oflag_new) { | if (oflag_center | oflag_new) { | ||||
| BMO_edge_flag_enable(bm, l_new->e, oflag_center | oflag_new); | BMO_edge_flag_enable(bm, l_new->e, oflag_center | oflag_new); | ||||
| } | } | ||||
| if (oflag_new) { | if (oflag_new) { | ||||
| BMO_face_flag_enable(bm, l_new->f, oflag_new); | BMO_face_flag_enable(bm, l_new->f, oflag_new); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | if (use_tag && !BM_elem_flag_test(v, BM_ELEM_TAG)) { | ||||
| continue; | continue; | ||||
| } | } | ||||
| vert_is_center_disable(v); | vert_is_center_disable(v); | ||||
| BM_VERT_DIR(v) = plane_point_test_v3(plane, v->co, eps, &(BM_VERT_DIST(v))); | BM_VERT_DIR(v) = plane_point_test_v3(plane, v->co, eps, &(BM_VERT_DIST(v))); | ||||
| if (BM_VERT_DIR(v) == 0) { | if (BM_VERT_DIR(v) == 0) { | ||||
| if (oflag_center) { | if (oflag_center && bm->use_toolflags) { | ||||
| BMO_vert_flag_enable(bm, v, oflag_center); | BMO_vert_flag_enable(bm, v, oflag_center); | ||||
| } | } | ||||
| if (use_snap_center) { | if (use_snap_center) { | ||||
| closest_to_plane_v3(v->co, plane, v->co); | closest_to_plane_v3(v->co, plane, v->co); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| Show All 19 Lines | if (side[0] && side[1] && (side[0] != side[1])) { | ||||
| BLI_LINKSTACK_PUSH(face_stack, l_iter->f); | BLI_LINKSTACK_PUSH(face_stack, l_iter->f); | ||||
| } | } | ||||
| } while ((l_iter = l_iter->radial_next) != l_first); | } while ((l_iter = l_iter->radial_next) != l_first); | ||||
| } | } | ||||
| { | { | ||||
| BMEdge *e_new; | BMEdge *e_new; | ||||
| v_new = BM_edge_split(bm, e, e->v1, &e_new, e_fac); | v_new = BM_edge_split(bm, e, e->v1, &e_new, e_fac); | ||||
| if (oflag_new) { | if (oflag_new && bm->use_toolflags) { | ||||
| BMO_edge_flag_enable(bm, e_new, oflag_new); | BMO_edge_flag_enable(bm, e_new, oflag_new); | ||||
| } | } | ||||
| } | } | ||||
| vert_is_center_enable(v_new); | vert_is_center_enable(v_new); | ||||
| if (oflag_new | oflag_center) { | if ((oflag_new | oflag_center) && bm->use_toolflags) { | ||||
| BMO_vert_flag_enable(bm, v_new, oflag_new | oflag_center); | BMO_vert_flag_enable(bm, v_new, oflag_new | oflag_center); | ||||
| } | } | ||||
| BM_VERT_DIR(v_new) = 0; | BM_VERT_DIR(v_new) = 0; | ||||
| BM_VERT_DIST(v_new) = 0.0f; | BM_VERT_DIST(v_new) = 0.0f; | ||||
| } | } | ||||
| else if (side[0] == 0 || side[1] == 0) { | else if (side[0] == 0 || side[1] == 0) { | ||||
| /* check if either edge verts are aligned, | /* check if either edge verts are aligned, | ||||
| Show All 14 Lines | else if (side[0] == 0 || side[1] == 0) { | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* if both verts are on the center - tag it */ | /* if both verts are on the center - tag it */ | ||||
| if (oflag_center) { | if (oflag_center && bm->use_toolflags) { | ||||
| if (side[0] == 0 && side[1] == 0) { | if (side[0] == 0 && side[1] == 0) { | ||||
| BMO_edge_flag_enable(bm, e, oflag_center); | BMO_edge_flag_enable(bm, e, oflag_center); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| MEM_freeN(edges_arr); | MEM_freeN(edges_arr); | ||||
| Show All 11 Lines | |||||
Checks for bm->use_toolflags shouldn't be needed. Just pass in zero oflag_center .. etc.