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:
authormano-wii <germano.costa@ig.com.br>2019-01-02 21:57:54 +0300
committermano-wii <germano.costa@ig.com.br>2019-01-02 21:59:20 +0300
commit11f2c65128dc9bdead56003df7c282b6e091cbd1 (patch)
tree432a94f328b0807858f8ac8b4cb359f9aa92131c /source/blender/editors/transform
parent56d6d13b0debc866c8638eab3d4626e0c038e31c (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.c17
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);