diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-12-14 08:09:40 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-12-15 08:13:49 +0300 |
commit | 2180b3851353f23ee24a475a08da3d3b1545c5fc (patch) | |
tree | fc6007c16d742393021d0e592887026d40ef390c /source/blender/editors/mesh/editmesh_intersect.c | |
parent | 50d92aaf15a097dd798668a3967c6fe5600183c7 (diff) |
Fix split-py-edge assuming valid face indices
Also reduce variable scope
Diffstat (limited to 'source/blender/editors/mesh/editmesh_intersect.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_intersect.c | 36 |
1 files changed, 22 insertions, 14 deletions
diff --git a/source/blender/editors/mesh/editmesh_intersect.c b/source/blender/editors/mesh/editmesh_intersect.c index ea166f4e9c2..ed35e46d393 100644 --- a/source/blender/editors/mesh/editmesh_intersect.c +++ b/source/blender/editors/mesh/editmesh_intersect.c @@ -446,15 +446,16 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op)) BMesh *bm = em->bm; const char hflag = BM_ELEM_TAG; - BMVert *v; BMEdge *e; - BMFace *f; BMIter iter; BLI_SMALLSTACK_DECLARE(loop_stack, BMLoop *); - BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { - BM_elem_flag_disable(v, hflag); + { + BMVert *v; + BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) { + BM_elem_flag_disable(v, hflag); + } } /* edge index is set to -1 then used to assosiate them with faces */ @@ -471,19 +472,27 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op)) } BM_elem_index_set(e, -1); /* set_dirty */ } + bm->elem_index_dirty |= BM_EDGE; - BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { - if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { - BM_elem_flag_enable(f, hflag); - } - else { - BM_elem_flag_disable(f, hflag); + { + BMFace *f; + int i; + BM_ITER_MESH_INDEX (f, &iter, bm, BM_FACES_OF_MESH, i) { + if (BM_elem_flag_test(f, BM_ELEM_SELECT)) { + BM_elem_flag_enable(f, hflag); + } + else { + BM_elem_flag_disable(f, hflag); + } + BM_elem_index_set(f, i); /* set_ok */ } } + bm->elem_index_dirty &= ~BM_FACE; BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) { if (BM_elem_flag_test(e, hflag)) { BMIter viter; + BMVert *v; BM_ITER_ELEM (v, &viter, e, BM_VERTS_OF_EDGE) { BMIter liter; BMLoop *l; @@ -545,9 +554,8 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op)) } } - bm->elem_index_dirty |= BM_EDGE; - { + BMFace *f; BLI_buffer_declare_static(BMEdge **, edge_net_temp_buf, 0, 128); BM_ITER_MESH (f, &iter, bm, BM_FACES_OF_MESH) { @@ -588,7 +596,7 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op)) float e_center[3]; mid_v3_v3v3(e_center, e->v1->co, e->v2->co); - f = BKE_bmbvh_find_face_closest(bmbvh, e_center, FLT_MAX); + BMFace *f = BKE_bmbvh_find_face_closest(bmbvh, e_center, FLT_MAX); if (f) { ghash_insert_face_edge_link(face_edge_map, f, e, mem_arena); } @@ -603,7 +611,7 @@ static int edbm_face_split_by_edges_exec(bContext *C, wmOperator *UNUSED(op)) GHashIterator gh_iter; GHASH_ITER(gh_iter, face_edge_map) { - f = BLI_ghashIterator_getKey(&gh_iter); + BMFace *f = BLI_ghashIterator_getKey(&gh_iter); struct LinkBase *e_ls_base = BLI_ghashIterator_getValue(&gh_iter); bm_face_split_by_edges_island_connect( |