diff options
author | Alexander Gavrilov <angavrilov@gmail.com> | 2021-07-27 10:39:52 +0300 |
---|---|---|
committer | Alexander Gavrilov <angavrilov@gmail.com> | 2021-11-24 15:58:32 +0300 |
commit | 72acce43bc34e5e9569606e08ee536b02cab088b (patch) | |
tree | 3a51c79a085a2357c652b55e833787c8ca221f09 /source/blender/blenkernel | |
parent | 5d59b38605d61b2aeabfa1cb572b5a0d9158424b (diff) |
Animation: allow marking actions as cyclic for Cycle-Aware Keying.
When a manual frame range is set, allow marking an action as having
Cyclic Animation. This does not affect how the action is evaluated,
but the Cycle-Aware Keying option will automatically make any newly
added F-Curves cyclic. This allows using the option from the start
to build the cycle, rather than only for tweaking an existing loop.
The curves are made cyclic when they have only one key, either
after inserting the first key, or before adding the second one.
The latter case avoids the need to manually make the first added
curve cyclic after marking a newly added action cyclic.
Differential Revision: https://developer.blender.org/D11803
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_action.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/action.c | 6 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/nla.c | 5 |
3 files changed, 14 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_action.h b/source/blender/blenkernel/BKE_action.h index 6d457ed32f0..b5e94793658 100644 --- a/source/blender/blenkernel/BKE_action.h +++ b/source/blender/blenkernel/BKE_action.h @@ -98,6 +98,9 @@ void BKE_action_get_frame_range(const struct bAction *act, float *r_start, float /* Does action have any motion data at all? */ bool action_has_motion(const struct bAction *act); +/* Is the action configured as cyclic. */ +bool BKE_action_is_cyclic(const struct bAction *act); + /* Action Groups API ----------------- */ /* Get the active action-group for an Action */ diff --git a/source/blender/blenkernel/intern/action.c b/source/blender/blenkernel/intern/action.c index 47db5183e76..408a0b3065e 100644 --- a/source/blender/blenkernel/intern/action.c +++ b/source/blender/blenkernel/intern/action.c @@ -1591,6 +1591,12 @@ void BKE_action_get_frame_range(const struct bAction *act, float *r_start, float } } +/* Is the action configured as cyclic. */ +bool BKE_action_is_cyclic(const struct bAction *act) +{ + return act && (act->flag & ACT_FRAME_RANGE) && (act->flag & ACT_CYCLIC); +} + /* Return flags indicating which transforms the given object/posechannel has * - if 'curves' is provided, a list of links to these curves are also returned */ diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c index 0666c1dfc53..8f2a60358e7 100644 --- a/source/blender/blenkernel/intern/nla.c +++ b/source/blender/blenkernel/intern/nla.c @@ -395,6 +395,11 @@ NlaStrip *BKE_nlastrip_new(bAction *act) strip->flag &= ~NLASTRIP_FLAG_SYNC_LENGTH; } + /* Enable cyclic time for known cyclic actions. */ + if (BKE_action_is_cyclic(act)) { + strip->flag |= NLASTRIP_FLAG_USR_TIME_CYCLIC; + } + /* assign the action reference */ strip->act = act; id_us_plus(&act->id); |