[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45736] trunk/blender/source/blender/bmesh /intern/bmesh_mods.c: 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.
Campbell Barton
ideasman42 at gmail.com
Wed Apr 18 09:27:15 CEST 2012
Revision: 45736
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45736
Author: campbellbarton
Date: 2012-04-18 07:27:15 +0000 (Wed, 18 Apr 2012)
Log Message:
-----------
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.
Modified Paths:
--------------
trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mods.c 2012-04-18 06:57:28 UTC (rev 45735)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mods.c 2012-04-18 07:27:15 UTC (rev 45736)
@@ -545,17 +545,27 @@
/* 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);
}
}
More information about the Bf-blender-cvs
mailing list