[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46361] trunk/blender/source/blender/bmesh /intern: fix [#31197] Limited dissolve leaves faces/edges/verts behind

Campbell Barton ideasman42 at gmail.com
Sun May 6 20:04:38 CEST 2012


Revision: 46361
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=46361
Author:   campbellbarton
Date:     2012-05-06 18:04:37 +0000 (Sun, 06 May 2012)
Log Message:
-----------
fix [#31197] Limited dissolve leaves faces/edges/verts behind

bad bug where vertices could be in a face more then once (which isn't allowed), now check for this when creating a face.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
    trunk/blender/source/blender/bmesh/intern/bmesh_private.h

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2012-05-06 17:22:54 UTC (rev 46360)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_construct.c	2012-05-06 18:04:37 UTC (rev 46361)
@@ -214,6 +214,9 @@
 		BLI_array_append(verts, v);
 		BLI_array_append(edges2, e);
 
+		/* we only flag the verts to check if they are in the face more then once */
+		BM_ELEM_API_FLAG_ENABLE(v, _FLAG_MV);
+
 		do {
 			e2 = bmesh_disk_edge_next(e2, v);
 			if (e2 != e && BM_ELEM_API_FLAG_TEST(e2, _FLAG_MF)) {
@@ -269,6 +272,12 @@
 		if (!edges2[i]) {
 			goto err;
 		}
+
+		/* check if vert is in face more then once. if the flag is disabled. we've already visited */
+		if (!BM_ELEM_API_FLAG_TEST(verts[i], _FLAG_MV)) {
+			goto err;
+		}
+		BM_ELEM_API_FLAG_DISABLE(verts[i], _FLAG_MV);
 	}
 
 	f = BM_face_create(bm, verts, edges2, len, nodouble);
@@ -286,6 +295,10 @@
 err:
 	for (i = 0; i < len; i++) {
 		BM_ELEM_API_FLAG_DISABLE(edges[i], _FLAG_MF);
+		/* vert count may != len */
+		if (i < BLI_array_count(verts)) {
+			BM_ELEM_API_FLAG_DISABLE(verts[i], _FLAG_MV);
+		}
 	}
 
 	BLI_array_free(verts);

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_private.h
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_private.h	2012-05-06 17:22:54 UTC (rev 46360)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_private.h	2012-05-06 18:04:37 UTC (rev 46361)
@@ -60,6 +60,7 @@
  * on using these internal flags!*/
 #define _FLAG_JF	1 /* join faces */
 #define _FLAG_MF	2 /* make face */
+#define _FLAG_MV	2 /* make face, vertex */
 
 #define BM_ELEM_API_FLAG_ENABLE(element, f)  ((element)->oflags[0].pflag |=  (f))
 #define BM_ELEM_API_FLAG_DISABLE(element, f) ((element)->oflags[0].pflag &= ~(f))




More information about the Bf-blender-cvs mailing list