Anim: added BKE_object_moves_in_time(object) function
authorSybren A. Stüvel <sybren@blender.org>
Tue, 26 Nov 2019 16:59:27 +0000 (17:59 +0100)
committerSybren A. Stüvel <sybren@blender.org>
Tue, 26 Nov 2019 16:59:27 +0000 (17:59 +0100)
This function exposes the already-existing static `object_moves_in_time()`
function, and optionally recursively checks the parent object for
animatedness as well.

I also added checking `AnimData::overrides` to
`BKE_animdata_id_is_animated()`. This ensures that, apart from the optional
recursion to the parent object, the function has the same functionality.

source/blender/blenkernel/BKE_object.h
source/blender/blenkernel/intern/anim_sys.c
source/blender/blenkernel/intern/object.c

index 2f36e13d4c8287eee5643a414dc4af1bbee53a16..ec6ec027810f2033b8eded231a9e0d0aef49771a 100644 (file)
@@ -350,6 +350,8 @@ bool BKE_object_is_child_recursive(const struct Object *ob_parent, const struct
 int BKE_object_is_modified(struct Scene *scene, struct Object *ob);
 int BKE_object_is_deform_modified(struct Scene *scene, struct Object *ob);
 
+bool BKE_object_moves_in_time(const struct Object *object, bool recurse_parent);
+
 int BKE_object_scenes_users_get(struct Main *bmain, struct Object *ob);
 
 struct MovieClip *BKE_object_movieclip_get(struct Scene *scene,
index 98473c04704dd587574559122164c2c419832fd6..3a34a31b57e69d4ff7d4d1fd4e10a31174c74bb3 100644 (file)
@@ -298,7 +298,8 @@ bool BKE_animdata_id_is_animated(const struct ID *id)
     return true;
   }
 
-  return !BLI_listbase_is_empty(&adt->drivers) || !BLI_listbase_is_empty(&adt->nla_tracks);
+  return !BLI_listbase_is_empty(&adt->drivers) || !BLI_listbase_is_empty(&adt->nla_tracks) ||
+         !BLI_listbase_is_empty(&adt->overrides);
 }
 
 /* Copying -------------------------------------------- */
index 6837336b8b81198b94989f2577953303df986053..08890965ecea3f022df96dff740b80eefe2acc9c 100644 (file)
@@ -3763,26 +3763,26 @@ int BKE_object_is_modified(Scene *scene, Object *ob)
  * speed. In combination with checks of modifier stack and real life usage
  * percentage of false-positives shouldn't be that height.
  */
-static bool object_moves_in_time(Object *object)
+bool BKE_object_moves_in_time(const Object *object, bool recurse_parent)
 {
-  AnimData *adt = object->adt;
-  if (adt != NULL) {
-    /* If object has any sort of animation data assume it is moving. */
-    if (adt->action != NULL || !BLI_listbase_is_empty(&adt->nla_tracks) ||
-        !BLI_listbase_is_empty(&adt->drivers) || !BLI_listbase_is_empty(&adt->overrides)) {
-      return true;
-    }
+  /* If object has any sort of animation data assume it is moving. */
+  if (BKE_animdata_id_is_animated(&object->id)) {
+    return true;
   }
   if (!BLI_listbase_is_empty(&object->constraints)) {
     return true;
   }
-  if (object->parent != NULL) {
-    /* TODO(sergey): Do recursive check here? */
-    return true;
+  if (recurse_parent && object->parent != NULL) {
+    return BKE_object_moves_in_time(object->parent, true);
   }
   return false;
 }
 
+static bool object_moves_in_time(const Object *object)
+{
+  return BKE_object_moves_in_time(object, true);
+}
+
 static bool object_deforms_in_time(Object *object)
 {
   if (BKE_key_from_object(object) != NULL) {