diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/alembic/intern/abc_mesh.cc | 10 | ||||
-rw-r--r-- | source/blender/alembic/intern/abc_transform.cc | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/BKE_animsys.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/anim_sys.c | 18 |
4 files changed, 26 insertions, 11 deletions
diff --git a/source/blender/alembic/intern/abc_mesh.cc b/source/blender/alembic/intern/abc_mesh.cc index 89fafc65e5d..edcb6263da3 100644 --- a/source/blender/alembic/intern/abc_mesh.cc +++ b/source/blender/alembic/intern/abc_mesh.cc @@ -304,14 +304,8 @@ AbcGenericMeshWriter::~AbcGenericMeshWriter() bool AbcGenericMeshWriter::isAnimated() const { - if (m_object->data != NULL) { - AnimData *adt = BKE_animdata_from_id(static_cast<ID *>(m_object->data)); - /* TODO(Sybren): make this check more strict, as the AnimationData may - * actually be empty (no fcurves, drivers, etc.) and thus effectively - * have no animation at all. */ - if (adt != NULL) { - return true; - } + if (BKE_animdata_id_is_animated(static_cast<ID *>(m_object->data))) { + return true; } if (BKE_key_from_object(m_object) != NULL) { return true; diff --git a/source/blender/alembic/intern/abc_transform.cc b/source/blender/alembic/intern/abc_transform.cc index 505acfc164a..9b12fe86d59 100644 --- a/source/blender/alembic/intern/abc_transform.cc +++ b/source/blender/alembic/intern/abc_transform.cc @@ -29,6 +29,7 @@ extern "C" { #include "BLI_math.h" +#include "BKE_animsys.h" #include "BKE_object.h" #include "DEG_depsgraph_query.h" @@ -130,10 +131,9 @@ Imath::Box3d AbcTransformWriter::bounds() return Imath::transform(bounds, m_matrix); } -bool AbcTransformWriter::hasAnimation(Object * /*ob*/) const +bool AbcTransformWriter::hasAnimation(Object *ob) const { - /* TODO(kevin): implement this. */ - return true; + return BKE_animdata_id_is_animated(&ob->id); } /* ************************************************************************** */ diff --git a/source/blender/blenkernel/BKE_animsys.h b/source/blender/blenkernel/BKE_animsys.h index 4e4528ff92b..985dce70bdc 100644 --- a/source/blender/blenkernel/BKE_animsys.h +++ b/source/blender/blenkernel/BKE_animsys.h @@ -60,6 +60,9 @@ bool BKE_animdata_set_action(struct ReportList *reports, struct ID *id, struct b /* Free AnimData */ void BKE_animdata_free(struct ID *id, const bool do_id_user); +/* Return true if the ID-block has non-empty AnimData. */ +bool BKE_animdata_id_is_animated(struct ID *id); + /* Copy AnimData */ struct AnimData *BKE_animdata_copy(struct Main *bmain, struct AnimData *adt, const int flag); diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 88a8463b994..6ecfeaffdba 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -283,6 +283,24 @@ void BKE_animdata_free(ID *id, const bool do_id_user) } } +bool BKE_animdata_id_is_animated(struct ID *id) +{ + if (id == NULL) { + return false; + } + + AnimData *adt = BKE_animdata_from_id(id); + if (adt == NULL) { + return false; + } + + if (adt->action != NULL && !BLI_listbase_is_empty(&adt->action->curves)) { + return true; + } + + return !BLI_listbase_is_empty(&adt->drivers) || !BLI_listbase_is_empty(&adt->nla_tracks); +} + /* Copying -------------------------------------------- */ /** |