Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-06-27 16:05:57 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-06-27 16:06:49 +0400
commitbeedb0b27471f34b321bc44a9a6b07bbb07b3e49 (patch)
tree6bd52dab3ad4e0a0f7460e26be4f929844f322eb /source/blender/bmesh/operators/bmo_dissolve.c
parentc73505fb439d2c07380b66e2362231c42e513225 (diff)
BMesh: more edits to vertex dissolve, handle mixing wire edges with faces better
Diffstat (limited to 'source/blender/bmesh/operators/bmo_dissolve.c')
-rw-r--r--source/blender/bmesh/operators/bmo_dissolve.c25
1 files changed, 13 insertions, 12 deletions
diff --git a/source/blender/bmesh/operators/bmo_dissolve.c b/source/blender/bmesh/operators/bmo_dissolve.c
index f7b8352ed78..209ca30ddc3 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);
}
}