[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44561] trunk/blender/source/blender/bmesh /intern/bmesh_walkers_impl.c: fix [#29135] NGons dont work with loop cut

Campbell Barton ideasman42 at gmail.com
Wed Feb 29 18:23:46 CET 2012


Revision: 44561
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44561
Author:   campbellbarton
Date:     2012-02-29 17:23:41 +0000 (Wed, 29 Feb 2012)
Log Message:
-----------
fix [#29135] NGons dont work with loop cut

patch by Andrew Wiggin

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-02-29 17:01:43 UTC (rev 44560)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_walkers_impl.c	2012-02-29 17:23:41 UTC (rev 44561)
@@ -670,7 +670,7 @@
 	lwalk = BMW_state_add(walker);
 	*lwalk = owalk;
 
-	if (lwalk->l->f->len != 4)
+	if (lwalk->l->f->len % 2 != 0)
 		lwalk->l = lwalk->l->radial_next;
 
 	BLI_ghash_free(walker->visithash, NULL, NULL);
@@ -698,6 +698,7 @@
 	BMEdge *e;
 	BMLoop *l = lwalk->l /* , *origl = lwalk->l */;
 	BMesh *bm = walker->bm;
+	int i, len;
 
 	BMW_state_remove(walker);
 
@@ -714,14 +715,25 @@
 	}
 
 	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;
+
+	i = len = l->f->len;
+	while (i > 0) {
+		l = l->next;
+		i -= 2;
 	}
 
+	if ((len <= 0) || (len % 2 != 0) || !BM_edge_is_manifold(bm, l->e)) {
+		l = lwalk->l;
+		i = len;
+		while (i > 0) {
+			l = l->next;
+			i -= 2;
+		}
+	}
+
+
 	/* only walk to manifold edge */
-	if ((l->f->len == 4) && BM_edge_is_manifold(bm, l->e) &&
+	if ((l->f->len % 2 == 0) && BM_edge_is_manifold(bm, l->e) &&
 	    !BLI_ghash_haskey(walker->visithash, l->e)) {
 		lwalk = BMW_state_add(walker);
 		lwalk->l = l;




More information about the Bf-blender-cvs mailing list