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)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to