[Bf-blender-cvs] [26541b7] master: BMesh: refactor edge-vert swapping into API call

Campbell Barton noreply at git.blender.org
Wed Apr 29 22:29:15 CEST 2015


Commit: 26541b7488be08ce998960e5edbbe0dcee2698c3
Author: Campbell Barton
Date:   Thu Apr 30 02:25:32 2015 +1000
Branches: master
https://developer.blender.org/rB26541b7488be08ce998960e5edbbe0dcee2698c3

BMesh: refactor edge-vert swapping into API call

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

M	source/blender/bmesh/intern/bmesh_core.c
M	source/blender/bmesh/intern/bmesh_structure.c
M	source/blender/bmesh/intern/bmesh_structure.h

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

diff --git a/source/blender/bmesh/intern/bmesh_core.c b/source/blender/bmesh/intern/bmesh_core.c
index c92acfd..76b54a4 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -2050,24 +2050,7 @@ bool BM_vert_splice(BMesh *bm, BMVert *v, BMVert *v_target)
 
 	/* move all the edges from v's disk to vtarget's disk */
 	while ((e = v->e)) {
-
-		/* loop  */
-		BMLoop *l_first;
-		if ((l_first = e->l)) {
-			BMLoop *l_iter = l_first;
-			do {
-				if (l_iter->v == v) {
-					l_iter->v = v_target;
-				}
-				/* else if (l_iter->prev->v == v) {...}
-				 * (this case will be handled by a different edge) */
-			} while ((l_iter = l_iter->radial_next) != l_first);
-		}
-
-		/* disk */
-		bmesh_disk_edge_remove(e, v);
-		bmesh_disk_vert_swap(e, v_target, v);
-		bmesh_disk_edge_append(e, v_target);
+		bmesh_edge_vert_swap(e, v_target, v);
 		BLI_assert(e->v1 != e->v2);
 	}
 
@@ -2173,23 +2156,7 @@ void bmesh_vert_separate(
 			}
 
 			while ((e = BLI_SMALLSTACK_POP(edges))) {
-
-				/* swap out loops */
-				if (e->l) {
-					BMLoop *l_iter, *l_first;
-					l_iter = l_first = e->l;
-					do {
-						if (l_iter->v == v) {
-							l_iter->v = v_new;
-						}
-					} while ((l_iter = l_iter->radial_next) != l_first);
-				}
-
-				/* swap out edges */
-				BLI_assert(e->v1 == v || e->v2 == v);
-				bmesh_disk_edge_remove(e, v);
-				bmesh_disk_vert_swap(e, v_new, v);
-				bmesh_disk_edge_append(e, v_new);
+				bmesh_edge_vert_swap(e, v_new, v);
 			}
 
 			if (r_vout) {
diff --git a/source/blender/bmesh/intern/bmesh_structure.c b/source/blender/bmesh/intern/bmesh_structure.c
index 3b1dd7e..30ab693 100644
--- a/source/blender/bmesh/intern/bmesh_structure.c
+++ b/source/blender/bmesh/intern/bmesh_structure.c
@@ -56,6 +56,32 @@ void bmesh_disk_vert_swap(BMEdge *e, BMVert *v_dst, BMVert *v_src)
 }
 
 /**
+ * Handles all connected data, use with care.
+ *
+ * Assumes caller has setup correct state before the swap is done.
+ */
+void bmesh_edge_vert_swap(BMEdge *e, BMVert *v_dst, BMVert *v_src)
+{
+	/* swap out loops */
+	if (e->l) {
+		BMLoop *l_iter, *l_first;
+		l_iter = l_first = e->l;
+		do {
+			if (l_iter->v == v_src) {
+				l_iter->v = v_dst;
+			}
+		} while ((l_iter = l_iter->radial_next) != l_first);
+	}
+
+	/* swap out edges */
+	BLI_assert(e->v1 == v_src || e->v2 == v_src);
+	bmesh_disk_edge_remove(e, v_src);
+	bmesh_disk_vert_swap(e, v_dst, v_src);
+	bmesh_disk_edge_append(e, v_dst);
+	BLI_assert(e->v1 != e->v2);
+}
+
+/**
  * \section bm_cycles BMesh Cycles
  * (this is somewhat outdate, though bits of its API are still used) - joeedh
  *
diff --git a/source/blender/bmesh/intern/bmesh_structure.h b/source/blender/bmesh/intern/bmesh_structure.h
index b5ffd9e..9d9fb7f 100644
--- a/source/blender/bmesh/intern/bmesh_structure.h
+++ b/source/blender/bmesh/intern/bmesh_structure.h
@@ -71,6 +71,7 @@ bool    bmesh_radial_validate(int radlen, BMLoop *l) ATTR_WARN_UNUSED_RESULT ATT
 
 /* EDGE UTILITIES */
 void    bmesh_disk_vert_swap(BMEdge *e, BMVert *v_dst, BMVert *v_src) ATTR_NONNULL();
+void    bmesh_edge_vert_swap(BMEdge *e, BMVert *v_dst, BMVert *v_src) ATTR_NONNULL();
 BMEdge *bmesh_disk_edge_exists(const BMVert *v1, const BMVert *v2) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
 bool    bmesh_disk_validate(int len, BMEdge *e, BMVert *v) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();




More information about the Bf-blender-cvs mailing list