Files
workinf_Blender_Wasm/blender-5.2.0/source/blender/animrig/ANIM_nla.hh
2026-08-12 04:47:48 -04:00

71 lines
2.1 KiB
C++

/* SPDX-FileCopyrightText: 2024 Blender Authors. All rights reserved.
*
* SPDX-License-Identifier: GPL-2.0-or-later */
#pragma once
/** \file
* \ingroup animrig
*/
#include "ANIM_action.hh"
namespace blender {
struct ID;
struct NlaStrip;
namespace animrig::nla {
/**
* Assign the Action to this NLA strip.
*
* Similar to animrig::assign_action(), this tries to find a suitable slot.
*
* \see animrig::assign_action
*
* \returns whether the assignment was ok.
*/
bool assign_action(NlaStrip &strip, Action &action, ID &animated_id);
void unassign_action(NlaStrip &strip, ID &animated_id);
/**
* Assign a slot to the NLA strip.
*
* The strip should already have an Action assigned to it, and the given Slot should belong to that
* Action.
*
* \param slot_to_assign: the slot to assign, or nullptr to un-assign the current slot.
*/
ActionSlotAssignmentResult assign_action_slot(NlaStrip &strip,
Slot *slot_to_assign,
ID &animated_id);
ActionSlotAssignmentResult assign_action_slot_handle(NlaStrip &strip,
slot_handle_t slot_handle,
ID &animated_id);
/**
* Keyframing function taking the NLA into account.
*
* Inserts a key into the given FCurve with the current value of the PropertyRNA remapped through
* the NLA stack.
*
* With the removal of the NLA any calls to this can be redirected to
* animrig::insert_keyframe_direct.
*
* \warning This bypasses all animation layer and strip logic. Use with caution. If unsure, use
* `insert_keyframes` instead.
*/
bool insert_keyframe_direct(ReportList *reports,
PointerRNA ptr,
PropertyRNA *prop,
FCurve *fcu,
const AnimationEvalContext *anim_eval_context,
eBezTriple_KeyframeType keytype,
NlaKeyframingContext *nla_context,
eInsertKeyFlags flag);
} // namespace animrig::nla
} // namespace blender