Blender V5.0
BKE_nla.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2009 Blender Authors, Joshua Leung. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
10
12#define NLASTRIP_MIN_LEN_THRESH 0.1f
13
14#include "DNA_listBase.h"
15
16#include "BKE_action.hh"
17#include "BKE_anim_data.hh"
18
19#include "BLI_function_ref.hh"
20
21struct AnimData;
22struct ID;
24struct Main;
25struct NlaStrip;
26struct NlaTrack;
27struct Scene;
28struct Speaker;
29struct bAction;
30
31struct BlendDataReader;
32struct BlendWriter;
33struct PointerRNA;
34struct PropertyRNA;
35
36/* ----------------------------- */
37/* Data Management */
38
44
49void BKE_nlastrip_free(NlaStrip *strip, bool do_id_user);
54void BKE_nlatrack_free(NlaTrack *nlt, bool do_id_user);
59void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user);
60
68NlaStrip *BKE_nlastrip_copy(Main *bmain, NlaStrip *strip, bool use_same_action, int flag);
74NlaTrack *BKE_nlatrack_copy(Main *bmain, NlaTrack *nlt, bool use_same_actions, int flag);
80void BKE_nla_tracks_copy(Main *bmain, ListBase *dst, const ListBase *src, int flag);
81
87 AnimData *adt_dest,
88 const AnimData *adt_source,
89 int flag);
90
97 NlaTrack *new_track,
98 bool is_liboverride);
99
104void BKE_nlatrack_insert_after(ListBase *nla_tracks,
105 NlaTrack *prev,
106 NlaTrack *new_track,
107 bool is_liboverride);
108
113NlaTrack *BKE_nlatrack_new_before(ListBase *nla_tracks, NlaTrack *next, bool is_liboverride);
114
119NlaTrack *BKE_nlatrack_new_after(ListBase *nla_tracks, NlaTrack *prev, bool is_liboverride);
120
125NlaTrack *BKE_nlatrack_new_head(ListBase *nla_tracks, bool is_liboverride);
126
131NlaTrack *BKE_nlatrack_new_tail(ListBase *nla_tracks, const bool is_liboverride);
132
137
142void BKE_nlatrack_remove_and_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user);
143
150bool BKE_nlatrack_is_enabled(const AnimData &adt, const NlaTrack &nlt);
151
169float BKE_nla_clip_length_get_nonzero(const NlaStrip *strip);
170
182void BKE_nla_clip_length_ensure_nonzero(const float *actstart, float *r_actend);
183
190NlaStrip *BKE_nlastrip_new(bAction *act, ID &animated_id);
191
202 ID &animated_id);
203
204/*
205 * Removes the given NLA strip from the list of strips provided.
206 */
208
209/*
210 * Removes the given NLA strip from the list of strips provided, and frees it's memory.
211 */
212void BKE_nlastrip_remove_and_free(ListBase *strips, NlaStrip *strip, const bool do_id_user);
213
218NlaStrip *BKE_nlastack_add_strip(OwnedAnimData owned_adt, const bool is_liboverride);
219
223NlaStrip *BKE_nla_add_soundstrip(Main *bmain, Scene *scene, Speaker *speaker);
224
230
231/* ----------------------------- */
232/* API */
233
237bool BKE_nlastrips_has_space(ListBase *strips, float start, float end);
243
250
257
264void BKE_nlastrips_make_metas(ListBase *strips, bool is_temp);
271void BKE_nlastrips_clear_metas(ListBase *strips, bool only_sel, bool only_temp);
280bool BKE_nlameta_add_strip(NlaStrip *mstrip, NlaStrip *strip);
286
287/* ............ */
288
298
306
312
316bool BKE_nlatrack_has_space(NlaTrack *nlt, float start, float end);
317
322
328
333bool BKE_nlatrack_add_strip(NlaTrack *nlt, NlaStrip *strip, bool is_liboverride);
334
338void BKE_nlatrack_remove_strip(NlaTrack *track, NlaStrip *strip);
339
344bool BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2]);
351bool BKE_nlatrack_is_nonlocal_in_liboverride(const ID *id, const NlaTrack *nlt);
352
353/* ............ */
354
379
387NlaStrip *BKE_nlastrip_next_in_track(NlaStrip *strip, bool skip_transitions);
388
396NlaStrip *BKE_nlastrip_prev_in_track(NlaStrip *strip, bool skip_transitions);
397
398/* ............ */
399
407void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip);
414
418bool BKE_nlastrip_within_bounds(NlaStrip *strip, float min, float max);
423float BKE_nlastrip_distance_to_frame(const NlaStrip *strip, float timeline_frame);
434
439
447
448/* ............ */
449
462
471
477
482
483/* ............ */
484
493 bAction *act,
499bool BKE_nla_action_stash(OwnedAnimData owned_adt, bool is_liboverride);
500
501/* ............ */
502
511void BKE_nla_action_pushdown(OwnedAnimData owned_adt, bool is_liboverride);
512
522
527
539
540/* ----------------------------- */
541/* Time Mapping */
542
543/* time mapping conversion modes */
545 /* convert from global time to strip time - for evaluation */
547 /* convert from global time to strip time - for editing corrections */
548 /* XXX: old 0 invert. */
550 /* convert from strip time to global time */
551 /* XXX: old 1 invert. */
553};
554
567float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, eNlaTime_ConvertModes mode);
568
569/* ----------------------------- */
570/* .blend file API */
571
573void BKE_nla_blend_read_data(BlendDataReader *reader, ID *id_owner, ListBase *tracks);
574
582
592void BKE_nla_debug_print_flags(AnimData *adt, ID *owner_id);
593
595
609bool foreach_strip(ID *id, blender::FunctionRef<bool(NlaStrip *)> callback);
610
624bool foreach_strip_adt(const AnimData &adt, blender::FunctionRef<bool(NlaStrip *)> callback);
625
626} // namespace blender::bke::nla
Blender kernel action and pose functionality.
void BKE_nlastrip_free(NlaStrip *strip, bool do_id_user)
bool BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2])
bool BKE_nla_action_slot_is_stashed(AnimData *adt, bAction *act, blender::animrig::slot_handle_t slot_handle)
void BKE_nlameta_flush_transforms(NlaStrip *mstrip)
bool BKE_nlatrack_has_animated_strips(NlaTrack *nlt)
void BKE_nlastrip_remove_and_free(ListBase *strips, NlaStrip *strip, const bool do_id_user)
bool BKE_nlatrack_add_strip(NlaTrack *nlt, NlaStrip *strip, bool is_liboverride)
void BKE_nlastrips_clear_metastrip(ListBase *strips, NlaStrip *strip)
void BKE_nla_tracks_copy_from_adt(Main *bmain, AnimData *adt_dest, const AnimData *adt_source, int flag)
void BKE_nla_action_pushdown(OwnedAnimData owned_adt, bool is_liboverride)
void BKE_nla_debug_print_flags(AnimData *adt, ID *owner_id)
void BKE_nla_clip_length_ensure_nonzero(const float *actstart, float *r_actend)
void BKE_nlastrip_recalculate_bounds_sync_action(NlaStrip *strip)
void BKE_nlastrips_sort_strips(ListBase *strips)
void BKE_nlastrips_clear_metas(ListBase *strips, bool only_sel, bool only_temp)
struct NlaTrack * BKE_nlatrack_new()
float BKE_nlastrip_compute_frame_to_next_strip(NlaStrip *strip)
void BKE_nla_tweakmode_exit(OwnedAnimData owned_adt)
NlaStrip * BKE_nlastrip_copy(Main *bmain, NlaStrip *strip, bool use_same_action, int flag)
NlaStrip * BKE_nlastack_add_strip(OwnedAnimData owned_adt, const bool is_liboverride)
void BKE_nla_validate_state(AnimData *adt)
void BKE_nla_tweakmode_exit_nofollowptr(AnimData *adt)
NlaStrip * BKE_nlastrip_prev_in_track(NlaStrip *strip, bool skip_transitions)
void BKE_nla_tracks_copy(Main *bmain, ListBase *dst, const ListBase *src, int flag)
NlaTrack * BKE_nlatrack_copy(Main *bmain, NlaTrack *nlt, bool use_same_actions, int flag)
void BKE_nlatrack_solo_toggle(AnimData *adt, NlaTrack *nlt)
void BKE_nlatrack_insert_after(ListBase *nla_tracks, NlaTrack *prev, NlaTrack *new_track, bool is_liboverride)
bool BKE_nlastrip_controlcurve_remove(NlaStrip *strip, FCurve *fcurve)
void BKE_nlatrack_set_active(ListBase *tracks, NlaTrack *nlt)
NlaStrip * BKE_nlastrip_next_in_track(NlaStrip *strip, bool skip_transitions)
NlaStrip * BKE_nlastrip_new(bAction *act, ID &animated_id)
NlaStrip * BKE_nlastrip_find_by_name(NlaTrack *nlt, const char *name)
void BKE_nlatrack_remove_strip(NlaTrack *track, NlaStrip *strip)
void BKE_nlastrips_add_strip_unsafe(ListBase *strips, NlaStrip *strip)
eNlaTime_ConvertModes
Definition BKE_nla.hh:544
@ NLATIME_CONVERT_EVAL
Definition BKE_nla.hh:546
@ NLATIME_CONVERT_MAP
Definition BKE_nla.hh:552
@ NLATIME_CONVERT_UNMAP
Definition BKE_nla.hh:549
void BKE_nlastrip_recalculate_bounds(NlaStrip *strip)
NlaTrack * BKE_nlatrack_new_after(ListBase *nla_tracks, NlaTrack *prev, bool is_liboverride)
bool BKE_nlastrips_has_space(ListBase *strips, float start, float end)
bool BKE_nlastrips_add_strip(ListBase *strips, NlaStrip *strip)
NlaTrack * BKE_nlatrack_new_tail(ListBase *nla_tracks, const bool is_liboverride)
bool BKE_nlastrip_has_curves_for_property(const PointerRNA *ptr, const PropertyRNA *prop)
void BKE_nlastrip_remove(ListBase *strips, NlaStrip *strip)
void BKE_nlastrip_recalculate_blend(NlaStrip *strip)
NlaStrip * BKE_nlastrip_new_for_slot(bAction *act, blender::animrig::slot_handle_t slot_handle, ID &animated_id)
NlaTrack * BKE_nlatrack_find_tweaked(AnimData *adt)
void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip)
NlaTrack * BKE_nlatrack_new_head(ListBase *nla_tracks, bool is_liboverride)
bool BKE_nla_action_stash(OwnedAnimData owned_adt, bool is_liboverride)
float BKE_nla_clip_length_get_nonzero(const NlaStrip *strip)
void BKE_nla_blend_write(BlendWriter *writer, ListBase *tracks)
bool BKE_nla_tweakmode_enter(OwnedAnimData owned_adt)
void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user)
bool BKE_nlatrack_has_space(NlaTrack *nlt, float start, float end)
void BKE_nlatrack_sort_strips(NlaTrack *nlt)
NlaStrip * BKE_nlastrip_find_active(NlaTrack *nlt)
void BKE_nla_liboverride_post_process(ID *id, AnimData *adt)
NlaStrip * BKE_nla_add_soundstrip(Main *bmain, Scene *scene, Speaker *speaker)
float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, eNlaTime_ConvertModes mode)
NlaTrack * BKE_nlatrack_find_active(ListBase *tracks)
void BKE_nlatrack_insert_before(ListBase *nla_tracks, NlaTrack *next, NlaTrack *new_track, bool is_liboverride)
bool BKE_nlatrack_is_nonlocal_in_liboverride(const ID *id, const NlaTrack *nlt)
void BKE_nlatrack_free(NlaTrack *nlt, bool do_id_user)
float BKE_nlastrip_compute_frame_from_previous_strip(NlaStrip *strip)
bool BKE_nlastrip_within_bounds(NlaStrip *strip, float min, float max)
void BKE_nla_tweakmode_clear_flags(AnimData *adt)
void BKE_nlatrack_remove(ListBase *tracks, NlaTrack *nlt)
void BKE_nlastrip_validate_name(AnimData *adt, NlaStrip *strip)
bool BKE_nlameta_add_strip(NlaStrip *mstrip, NlaStrip *strip)
bool BKE_nlatrack_has_strips(ListBase *tracks)
bool BKE_nlatracks_have_animated_strips(ListBase *tracks)
void BKE_nlatrack_remove_and_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user)
void BKE_nlastrip_validate_fcurves(NlaStrip *strip)
float BKE_nlastrip_distance_to_frame(const NlaStrip *strip, float timeline_frame)
bool BKE_nlatrack_is_enabled(const AnimData &adt, const NlaTrack &nlt)
NlaTrack * BKE_nlatrack_new_before(ListBase *nla_tracks, NlaTrack *next, bool is_liboverride)
void BKE_nla_blend_read_data(BlendDataReader *reader, ID *id_owner, ListBase *tracks)
void BKE_nla_strip_foreach_id(NlaStrip *strip, LibraryForeachIDData *data)
void BKE_nlastrips_make_metas(ListBase *strips, bool is_temp)
These structs are the foundation for all linked lists in the library system.
BMesh const char void * data
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
Definition btDbvt.cpp:299
static ulong * next
decltype(::ActionSlot::handle) slot_handle_t
bool foreach_strip(ID *id, blender::FunctionRef< bool(NlaStrip *)> callback)
bool foreach_strip_adt(const AnimData &adt, blender::FunctionRef< bool(NlaStrip *)> callback)
const char * name
#define min(a, b)
Definition sort.cc:36
Definition DNA_ID.h:414
ListBase strips
struct NlaTrack * prev
max
Definition text_draw.cc:251
ListBase tracks
Definition tracking.cc:71
PointerRNA * ptr
Definition wm_files.cc:4238
uint8_t flag
Definition wm_window.cc:145