[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