31 for (
Strip *strip : layer->strips()) {
32 if (strip->type() != Strip::Type::Keyframe) {
36 for (
FCurve *fcu : bag->fcurves()) {
55 for (
Strip *strip : layer->strips()) {
56 if (strip->type() != Strip::Type::Keyframe) {
60 if (bag->slot_handle != handle) {
63 for (
FCurve *fcu : bag->fcurves()) {
74 const ID &animated_id,
78 const auto forward_to_callback = [&](
bAction *&action_ptr_ref,
81 if (!action_ptr_ref) {
84 return callback(
const_cast<const Action &
>(action_ptr_ref->wrap()), slot_handle_ref);
109 if (!callback(strip->act, strip->action_slot_handle, strip->action_slot_name)) {
115 if (!looped_until_last_strip) {
125 const Object &
object =
reinterpret_cast<const Object &
>(animated_id);
133 auto visit_constraint = [&](
const bConstraint &constraint) ->
bool {
138 if (!constraint_data->
act) {
148 if (!visit_constraint(*con)) {
157 if (!visit_constraint(*con)) {
Functions and classes to work with Actions.
Functionality to iterate an Action in various ways.
AnimData * BKE_animdata_from_id(const ID *id)
#define LISTBASE_FOREACH(type, var, list)
btSequentialImpulseConstraintSolverMt int btPersistentManifold int btTypedConstraint ** constraints
blender::Span< const Layer * > layers() const
bool is_action_legacy() const
bool is_action_layered() const
DEGForeachIDComponentCallback callback
void foreach_fcurve_in_action_slot(Action &action, slot_handle_t handle, FunctionRef< void(FCurve &fcurve)> callback)
bool foreach_action_slot_use_with_references(ID &animated_id, FunctionRef< bool(bAction *&action_ptr_ref, slot_handle_t &slot_handle_ref, char *slot_name)> callback)
void foreach_fcurve_in_action(Action &action, FunctionRef< void(FCurve &fcurve)> callback)
decltype(::ActionSlot::handle) slot_handle_t
bool foreach_action_slot_use(const ID &animated_id, FunctionRef< bool(const Action &action, slot_handle_t slot_handle)> callback)
bool foreach_strip_adt(const AnimData &adt, blender::FunctionRef< bool(NlaStrip *)> callback)
int32_t action_slot_handle
char action_slot_name[66]