Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-02-29 21:23:41 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-02-29 21:23:41 +0400
commitaf0a469307d5abe30d59c62c61d8bbc361bdf359 (patch)
tree838b6747f9c66ed52589441b5f4c0c31c75e9d95 /source/blender/bmesh
parent034b1711ea2b64d0e666346b13cd3ae1a53a5fd0 (diff)
fix [#29135] NGons dont work with loop cut
patch by Andrew Wiggin
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_walkers_impl.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c
index 3ec7cbb60b1..73aa42dbbdc 100644
--- a/source/blender/bmesh/intern/bmesh_walkers_impl.c
+++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c
@@ -670,7 +670,7 @@ static void edgeringWalker_begin(BMWalker *walker, void *data)
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 @@ static void *edgeringWalker_step(BMWalker *walker)
BMEdge *e;
BMLoop *l = lwalk->l /* , *origl = lwalk->l */;
BMesh *bm = walker->bm;
+ int i, len;
BMW_state_remove(walker);
@@ -714,14 +715,25 @@ static void *edgeringWalker_step(BMWalker *walker)
}
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;