Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormano-wii <germano.costa@ig.com.br>2020-01-27 14:37:48 +0300
committermano-wii <germano.costa@ig.com.br>2020-01-27 14:38:05 +0300
commit5c82c9bae42c2fb3bf191e0100b88ec52930b1bd (patch)
tree615da9dc989393877d7221e13312f2a60ba08db7 /source/blender/editors/mesh
parent39fd6ef30523e984db6a15c00dbe4ceea08156ec (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.c54
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);