diff options
author | mano-wii <germano.costa@ig.com.br> | 2020-01-27 14:37:48 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2020-01-27 14:38:05 +0300 |
commit | 5c82c9bae42c2fb3bf191e0100b88ec52930b1bd (patch) | |
tree | 615da9dc989393877d7221e13312f2a60ba08db7 /source/blender/editors/mesh | |
parent | 39fd6ef30523e984db6a15c00dbe4ceea08156ec (diff) |
Edit Mesh: Auto Merge - Split Edges & Faces - Better logic for splitting faces
Differential Revision: https://developer.blender.org/D6626
Diffstat (limited to 'source/blender/editors/mesh')
-rw-r--r-- | source/blender/editors/mesh/editmesh_automerge.c | 54 |
1 files changed, 1 insertions, 53 deletions
diff --git a/source/blender/editors/mesh/editmesh_automerge.c b/source/blender/editors/mesh/editmesh_automerge.c index ffde9f338b4..f9910f01f47 100644 --- a/source/blender/editors/mesh/editmesh_automerge.c +++ b/source/blender/editors/mesh/editmesh_automerge.c @@ -123,62 +123,10 @@ void EDBM_automerge_and_split(Object *obedit, GHash *ghash_targetmap = BMO_SLOT_AS_GHASH(slot_targetmap); - ok = BM_mesh_intersect_edges(bm, hflag, dist, ghash_targetmap); + ok = BM_mesh_intersect_edges(bm, hflag, dist, split_faces, ghash_targetmap); if (ok) { - GHashIterator gh_iter; - BMVert **v_survivors, **v_iter; - uint v_survivors_len = 0; - if (split_faces) { - BMVert *v_src, *v_dst; - GHASH_ITER (gh_iter, ghash_targetmap) { - v_src = BLI_ghashIterator_getKey(&gh_iter); - v_dst = BLI_ghashIterator_getValue(&gh_iter); - BM_elem_flag_disable(v_src, BM_ELEM_TAG); - BM_elem_flag_disable(v_dst, BM_ELEM_TAG); - } - - int v_survivors_len_max = BLI_ghash_len(ghash_targetmap); - GHASH_ITER (gh_iter, ghash_targetmap) { - v_src = BLI_ghashIterator_getKey(&gh_iter); - v_dst = BLI_ghashIterator_getValue(&gh_iter); - if (!BM_elem_flag_test(v_src, BM_ELEM_TAG)) { - BM_elem_flag_enable(v_src, BM_ELEM_TAG); - } - if (BM_elem_flag_test(v_dst, BM_ELEM_TAG)) { - v_survivors_len_max--; - } - } - - v_survivors = MEM_mallocN(sizeof(*v_survivors) * v_survivors_len_max, __func__); - v_iter = &v_survivors[0]; - GHASH_ITER (gh_iter, ghash_targetmap) { - v_dst = BLI_ghashIterator_getValue(&gh_iter); - if (!BM_elem_flag_test(v_dst, BM_ELEM_TAG)) { - *v_iter = v_dst; - v_iter++; - v_survivors_len++; - } - } - } - BMO_op_exec(bm, &weldop); - - BMEdge **edgenet = NULL; - int edgenet_alloc_len = 0; - if (split_faces) { - v_iter = &v_survivors[0]; - for (int i = v_survivors_len; i--; v_iter++) { - BM_vert_weld_linked_wire_edges_into_linked_faces( - bm, *v_iter, dist, &edgenet, &edgenet_alloc_len); - } - - MEM_freeN(v_survivors); - } - - if (edgenet) { - MEM_freeN(edgenet); - } } BMO_op_finish(bm, &weldop); |