Commit: a71a947c6af75114ead5f4c1fcc360699f275241
Author: Campbell Barton
Date:   Tue Aug 26 13:33:07 2014 +1000
Branches: master
https://developer.blender.org/rBa71a947c6af75114ead5f4c1fcc360699f275241

Fix T41568: Dissolve & Tear Boundary Keeps Verts

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

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 877cd16..8cd9ee1 100644
--- a/source/blender/bmesh/operators/bmo_dissolve.c
+++ b/source/blender/bmesh/operators/bmo_dissolve.c
@@ -29,6 +29,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_array.h"
+#include "BLI_stack.h"
 #include "BLI_math.h"
 
 #include "bmesh.h"
@@ -88,13 +89,18 @@ static bool UNUSED_FUNCTION(check_hole_in_region) (BMesh 
*bm, BMFace *f)
 
 static void bm_face_split(BMesh *bm, const short oflag, bool use_edge_delete)
 {
+       BLI_Stack *edge_delete_verts;
        BMIter iter;
        BMVert *v;
 
-       BMIter liter;
+       if (use_edge_delete) {
+               edge_delete_verts = BLI_stack_new(sizeof(BMVert *), __func__);
+       }
+
        BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
                if (BMO_elem_flag_test(bm, v, oflag)) {
                        if (BM_vert_is_edge_pair(v) == false) {
+                               BMIter liter;
                                BMLoop *l;
                                BM_ITER_ELEM (l, &liter, v, BM_LOOPS_OF_VERT) {
                                        if (l->f->len > 3) {
@@ -105,15 +111,24 @@ static void bm_face_split(BMesh *bm, const short oflag, 
bool use_edge_delete)
                                                }
                                        }
                                }
-                               /* remove surrounding edges & faces */
+
                                if (use_edge_delete) {
-                                       while (v->e) {
-                                               BM_edge_kill(bm, v->e);
-                                       }
+                                       BLI_stack_push(edge_delete_verts, &v);
                                }
                        }
                }
        }
+
+       if (use_edge_delete) {
+               while (!BLI_stack_is_empty(edge_delete_verts)) {
+                       /* remove surrounding edges & faces */
+                       BLI_stack_pop(edge_delete_verts, &v);
+                       while (v->e) {
+                               BM_edge_kill(bm, v->e);
+                       }
+               }
+               BLI_stack_free(edge_delete_verts);
+       }
 }
 
 void bmo_dissolve_faces_exec(BMesh *bm, BMOperator *op)

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to