[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