diff options
author | mano-wii <germano.costa@ig.com.br> | 2019-01-02 21:57:54 +0300 |
---|---|---|
committer | mano-wii <germano.costa@ig.com.br> | 2019-01-02 21:59:20 +0300 |
commit | 11f2c65128dc9bdead56003df7c282b6e091cbd1 (patch) | |
tree | 432a94f328b0807858f8ac8b4cb359f9aa92131c /source/blender/editors/transform | |
parent | 56d6d13b0debc866c8638eab3d4626e0c038e31c (diff) |
Fix (unreported): unpredictable crashes when it is done snap after automerge.
The `em->tottri` of an evaluated object can be different from the actual amount of looptris.
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform_snap_object.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c index c31019144b5..feca8f3f47a 100644 --- a/source/blender/editors/transform/transform_snap_object.c +++ b/source/blender/editors/transform/transform_snap_object.c @@ -564,13 +564,21 @@ static bool raycastEditMesh( if (treedata->tree == NULL) { BVHCache **bvh_cache = NULL; BLI_bitmap *elem_mask = NULL; + BMEditMesh *em_orig; int looptri_num_active = -1; + /* Get original version of the edit_btmesh. */ + em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob)); + if (sctx->callbacks.edit_mesh.test_face_fn) { - elem_mask = BLI_BITMAP_NEW(em->tottri, __func__); + BMesh *bm = em_orig->bm; + BLI_assert(poly_to_tri_count(bm->totface, bm->totloop) == em_orig->tottri); + + elem_mask = BLI_BITMAP_NEW(em_orig->tottri, __func__); looptri_num_active = BM_iter_mesh_bitmap_from_filter_tessface( - em->bm, elem_mask, - sctx->callbacks.edit_mesh.test_face_fn, sctx->callbacks.edit_mesh.user_data); + bm, elem_mask, + sctx->callbacks.edit_mesh.test_face_fn, + sctx->callbacks.edit_mesh.user_data); } else { /* Only cache if bvhtree is created without a mask. @@ -578,9 +586,6 @@ static bool raycastEditMesh( bvh_cache = &em_bvh_cache; } - /* Get original version of the edit_btmesh. */ - BMEditMesh *em_orig = BKE_editmesh_from_object(DEG_get_original_object(ob)); - bvhtree_from_editmesh_looptri_ex( treedata, em_orig, elem_mask, looptri_num_active, 0.0f, 4, 6, bvh_cache); |