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>2012-04-18 11:27:15 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-04-18 11:27:15 +0400
commit9a4aecbcc3312070f03b3e8a450944a1a29b008c (patch)
treedb88046718fa4151cf50d67efcaf9f504cd9f645 /source/blender/bmesh
parent1f01d62d15dc8c588b58f8732d3742b0bac8da22 (diff)
bmesh: fix own bug in BM_vert_collapse_faces() with option 'kill_degenerate_faces', was removing data as it iterated, would crash in some cases.
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_mods.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/source/blender/bmesh/intern/bmesh_mods.c b/source/blender/bmesh/intern/bmesh_mods.c
index 78db5baffd0..71f120c5217 100644
--- a/source/blender/bmesh/intern/bmesh_mods.c
+++ b/source/blender/bmesh/intern/bmesh_mods.c
@@ -545,17 +545,27 @@ BMEdge *BM_vert_collapse_faces(BMesh *bm, BMEdge *ke, BMVert *kv, float fac,
/* ne = BM_edge_exists(tv, tv2); */ /* same as return above */
if (kill_degenerate_faces) {
+ BLI_array_declare(bad_faces);
+ BMFace **bad_faces = NULL;
+
BMIter fiter;
BMFace *f;
BMVert *verts[2] = {ne->v1, ne->v2};
int i;
+
for (i = 0; i < 2; i++) {
+ /* cant kill data we loop on, build a list and remove those */
+ BLI_array_empty(bad_faces);
BM_ITER(f, &fiter, bm, BM_FACES_OF_VERT, verts[i]) {
if (f->len < 3) {
- BM_face_kill(bm, f);
+ BLI_array_append(bad_faces, f);
}
}
+ while ((f = BLI_array_pop(bad_faces))) {
+ BM_face_kill(bm, f);
+ }
}
+ BLI_array_free(bad_faces);
}
}