diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-10-06 09:55:15 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-06 09:57:15 +0300 |
commit | 65bd2a6e6ae72a64dd2d3822fe79b44736b82264 (patch) | |
tree | 541808a7a708fa66bfbd1e038b800864abfc710e /source/blender/blenkernel/intern/bvhutils.c | |
parent | 51f00499cd4e0bd8d80ad7107d13a00bf2ddd904 (diff) |
Fix T46389: Shrinkwrap fails in editmode
Own regression caused by fix for T46067,
edit-mode bvh only contained unselected faces.
This commit adds support for an edit-mode bvh containing all faces.
Diffstat (limited to 'source/blender/blenkernel/intern/bvhutils.c')
-rw-r--r-- | source/blender/blenkernel/intern/bvhutils.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index 626be0eaf4e..5b904d4822c 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -646,7 +646,10 @@ static BVHTree *bvhtree_from_mesh_faces_create_tree( insert = insert_prev; } else if (insert) { - if (BM_elem_flag_test(f, BM_ELEM_SELECT) || BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { + if (tree_type == BVHTREE_FROM_FACES_EDITMESH_ALL) { + /* pass */ + } + else if (BM_elem_flag_test(f, BM_ELEM_SELECT) || BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { /* Don't insert triangles tessellated from faces that are hidden or selected */ insert = false; } @@ -746,7 +749,9 @@ static void bvhtree_from_mesh_faces_setup_data( BVHTree *bvhtree_from_mesh_faces(BVHTreeFromMesh *data, DerivedMesh *dm, float epsilon, int tree_type, int axis) { BMEditMesh *em = data->em_evil; - const int bvhcache_type = em ? BVHTREE_FROM_FACES_EDITMESH : BVHTREE_FROM_FACES; + const int bvhcache_type = em ? + (data->em_evil_all ? BVHTREE_FROM_FACES_EDITMESH_ALL : BVHTREE_FROM_FACES_EDITMESH_SNAP) : + BVHTREE_FROM_FACES; BVHTree *tree; MVert *vert = NULL; MFace *face = NULL; @@ -881,7 +886,10 @@ static BVHTree *bvhtree_from_mesh_looptri_create_tree( insert = insert_prev; } else if (insert) { - if (BM_elem_flag_test(f, BM_ELEM_SELECT) || BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { + if (tree_type == BVHTREE_FROM_FACES_EDITMESH_ALL) { + /* pass */ + } + else if (BM_elem_flag_test(f, BM_ELEM_SELECT) || BM_elem_flag_test(f, BM_ELEM_HIDDEN)) { /* Don't insert triangles tessellated from faces that are hidden or selected */ insert = false; } @@ -986,7 +994,9 @@ static void bvhtree_from_mesh_looptri_setup_data( BVHTree *bvhtree_from_mesh_looptri(BVHTreeFromMesh *data, DerivedMesh *dm, float epsilon, int tree_type, int axis) { BMEditMesh *em = data->em_evil; - const int bvhcache_type = em ? BVHTREE_FROM_FACES_EDITMESH : BVHTREE_FROM_LOOPTRI; + const int bvhcache_type = em ? + (data->em_evil_all ? BVHTREE_FROM_FACES_EDITMESH_ALL : BVHTREE_FROM_FACES_EDITMESH_SNAP) : + BVHTREE_FROM_LOOPTRI; BVHTree *tree; MVert *mvert = NULL; MLoop *mloop = NULL; |