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:
authorNicholas Bishop <nicholasbishop@gmail.com>2013-02-02 20:54:18 +0400
committerNicholas Bishop <nicholasbishop@gmail.com>2013-02-02 20:54:18 +0400
commitad2b4c6e542d733fe3b771586d6fea6c12b6ed16 (patch)
tree8844be5a62b31fbcc29965642b8100e8f1a01eee /source/blender
parentb6c82b2e8402120ca564aecd2106f3dcdbfe05eb (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')
-rw-r--r--source/blender/bmesh/intern/bmesh_log.c17
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);
+ }
}
}