[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