diff options
author | Nicholas Bishop <nicholasbishop@gmail.com> | 2013-02-02 20:54:18 +0400 |
---|---|---|
committer | Nicholas Bishop <nicholasbishop@gmail.com> | 2013-02-02 20:54:18 +0400 |
commit | ad2b4c6e542d733fe3b771586d6fea6c12b6ed16 (patch) | |
tree | 8844be5a62b31fbcc29965642b8100e8f1a01eee /source/blender/bmesh | |
parent | b6c82b2e8402120ca564aecd2106f3dcdbfe05eb (diff) |
Remove loose edges created during undo in dynamic-topology sculpt mode
Fixes [#34043] "Dyntopo: noise appear during sculpting (parasite edges)"
projects.blender.org/tracker/index.php?func=detail&aid=34043&group_id=9&atid=498
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_log.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_log.c b/source/blender/bmesh/intern/bmesh_log.c index 1337cb7c8eb..1d77ff6ebe9 100644 --- a/source/blender/bmesh/intern/bmesh_log.c +++ b/source/blender/bmesh/intern/bmesh_log.c @@ -252,8 +252,25 @@ static void bm_log_faces_unmake(BMesh *bm, BMLog *log, GHash *faces) void *key = BLI_ghashIterator_getKey(&gh_iter); unsigned int id = GET_INT_FROM_POINTER(key); BMFace *f = bm_log_face_from_id(log, id); + BMVert *v_tri[3]; + BMEdge *e_tri[3]; + int i; + + /* Remove any unused edges */ + BM_face_as_array_vert_tri(f, v_tri); + for (i = 0; i < 3; i++) { + BMVert *v1 = v_tri[i]; + BMVert *v2 = v_tri[i == 2 ? 0 : i + 1]; + e_tri[i] = BM_edge_exists(v1, v2); + } BM_face_kill(bm, f); + + for (i = 0; i < 3; i++) { + BMEdge *e = e_tri[i]; + if (BM_edge_face_count(e) == 0) + BM_edge_kill(bm, e); + } } } |