From c81eca3d986115ae8f3c542e9b00b89795233864 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Thu, 4 Apr 2019 15:07:37 +0200 Subject: Fix T63276: crash deleting object with alembic constraint. --- source/blender/alembic/intern/abc_object.cc | 9 +++++++-- source/blender/blenkernel/intern/constraint.c | 6 ++++-- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'source/blender') diff --git a/source/blender/alembic/intern/abc_object.cc b/source/blender/alembic/intern/abc_object.cc index 48aa65717dd..20a43a821ed 100644 --- a/source/blender/alembic/intern/abc_object.cc +++ b/source/blender/alembic/intern/abc_object.cc @@ -323,8 +323,13 @@ void AbcObjectReader::read_matrix(float r_mat[4][4], const float time, * all parent matrices in the Alembic file, we assume that the Blender * parent object is already updated for the current timekey, and use its * world matrix. */ - BLI_assert(m_object->parent); - mul_m4_m4m4(r_mat, m_object->parent->obmat, r_mat); + if (m_object->parent) { + mul_m4_m4m4(r_mat, m_object->parent->obmat, r_mat); + } + else { + /* This can happen if the user deleted the parent object. */ + unit_m4(r_mat); + } } else { /* Only apply scaling to root objects, parenting will propagate it. */ diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index b22ffce5300..6d7765d4314 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -4572,10 +4572,12 @@ static void transformcache_evaluate(bConstraint *con, bConstraintOb *cob, ListBa const float frame = DEG_get_ctime(cob->depsgraph); const float time = BKE_cachefile_time_offset(cache_file, frame, FPS); - BKE_cachefile_ensure_handle(G.main, cache_file); + /* Must always load ABC handle on original. */ + CacheFile *cache_file_orig = (CacheFile *)DEG_get_original_id(&cache_file->id); + BKE_cachefile_ensure_handle(G.main, cache_file_orig); if (!data->reader) { - data->reader = CacheReader_open_alembic_object(cache_file->handle, + data->reader = CacheReader_open_alembic_object(cache_file_orig->handle, data->reader, cob->ob, data->object_path); -- cgit v1.2.3