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:
-rw-r--r--source/blender/alembic/intern/abc_mesh.cc10
-rw-r--r--source/blender/alembic/intern/abc_transform.cc6
-rw-r--r--source/blender/blenkernel/BKE_animsys.h3
-rw-r--r--source/blender/blenkernel/intern/anim_sys.c18
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 -------------------------------------------- */
/**