[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44626] trunk/blender/source/blender/bmesh /intern/bmesh_walkers_impl.c: #ifdef out ngon edge-ring loop support, from r44561, this is a nice feature but can too easily give bad results, perhaps being it back with some sanity checks.

Campbell Barton ideasman42 at gmail.com
Sat Mar 3 23:27:53 CET 2012


Revision: 44626
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44626
Author:   campbellbarton
Date:     2012-03-03 22:27:34 +0000 (Sat, 03 Mar 2012)
Log Message:
-----------
#ifdef out ngon edge-ring loop support, from r44561, this is a nice feature but can too easily give bad results, perhaps being it back with some sanity checks.

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44561

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-03 22:07:58 UTC (rev 44625)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c	2012-03-03 22:27:34 UTC (rev 44626)
@@ -639,6 +639,8 @@
 	return f;
 }
 
+// #define BMW_EDGERING_NGON
+
 /**
  * Edge Ring Walker:
  *
@@ -673,8 +675,14 @@
 	lwalk = BMW_state_add(walker);
 	*lwalk = owalk;
 
+#ifdef BMW_EDGERING_NGON
 	if (lwalk->l->f->len % 2 != 0)
+#else
+	if (lwalk->l->f->len != 4)
+#endif
+	{
 		lwalk->l = lwalk->l->radial_next;
+	}
 
 	BLI_ghash_free(walker->visithash, NULL, NULL);
 	walker->visithash = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "bmesh walkers 4");
@@ -701,7 +709,9 @@
 	BMEdge *e;
 	BMLoop *l = lwalk->l /* , *origl = lwalk->l */;
 	BMesh *bm = walker->bm;
+#ifdef BMW_EDGERING_NGON
 	int i, len;
+#endif
 
 	BMW_state_remove(walker);
 
@@ -717,6 +727,7 @@
 		return e;
 	}
 
+#ifdef BMW_EDGERING_NGON
 	l = l->radial_next;
 
 	i = len = l->f->len;
@@ -733,11 +744,23 @@
 			i -= 2;
 		}
 	}
+	/* only walk to manifold edge */
+	if ((l->f->len % 2 == 0) && BM_edge_is_manifold(bm, l->e) &&
+	    !BLI_ghash_haskey(walker->visithash, l->e)) 
 
+#else
 
+	l = l->radial_next;
+	l = l->next->next;
+	
+	if ((l->f->len != 4) || !BM_edge_is_manifold(bm, l->e)) {
+		l = lwalk->l->next->next;
+	}
 	/* only walk to manifold edge */
-	if ((l->f->len % 2 == 0) && BM_edge_is_manifold(bm, l->e) &&
-	    !BLI_ghash_haskey(walker->visithash, l->e)) {
+	if ((l->f->len == 4) && BM_edge_is_manifold(bm, l->e) &&
+	    !BLI_ghash_haskey(walker->visithash, l->e))
+#endif
+	{
 		lwalk = BMW_state_add(walker);
 		lwalk->l = l;
 		lwalk->wireedge = NULL;




More information about the Bf-blender-cvs mailing list