[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53915] trunk/blender/source/blender/ blenkernel/intern/pbvh_bmesh.c: Delete loose edges left behind by sculpting with collapse-short-edges

Nicholas Bishop nicholasbishop at gmail.com
Sun Jan 20 01:46:36 CET 2013


Revision: 53915
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53915
Author:   nicholasbishop
Date:     2013-01-20 00:46:33 +0000 (Sun, 20 Jan 2013)
Log Message:
-----------
Delete loose edges left behind by sculpting with collapse-short-edges

After deleting a face, check for unused edges and delete them.

Fixes bug [#33891]
projects.blender.org/tracker/?func=detail&aid=33891&group_id=9&atid=498

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c

Modified: trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c	2013-01-20 00:19:57 UTC (rev 53914)
+++ trunk/blender/source/blender/blenkernel/intern/pbvh_bmesh.c	2013-01-20 00:46:33 UTC (rev 53915)
@@ -817,10 +817,13 @@
 	for (i = 0; i < deleted_faces->count; i++) {
 		BMFace *f_del = BLI_buffer_at(deleted_faces, BMFace *, i);
 		BMVert *v_tri[3];
+		BMEdge *e_tri[3];
 		int j;
 
-		// BM_iter_as_array(NULL, BM_VERTS_OF_FACE, f_del, (void **)v_tri, 3);
+		/* Get vertices and edges of face */
 		BM_face_as_array_vert_tri(f_del, v_tri);
+		for (j = 0; j < 3; j++)
+			e_tri[j] = BM_edge_exists(v_tri[j], v_tri[j == 2 ? 0 : j + 1]);
 
 		/* Check if any of the face's vertices are now unused, if so
 		 * remove them from the PBVH */
@@ -838,6 +841,13 @@
 		pbvh_bmesh_face_remove(bvh, f_del);
 		BM_face_kill(bvh->bm, f_del);
 
+		/* Check if any of the face's edges are now unused by any
+		 * face, if so delete them */
+		for (j = 0; j < 3; j++) {
+			if (BM_edge_face_count(e_tri[j]) == 0)
+				BM_edge_kill(bvh->bm, e_tri[j]);
+		}
+
 		/* Delete unused vertices */
 		for (j = 0; j < 3; j++) {
 			if (v_tri[j]) {




More information about the Bf-blender-cvs mailing list