From bf9c2e6fde34c0cb9029e33025627c743fca50b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 26 Nov 2019 17:59:27 +0100 Subject: Anim: added BKE_object_moves_in_time(object) function 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 | 2 ++ source/blender/blenkernel/intern/anim_sys.c | 3 ++- source/blender/blenkernel/intern/object.c | 22 +++++++++++----------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h index 2f36e13d4c8..ec6ec027810 100644 --- a/source/blender/blenkernel/BKE_object.h +++ b/source/blender/blenkernel/BKE_object.h @@ -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, diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c index 98473c04704..3a34a31b57e 100644 --- a/source/blender/blenkernel/intern/anim_sys.c +++ b/source/blender/blenkernel/intern/anim_sys.c @@ -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 -------------------------------------------- */ diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 6837336b8b8..08890965ece 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -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) { -- cgit v1.2.3