Blender V4.3
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
12#define NLASTRIP_MIN_LEN_THRESH 0.1f
13
14#include "DNA_listBase.h"
15
16#include "BKE_anim_data.hh"
17
18#include "BLI_function_ref.hh"
19
20struct AnimData;
21struct ID;
23struct Main;
24struct NlaStrip;
25struct NlaTrack;
26struct Scene;
27struct Speaker;
28struct bAction;
29
30struct BlendDataReader;
31struct BlendWriter;
32struct PointerRNA;
33struct PropertyRNA;
34
35/* ----------------------------- */
36/* Data Management */
37
42struct NlaTrack *BKE_nlatrack_new(void);
43
48void BKE_nlastrip_free(NlaStrip *strip, bool do_id_user);
53void BKE_nlatrack_free(NlaTrack *nlt, bool do_id_user);
58void BKE_nla_tracks_free(ListBase *tracks, bool do_id_user);
59
67NlaStrip *BKE_nlastrip_copy(Main *bmain, NlaStrip *strip, bool use_same_action, int flag);
73NlaTrack *BKE_nlatrack_copy(Main *bmain, NlaTrack *nlt, bool use_same_actions, int flag);
79void BKE_nla_tracks_copy(Main *bmain, ListBase *dst, const ListBase *src, int flag);
80
86 AnimData *adt_dest,
87 const AnimData *adt_source,
88 int flag);
89
96 NlaTrack *new_track,
97 bool is_liboverride);
98
103void BKE_nlatrack_insert_after(ListBase *nla_tracks,
104 NlaTrack *prev,
105 NlaTrack *new_track,
106 bool is_liboverride);
107
112NlaTrack *BKE_nlatrack_new_before(ListBase *nla_tracks, NlaTrack *next, bool is_liboverride);
113
118NlaTrack *BKE_nlatrack_new_after(ListBase *nla_tracks, NlaTrack *prev, bool is_liboverride);
119
124NlaTrack *BKE_nlatrack_new_head(ListBase *nla_tracks, bool is_liboverride);
125
130NlaTrack *BKE_nlatrack_new_tail(ListBase *nla_tracks, const bool is_liboverride);
131
135void BKE_nlatrack_remove(ListBase *tracks, NlaTrack *nlt);
136
141void BKE_nlatrack_remove_and_free(ListBase *tracks, NlaTrack *nlt, bool do_id_user);
142
160float BKE_nla_clip_length_get_nonzero(const NlaStrip *strip);
161
173void BKE_nla_clip_length_ensure_nonzero(const float *actstart, float *r_actend);
174
178NlaStrip *BKE_nlastrip_new(bAction *act, ID &animated_id);
179
180/*
181 * Removes the given NLA strip from the list of strips provided.
182 */
184
185/*
186 * Removes the given NLA strip from the list of strips provided, and frees it's memory.
187 */
188void BKE_nlastrip_remove_and_free(ListBase *strips, NlaStrip *strip, const bool do_id_user);
189
194NlaStrip *BKE_nlastack_add_strip(OwnedAnimData owned_adt, bAction *act, bool is_liboverride);
198NlaStrip *BKE_nla_add_soundstrip(Main *bmain, Scene *scene, Speaker *speaker);
199
205
206/* ----------------------------- */
207/* API */
208
212bool BKE_nlastrips_has_space(ListBase *strips, float start, float end);
218
225
232
239void BKE_nlastrips_make_metas(ListBase *strips, bool is_temp);
246void BKE_nlastrips_clear_metas(ListBase *strips, bool only_sel, bool only_temp);
255bool BKE_nlameta_add_strip(NlaStrip *mstrip, NlaStrip *strip);
261
262/* ............ */
263
272void BKE_nlatrack_set_active(ListBase *tracks, NlaTrack *nlt);
273
281
287
291bool BKE_nlatrack_has_space(NlaTrack *nlt, float start, float end);
292
297
303
308bool BKE_nlatrack_add_strip(NlaTrack *nlt, NlaStrip *strip, bool is_liboverride);
309
313void BKE_nlatrack_remove_strip(NlaTrack *track, NlaStrip *strip);
314
319bool BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2]);
326bool BKE_nlatrack_is_nonlocal_in_liboverride(const ID *id, const NlaTrack *nlt);
327
328/* ............ */
329
354
362NlaStrip *BKE_nlastrip_next_in_track(NlaStrip *strip, bool skip_transitions);
363
371NlaStrip *BKE_nlastrip_prev_in_track(NlaStrip *strip, bool skip_transitions);
372
373/* ............ */
374
382void BKE_nlastrip_set_active(AnimData *adt, NlaStrip *strip);
388NlaStrip *BKE_nlastrip_find_by_name(NlaTrack *nlt, const char *name);
389
393bool BKE_nlastrip_within_bounds(NlaStrip *strip, float min, float max);
398float BKE_nlastrip_distance_to_frame(const NlaStrip *strip, float timeline_frame);
409
414
422
423/* ............ */
424
437
443
448
449/* ............ */
450
463bool BKE_nla_action_stash(OwnedAnimData owned_adt, bool is_liboverride);
464
465/* ............ */
466
475void BKE_nla_action_pushdown(OwnedAnimData owned_adt, bool is_liboverride);
476
486
491
503
504/* ----------------------------- */
505/* Time Mapping */
506
507/* time mapping conversion modes */
509 /* convert from global time to strip time - for evaluation */
511 /* convert from global time to strip time - for editing corrections */
512 /* XXX: old 0 invert. */
514 /* convert from strip time to global time */
515 /* XXX: old 1 invert. */
517};
518
526float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, short mode);
527
528/* ----------------------------- */
529/* .blend file API */
530
531void BKE_nla_blend_write(BlendWriter *writer, ListBase *tracks);
532void BKE_nla_blend_read_data(BlendDataReader *reader, ID *id_owner, ListBase *tracks);
533
541
551void BKE_nla_debug_print_flags(AnimData *adt, ID *owner_id);
552
554
569
584
585} // namespace blender::bke::nla
void BKE_nlastrip_free(NlaStrip *strip, bool do_id_user)
float BKE_nla_tweakedit_remap(AnimData *adt, float cframe, short mode)
bool BKE_nlatrack_get_bounds(NlaTrack *nlt, float bounds[2])
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)
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)
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)
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)
struct NlaTrack * BKE_nlatrack_new(void)
eNlaTime_ConvertModes
Definition BKE_nla.hh:508
@ NLATIME_CONVERT_EVAL
Definition BKE_nla.hh:510
@ NLATIME_CONVERT_MAP
Definition BKE_nla.hh:516
@ NLATIME_CONVERT_UNMAP
Definition BKE_nla.hh:513
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)
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)
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)
NlaStrip * BKE_nlastack_add_strip(OwnedAnimData owned_adt, bAction *act, bool is_liboverride)
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_nla_action_is_stashed(AnimData *adt, bAction *act)
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.
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
Definition btDbvt.cpp:299
DEGForeachIDComponentCallback callback
static ulong * next
bool foreach_strip(ID *id, blender::FunctionRef< bool(NlaStrip *)> callback)
bool foreach_strip_adt(const AnimData &adt, blender::FunctionRef< bool(NlaStrip *)> callback)
#define min(a, b)
Definition sort.c:32
Definition DNA_ID.h:413
ListBase strips
struct NlaTrack * prev
PointerRNA * ptr
Definition wm_files.cc:4126
uint8_t flag
Definition wm_window.cc:138