[Bf-blender-cvs] [beedb0b] master: BMesh: more edits to vertex dissolve, handle mixing wire edges with faces better

Campbell Barton noreply at git.blender.org
Fri Jun 27 14:08:15 CEST 2014


Commit: beedb0b27471f34b321bc44a9a6b07bbb07b3e49
Author: Campbell Barton
Date:   Fri Jun 27 22:05:57 2014 +1000
https://developer.blender.org/rBbeedb0b27471f34b321bc44a9a6b07bbb07b3e49

BMesh: more edits to vertex dissolve, handle mixing wire edges with faces better

===================================================================

M	source/blender/bmesh/operators/bmo_dissolve.c

===================================================================

diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c
index f7b8352..209ca30 100644
--- a/source/blender/bmesh/operators/bmo_dissolve.c
+++ b/source/blender/bmesh/operators/bmo_dissolve.c
@@ -357,6 +357,7 @@ void bmo_dissolve_verts_exec(BMesh *bm, BMOperator *op)
 	BMO_ITER (v, &oiter, op->slots_in, "verts", BM_VERT) {
 		BMIter itersub;
 		BMLoop *l_first;
+		BMEdge *e_first = NULL;
 		BM_ITER_ELEM (l_first, &itersub, v, BM_LOOPS_OF_VERT) {
 			BMLoop *l_iter;
 			l_iter = l_first;
@@ -364,26 +365,26 @@ void bmo_dissolve_verts_exec(BMesh *bm, BMOperator *op)
 				BMO_elem_flag_enable(bm, l_iter->v, VERT_ISGC);
 				BMO_elem_flag_enable(bm, l_iter->e, EDGE_ISGC);
 			} while ((l_iter = l_iter->next) != l_first);
+
+			e_first = l_first->e;
 		}
 
-		/* clean wire edges and mark vert-edge-pairs (unrelated to checks above) */
-		if ((e = v->e)) {
-			int edge_count = 0;
+		/* important e_first won't be deleted */
+		if (e_first) {
+			e = e_first;
 			do {
 				e_next = BM_DISK_EDGE_NEXT(e, v);
 				if (BM_edge_is_wire(e)) {
 					BM_edge_kill(bm, e);
 				}
-				else {
-					BMO_elem_flag_enable(bm, e, EDGE_ISGC);
-					edge_count += 1;
-				}
-			} while (v->e && (e = e_next) != v->e);
+			} while ((e = e_next) != e_first);
+		}
+	}
 
-			/* tag here so we avoid feedback loop (checking topology as we edit) */
-			if (edge_count == 2) {
-				BMO_elem_flag_enable(bm, v, VERT_MARK_PAIR);
-			}
+	BMO_ITER (v, &oiter, op->slots_in, "verts", BM_VERT) {
+		/* tag here so we avoid feedback loop (checking topology as we edit) */
+		if (BM_vert_is_edge_pair(v)) {
+			BMO_elem_flag_enable(bm, v, VERT_MARK_PAIR);
 		}
 	}




More information about the Bf-blender-cvs mailing list