[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