diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-03-30 12:43:47 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-03-30 12:43:47 +0400 |
commit | 0e972b6293e556da3716bdfa751b0b085455a111 (patch) | |
tree | 9ff6f724e21407f0a3275d4583d8b79ee94077fd /source/blender | |
parent | e0d94b724441ac30e8b99991bb73beb8e133d57b (diff) |
partial fix for [#30732] bmesh: loop select continues through hidden sections.
loop cut and edge ring select still need to be fixed.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_walkers_impl.c | 14 | ||||
-rw-r--r-- | source/blender/editors/mesh/editmesh_select.c | 2 |
2 files changed, 12 insertions, 4 deletions
diff --git a/source/blender/bmesh/intern/bmesh_walkers_impl.c b/source/blender/bmesh/intern/bmesh_walkers_impl.c index 009b5e786c4..5275a988f7b 100644 --- a/source/blender/bmesh/intern/bmesh_walkers_impl.c +++ b/source/blender/bmesh/intern/bmesh_walkers_impl.c @@ -517,7 +517,9 @@ static void *bmw_LoopWalker_step(BMWalker *walker) l = BM_face_other_vert_loop(owalk.f_hub, lwalk->lastv, v); nexte = BM_edge_exists(v, l->v); - if (!BLI_ghash_haskey(walker->visithash, nexte)) { + if (bmw_mask_check_edge(walker, nexte) && + !BLI_ghash_haskey(walker->visithash, nexte)) + { lwalk = BMW_state_add(walker); lwalk->cur = nexte; lwalk->lastv = v; @@ -579,7 +581,10 @@ static void *bmw_LoopWalker_step(BMWalker *walker) } if (l != NULL) { - if (l != e->l && !BLI_ghash_haskey(walker->visithash, l->e)) { + if (l != e->l && + bmw_mask_check_edge(walker, l->e) && + !BLI_ghash_haskey(walker->visithash, l->e)) + { if (!(owalk.is_boundary == FALSE && i != stopi)) { lwalk = BMW_state_add(walker); lwalk->cur = l->e; @@ -602,7 +607,10 @@ static void *bmw_LoopWalker_step(BMWalker *walker) v = i ? e->v2 : e->v1; BM_ITER(nexte, &eiter, walker->bm, BM_EDGES_OF_VERT, v) { - if ((nexte->l == NULL) && !BLI_ghash_haskey(walker->visithash, nexte)) { + if ((nexte->l == NULL) && + bmw_mask_check_edge(walker, nexte) && + !BLI_ghash_haskey(walker->visithash, nexte)) + { lwalk = BMW_state_add(walker); lwalk->cur = nexte; lwalk->lastv = v; diff --git a/source/blender/editors/mesh/editmesh_select.c b/source/blender/editors/mesh/editmesh_select.c index c4afac78c59..51449f846d5 100644 --- a/source/blender/editors/mesh/editmesh_select.c +++ b/source/blender/editors/mesh/editmesh_select.c @@ -900,7 +900,7 @@ static void walker_select(BMEditMesh *em, int walkercode, void *start, int selec BMW_init(&walker, bm, walkercode, BMW_MASK_NOP, BMW_MASK_NOP, BMW_MASK_NOP, - BMW_FLAG_NOP, /* BMESH_TODO - should be BMW_FLAG_TEST_HIDDEN ? */ + BMW_FLAG_TEST_HIDDEN, BMW_NIL_LAY); ele = BMW_begin(&walker, start); for (; ele; ele = BMW_step(&walker)) { |