[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45283] trunk/blender/source/blender/bmesh /intern/bmesh_walkers_impl.c: fix [#30732] bmesh: loop select continues through hidden sections.

Campbell Barton ideasman42 at gmail.com
Fri Mar 30 11:28:04 CEST 2012


Revision: 45283
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45283
Author:   campbellbarton
Date:     2012-03-30 09:27:54 +0000 (Fri, 30 Mar 2012)
Log Message:
-----------
fix [#30732] bmesh: loop select continues through hidden sections.

Modified Paths:
--------------
    trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c	2012-03-30 08:43:47 UTC (rev 45282)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c	2012-03-30 09:27:54 UTC (rev 45283)
@@ -839,13 +839,15 @@
 	int i, len;
 #endif
 
+#define EDGE_CHECK(e) (bmw_mask_check_edge(walker, e) && BM_edge_is_manifold(e))
+
 	BMW_state_remove(walker);
 
 	if (!l)
 		return lwalk->wireedge;
 
 	e = l->e;
-	if (!BM_edge_is_manifold(e)) {
+	if (!EDGE_CHECK(e)) {
 		/* walker won't traverse to a non-manifold edge, but may
 		 * be started on one, and should not traverse *away* from
 		 * a non-manfold edge (non-manifold edges are never in an
@@ -862,7 +864,7 @@
 		i -= 2;
 	}
 
-	if ((len <= 0) || (len % 2 != 0) || !BM_edge_is_manifold(l->e)) {
+	if ((len <= 0) || (len % 2 != 0) || !EDGE_CHECK(l->e)) {
 		l = lwalk->l;
 		i = len;
 		while (i > 0) {
@@ -871,7 +873,7 @@
 		}
 	}
 	/* only walk to manifold edge */
-	if ((l->f->len % 2 == 0) && BM_edge_is_manifold(l->e) &&
+	if ((l->f->len % 2 == 0) && EDGE_CHECK(l->e) &&
 	    !BLI_ghash_haskey(walker->visithash, l->e)) 
 
 #else
@@ -879,11 +881,11 @@
 	l = l->radial_next;
 	l = l->next->next;
 	
-	if ((l->f->len != 4) || !BM_edge_is_manifold(l->e)) {
+	if ((l->f->len != 4) || !EDGE_CHECK(l->e)) {
 		l = lwalk->l->next->next;
 	}
 	/* only walk to manifold edge */
-	if ((l->f->len == 4) && BM_edge_is_manifold(l->e) &&
+	if ((l->f->len == 4) && EDGE_CHECK(l->e) &&
 	    !BLI_ghash_haskey(walker->visithash, l->e))
 #endif
 	{
@@ -895,6 +897,8 @@
 	}
 
 	return e;
+
+#undef EDGE_CHECK
 }
 
 static void bmw_UVEdgeWalker_begin(BMWalker *walker, void *data)




More information about the Bf-blender-cvs mailing list