[Bf-blender-cvs] [6111da3] master: BMesh: add bmesh_disk_vert_replace

Campbell Barton noreply at git.blender.org
Thu Apr 30 22:19:16 CEST 2015


Commit: 6111da36297dd9d40878c5805dac4b7659ee6ecd
Author: Campbell Barton
Date:   Fri May 1 06:18:04 2015 +1000
Branches: master
https://developer.blender.org/rB6111da36297dd9d40878c5805dac4b7659ee6ecd

BMesh: add bmesh_disk_vert_replace

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

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 81cc972..87f700a 100644
--- a/source/blender/bmesh/intern/bmesh_core.c
+++ b/source/blender/bmesh/intern/bmesh_core.c
@@ -1508,14 +1508,7 @@ BMVert *bmesh_semv(BMesh *bm, BMVert *tv, BMEdge *e, BMEdge **r_e)
 	bmesh_disk_edge_remove(e_new, tv);
 	bmesh_disk_edge_remove(e_new, v_new);
 
-	/* remove e from tv's disk cycle */
-	bmesh_disk_edge_remove(e, tv);
-
-	/* swap out tv for v_new in e */
-	bmesh_disk_vert_swap(e, v_new, tv);
-
-	/* add e to v_new's disk cycle */
-	bmesh_disk_edge_append(e, v_new);
+	bmesh_disk_vert_replace(e, v_new, tv);
 
 	/* add e_new to v_new's disk cycle */
 	bmesh_disk_edge_append(e_new, v_new);
@@ -1726,12 +1719,8 @@ BMEdge *bmesh_jekv(
 				e_splice = BM_edge_exists(tv, v_old);
 			}
 
-			/* remove e_old from v_kill's disk cycle */
-			bmesh_disk_edge_remove(e_old, v_kill);
-			/* relink e_old->v_kill to be e_old->tv */
-			bmesh_disk_vert_swap(e_old, tv, v_kill);
-			/* append e_old to tv's disk cycle */
-			bmesh_disk_edge_append(e_old, tv);
+			bmesh_disk_vert_replace(e_old, tv, v_kill);
+
 			/* remove e_kill from tv's disk cycle */
 			bmesh_disk_edge_remove(e_kill, tv);
 
@@ -2471,9 +2460,7 @@ BMVert *bmesh_urmv_loop_multi(
 			}
 			else {
 				/* we own the edge entirely, replace the vert */
-				bmesh_disk_edge_remove(e, v_sep);
-				bmesh_disk_vert_swap(e, v_new, v_sep);
-				bmesh_disk_edge_append(e, v_new);
+				bmesh_disk_vert_replace(e, v_new, v_sep);
 			}
 
 			/* loop vert is handled last! */
diff --git a/source/blender/bmesh/intern/bmesh_structure.c b/source/blender/bmesh/intern/bmesh_structure.c
index 30ab693..5bc36ce 100644
--- a/source/blender/bmesh/intern/bmesh_structure.c
+++ b/source/blender/bmesh/intern/bmesh_structure.c
@@ -74,10 +74,15 @@ void bmesh_edge_vert_swap(BMEdge *e, BMVert *v_dst, BMVert *v_src)
 	}
 
 	/* swap out edges */
+	bmesh_disk_vert_replace(e, v_dst, v_src);
+}
+
+void bmesh_disk_vert_replace(BMEdge *e, BMVert *v_dst, BMVert *v_src)
+{
 	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);
+	bmesh_disk_edge_remove(e, v_src);		/* remove e from tv's disk cycle */
+	bmesh_disk_vert_swap(e, v_dst, v_src);	/* swap out tv for v_new in e */
+	bmesh_disk_edge_append(e, v_dst);		/* add e to v_dst's disk cycle */
 	BLI_assert(e->v1 != e->v2);
 }
 
@@ -114,6 +119,7 @@ void bmesh_edge_vert_swap(BMEdge *e, BMVert *v_dst, BMVert *v_src)
  * the disk cycle has no problems dealing with non-manifold conditions involving faces.
  *
  * Functions relating to this cycle:
+ * - #bmesh_disk_vert_replace
  * - #bmesh_disk_edge_append
  * - #bmesh_disk_edge_remove
  * - #bmesh_disk_edge_next
diff --git a/source/blender/bmesh/intern/bmesh_structure.h b/source/blender/bmesh/intern/bmesh_structure.h
index 9d9fb7f..07f9479 100644
--- a/source/blender/bmesh/intern/bmesh_structure.h
+++ b/source/blender/bmesh/intern/bmesh_structure.h
@@ -72,6 +72,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();
+void    bmesh_disk_vert_replace(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