[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42450] branches/bmesh/blender/source/ blender/bmesh/operators/dissolveops.c: yet another fix for [#28645] TODO: dissolve edges doesn't delete lonely vertices on edges

Campbell Barton ideasman42 at gmail.com
Tue Dec 6 03:24:40 CET 2011


Revision: 42450
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42450
Author:   campbellbarton
Date:     2011-12-06 02:24:30 +0000 (Tue, 06 Dec 2011)
Log Message:
-----------
yet another fix for [#28645] TODO: dissolve edges doesn't delete lonely vertices on edges

this one finally does what Vilem Novak was asking for, however the other changes were still improvements.

Modified Paths:
--------------
    branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c

Modified: branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c	2011-12-06 01:49:35 UTC (rev 42449)
+++ branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c	2011-12-06 02:24:30 UTC (rev 42450)
@@ -185,17 +185,35 @@
 
 void dissolveedges_exec(BMesh *bm, BMOperator *op)
 {
+	/* might want to make this an option or mode - campbell */
+#define DISSOLVE_EDGE_VERTS
+
 	/* BMOperator fop; */
-	BMOIter oiter;
-	/* BMIter iter; */
-	/* BMVert *v; */
+	BMOIter eiter;
 	BMEdge *e;
-	/* BMFace *f; */
-	/* int i; */
 
-	BMO_ITER(e, &oiter, bm, op, "edges", BM_EDGE) {
+#ifdef DISSOLVE_EDGE_VERTS
+	BMIter viter;
+	BMVert *v;
+#endif
+
+
+#ifdef DISSOLVE_EDGE_VERTS
+	BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) {
+		BMO_ClearFlag(bm, v, VERT_MARK);
+	}
+#endif /* DISSOLVE_EDGE_VERTS */
+
+	BMO_ITER(e, &eiter, bm, op, "edges", BM_EDGE) {
 		const int edge_face_count= BM_Edge_FaceCount(e);
 		if (edge_face_count == 2) {
+
+#ifdef DISSOLVE_EDGE_VERTS
+			/* later check if these verts are between 2 edges and can dissolve */
+			BMO_SetFlag(bm, e->v1, VERT_MARK);
+			BMO_SetFlag(bm, e->v2, VERT_MARK);
+#endif /* DISSOLVE_EDGE_VERTS */
+
 			/* join faces */
 			BM_Join_TwoFaces(bm, e->l->f,
 			                 e->l->radial_next->f,
@@ -211,6 +229,17 @@
 
 		}
 	}
+
+#ifdef DISSOLVE_EDGE_VERTS
+	BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) {
+		if (BMO_TestFlag(bm, v, VERT_MARK)) {
+			if (BM_Vert_EdgeCount(v) == 2) {
+				bmesh_jekv(bm, v->e, v);
+			}
+		}
+	}
+#endif /* DISSOLVE_EDGE_VERTS */
+
 }
 
 static int test_extra_verts(BMesh *bm, BMVert *v)




More information about the Bf-blender-cvs mailing list