UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
IAnimationDataModel.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
10
12
13#include "IAnimationDataModel.generated.h"
14
16{
42
45 {
46 public:
47 virtual ~IAnimationDataModels() = default;
48
50 {
51 static FName FeatureName = FName(TEXT("AnimationDataModels"));
52 return FeatureName;
53 }
54
57
59 };
60}
61
65USTRUCT(BlueprintType)
67{
69
70
71 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
72 FRawAnimSequenceTrack InternalTrackData;
73
75 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
76 int32 BoneTreeIndex = INDEX_NONE;
77
79 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
81};
82
86USTRUCT(BlueprintType)
88{
90
91
92 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
93 TArray<FFloatCurve> FloatCurves;
94
96 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
97 TArray<FTransformCurve> TransformCurves;
98};
99
103USTRUCT(BlueprintType)
105{
107
108
109 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
111
113 UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Model")
115};
116
119
120UINTERFACE(BlueprintType, meta=(CannotImplementInterfaceInBlueprint), MinimalAPI)
125
127{
128public:
130
131#if WITH_EDITOR
132 // RAII helper to allow repopulating data model without warnings during reimporting
133 struct FReimportScope
134 {
136 {
138 if (bOriginalValue)
139 {
140 bPopulationFlagRef = false;
141 }
142 }
143
145 {
146 // Only reset back to true if that was the original state and currently is false
148 {
150 }
151 }
152 private:
153 bool& bPopulationFlagRef;
154 bool bOriginalValue;
155 };
156#endif // WITH_EDITOR
157
161 UFUNCTION(BlueprintCallable, Category=AnimationDataModel)
162 virtual double GetPlayLength() const = 0;
163
167 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
169
173 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
175
179 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
181
185 UE_DEPRECATED(5.2, "GetBoneAnimationTracks has been deprecated")
186 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
188
189 virtual FTransform EvaluateBoneTrackTransform(FName TrackName, const FFrameTime& FrameTime, const EAnimInterpolationType& Interpolation) const = 0;
190 virtual FTransform GetBoneTrackTransform(FName TrackName, const FFrameNumber& FrameNumber) const = 0;
191 virtual void GetBoneTrackTransforms(FName TrackName, const TArray<FFrameNumber>& FrameNumbers, TArray<FTransform>& OutTransforms) const = 0;
192 virtual void GetBoneTrackTransforms(FName TrackName, TArray<FTransform>& OutTransforms) const = 0;
193 virtual void GetBoneTracksTransform(const TArray<FName>& TrackNames, const FFrameNumber& FrameNumber, TArray<FTransform>& OutTransforms) const = 0;
194
198 UE_DEPRECATED(5.2, "GetBoneTrackByIndex has been deprecated")
199 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
201
205 UE_DEPRECATED(5.2, "GetBoneTrackByName has been deprecated")
206 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
208
212 UE_DEPRECATED(5.2, "FindBoneTrackByName has been deprecated")
214
218 UE_DEPRECATED(5.2, "FindBoneTrackByIndex has been deprecated")
220
224 UE_DEPRECATED(5.2, "FindBoneTrackByIndex has been deprecated")
225 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
227
231 UE_DEPRECATED(5.2, "GetBoneTrackIndexByName has been deprecated")
232 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
234
238 UE_DEPRECATED(5.2, "IsValidBoneTrackIndex has been deprecated")
239 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
240 virtual bool IsValidBoneTrackIndex(int32 TrackIndex) const = 0;
241
242 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
243 virtual bool IsValidBoneTrackName(const FName& TrackName) const = 0;
244
248 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
250
256 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
258
261
265 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
267
271 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
273
278
283
288
293
298
303
308
313
318
323
328
333
338
343
348
353
357 UFUNCTION(BlueprintCallable, Category = AnimationDataModel)
359
364
366 {
367 FGuidGenerationSettings() : bIncludeBoneData(1), bIncludeCurveData(1), bIncludeAttributeData(1), bIncludeTimingData(1) {}
368
373 };
374
381
386
387#if WITH_EDITOR
391 virtual FString GenerateDebugStateString() const
392 {
393 return FString::Printf(TEXT("DebugStateString not implemented. Guid == %s"), *GenerateGuid().ToString());
394 }
395#endif
396
401
408#if WITH_EDITOR
409 virtual void Evaluate(FAnimationPoseData& InOutPoseData, const UE::Anim::DataModel::FEvaluationContext& EvaluationContext) const = 0;
410#endif // WITH_EDITOR
411
412 virtual bool HasBeenPopulated() const = 0;
413 virtual void IterateBoneKeys(const FName& BoneName, TFunction<bool(const FVector3f& Pos, const FQuat4f&, const FVector3f, const FFrameNumber&)> IterationFunction) const = 0;
414
416 {
417 FEvaluationAndModificationLock(IAnimationDataModel& InModel) : Model(InModel) { InModel.LockEvaluationAndModification(); bLocked = true; }
419 {
420 while(SpinFunc())
421 {
422 bLocked = InModel.TryLockEvaluationAndModification();
423 if (bLocked)
424 {
425 break;
426 }
427 }
428 }
430 private:
431 IAnimationDataModel& Model;
432 bool bLocked = false;
433 };
434protected:
436 virtual void OnNotify(const EAnimDataModelNotifyType& NotifyType, const FAnimDataModelNotifPayload& Payload) = 0;
437
438 virtual void LockEvaluationAndModification() const = 0;
439 virtual bool TryLockEvaluationAndModification() const = 0;
440 virtual void UnlockEvaluationAndModification() const = 0;
441 virtual bool& GetPopulationFlag() = 0;
442
443 struct FModelNotifier;
445
447 {
448 virtual ~FModelNotifier() = default;
449
456 template<typename T>
457 void Notify(EAnimDataModelNotifyType NotifyType, const T& PayloadData)
458 {
459 UScriptStruct* TypeScriptStruct = T::StaticStruct();
460
461 const FAnimDataModelNotifPayload Payload((int8*)&PayloadData, TypeScriptStruct);
462 DataModel->OnNotify(NotifyType, Payload);
463
464 ModifiedEvent.Broadcast(NotifyType, DataModel.GetInterface(), Payload);
465
466 if (ModifiedEventDynamic.IsBound())
467 {
468 ModifiedEventDynamic.Broadcast(NotifyType, DataModel, Payload);
469 }
470
471 // Only regenerate transient data when not in a bracket, or at the end of one
472 {
474 {
476 }
478 {
480 }
481
482 check(BracketCounter >= 0);
483 }
484 }
485
492 {
495 }
496
503
505 {
506 return BracketCounter;
507 }
508
509 protected:
514 };
515};
516
517
EAnimDataModelNotifyType
Definition AnimDataNotifications.h:20
EAnimInterpolationType
Definition AnimTypes.h:689
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int8 int8
An 8-bit signed integer.
Definition Platform.h:1121
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UINTERFACE(...)
Definition ObjectMacros.h:780
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NameTypes.h:617
Definition IAnimationDataController.h:50
Definition IAnimationDataModel.h:127
virtual const FFloatCurve & GetFloatCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual const FRichCurve & GetRichCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual const FBoneAnimationTrack * FindBoneTrackByIndex(int32 BoneIndex) const =0
virtual int32 GetBoneTrackIndex(const FBoneAnimationTrack &Track) const =0
virtual bool IsValidBoneTrackName(const FName &TrackName) const =0
virtual const FAnimationCurveData & GetCurveData() const =0
virtual UAnimSequence * GetAnimationSequence() const =0
virtual void GetBoneTrackNames(TArray< FName > &OutNames) const =0
virtual void GetAttributesForBone(const FName &BoneName, TArray< const FAnimatedBoneAttribute * > &OutBoneAttributes) const =0
virtual TScriptInterface< IAnimationDataController > GetController()=0
virtual int32 GetNumberOfFrames() const =0
virtual bool IsValidBoneTrackIndex(int32 TrackIndex) const =0
virtual const TArray< struct FTransformCurve > & GetTransformCurves() const =0
virtual FAnimDataModelModifiedDynamicEvent & GetModifiedDynamicEvent()=0
virtual const FFloatCurve * FindFloatCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual bool HasBeenPopulated() const =0
virtual const TArray< FBoneAnimationTrack > & GetBoneAnimationTracks() const =0
virtual void OnNotify(const EAnimDataModelNotifyType &NotifyType, const FAnimDataModelNotifPayload &Payload)=0
virtual const FRichCurve * FindRichCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual TArrayView< const FAnimatedBoneAttribute > GetAttributes() const =0
virtual bool & GetPopulationFlag()=0
virtual IAnimationDataModel::FModelNotifier & GetNotifier()=0
virtual FTransform EvaluateBoneTrackTransform(FName TrackName, const FFrameTime &FrameTime, const EAnimInterpolationType &Interpolation) const =0
virtual bool TryLockEvaluationAndModification() const =0
virtual int32 GetNumberOfAttributesForBoneIndex(const int32 BoneIndex) const =0
virtual FGuid GenerateGuid(const FGuidGenerationSettings &InSettings) const =0
virtual const FAnimCurveBase * FindCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual const FBoneAnimationTrack & GetBoneTrackByName(FName TrackName) const =0
virtual const FTransformCurve & GetTransformCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual FTransform GetBoneTrackTransform(FName TrackName, const FFrameNumber &FrameNumber) const =0
virtual int32 GetNumberOfKeys() const =0
virtual FGuid GenerateGuid() const
Definition IAnimationDataModel.h:385
virtual int32 GetNumberOfAttributes() const =0
virtual int32 GetNumBoneTracks() const =0
virtual const FAnimatedBoneAttribute * FindAttribute(const FAnimationAttributeIdentifier &AttributeIdentifier) const =0
virtual const FAnimatedBoneAttribute & GetAttribute(const FAnimationAttributeIdentifier &AttributeIdentifier) const =0
virtual const TArray< struct FFloatCurve > & GetFloatCurves() const =0
virtual FFrameRate GetFrameRate() const =0
virtual void LockEvaluationAndModification() const =0
virtual void IterateBoneKeys(const FName &BoneName, TFunction< bool(const FVector3f &Pos, const FQuat4f &, const FVector3f, const FFrameNumber &)> IterationFunction) const =0
virtual int32 GetNumberOfTransformCurves() const =0
virtual void GetBoneTrackTransforms(FName TrackName, const TArray< FFrameNumber > &FrameNumbers, TArray< FTransform > &OutTransforms) const =0
virtual double GetPlayLength() const =0
virtual void GetBoneTracksTransform(const TArray< FName > &TrackNames, const FFrameNumber &FrameNumber, TArray< FTransform > &OutTransforms) const =0
virtual int32 GetBoneTrackIndexByName(FName TrackName) const =0
virtual const FBoneAnimationTrack & GetBoneTrackByIndex(int32 TrackIndex) const =0
virtual void UnlockEvaluationAndModification() const =0
virtual int32 GetNumberOfFloatCurves() const =0
virtual const FTransformCurve * FindTransformCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
virtual const FBoneAnimationTrack * FindBoneTrackByName(FName Name) const =0
virtual FAnimDataModelModifiedEvent & GetModifiedEvent()=0
virtual const FAnimCurveBase & GetCurve(const FAnimationCurveIdentifier &CurveIdentifier) const =0
Definition IModularFeature.h:12
Definition ArrayView.h:139
Definition Array.h:670
Definition AndroidPlatformMisc.h:14
Definition ScriptInterface.h:139
UE_FORCEINLINE_HINT InInterfaceType * GetInterface() const
Definition ScriptInterface.h:335
Definition AnimSequenceBase.h:37
Definition AnimSequence.h:203
Definition IAnimationDataModel.h:122
Definition Class.h:3793
Definition IAnimationDataModel.h:45
static ENGINE_API UClass * FindClassForAnimationAsset(UAnimSequenceBase *AnimSequenceBase)
Definition IAnimationDataModel.cpp:11
virtual UClass * GetModelClass(UAnimSequenceBase *OwningAnimationAsset) const =0
static FName GetModularFeatureName()
Definition IAnimationDataModel.h:49
Definition Interface.h:19
Definition Class.h:1720
Definition IAnimationDataModel.h:16
Definition AnimCurveTypes.h:93
Definition AnimDataNotifications.h:251
Definition IAnimationDataModel.h:105
Definition AttributeIdentifier.h:17
Definition IAnimationDataModel.h:88
Definition CurveIdentifier.h:37
Definition AnimationPoseData.h:16
Definition AttributeCurve.h:61
Definition IAnimationDataModel.h:67
Definition AnimDataNotifications.h:89
Definition AnimCurveTypes.h:214
Definition FrameNumber.h:18
Definition FrameRate.h:21
Definition FrameTime.h:16
Definition Guid.h:109
Definition AnimTypes.h:853
Definition RichCurve.h:200
Definition AnimTypes.h:822
Definition AnimCurveTypes.h:308
Definition IAnimationDataModel.h:416
FEvaluationAndModificationLock(IAnimationDataModel &InModel, const TFunction< bool()> &SpinFunc)
Definition IAnimationDataModel.h:418
FEvaluationAndModificationLock(IAnimationDataModel &InModel)
Definition IAnimationDataModel.h:417
~FEvaluationAndModificationLock()
Definition IAnimationDataModel.h:429
Definition IAnimationDataModel.h:366
uint8 bIncludeAttributeData
Definition IAnimationDataModel.h:371
uint8 bIncludeTimingData
Definition IAnimationDataModel.h:372
uint8 bIncludeBoneData
Definition IAnimationDataModel.h:369
FGuidGenerationSettings()
Definition IAnimationDataModel.h:367
uint8 bIncludeCurveData
Definition IAnimationDataModel.h:370
Definition IAnimationDataModel.h:447
int32 GetBracketDepth() const
Definition IAnimationDataModel.h:504
FAnimDataModelModifiedEvent & ModifiedEvent
Definition IAnimationDataModel.h:511
FModelNotifier(TScriptInterface< IAnimationDataModel > ModelInterface)
Definition IAnimationDataModel.h:497
TScriptInterface< IAnimationDataModel > DataModel
Definition IAnimationDataModel.h:510
FAnimDataModelModifiedDynamicEvent & ModifiedEventDynamic
Definition IAnimationDataModel.h:512
int32 BracketCounter
Definition IAnimationDataModel.h:513
void Notify(EAnimDataModelNotifyType NotifyType)
Definition IAnimationDataModel.h:491
void Notify(EAnimDataModelNotifyType NotifyType, const T &PayloadData)
Definition IAnimationDataModel.h:457
Definition IAnimationDataModel.h:19
const FFrameRate SampleFrameRate
Definition IAnimationDataModel.h:32
const FName RetargetSource
Definition IAnimationDataModel.h:36
const EAnimInterpolationType InterpolationType
Definition IAnimationDataModel.h:40
FEvaluationContext(double InTime, FFrameRate InSampleRate, FName InRetargetSource, const TArray< FTransform > &InRetargetTransforms, EAnimInterpolationType InInterpolationType=EAnimInterpolationType::Linear)
Definition IAnimationDataModel.h:21
const TArray< FTransform > & RetargetTransforms
Definition IAnimationDataModel.h:38
const FFrameTime SampleTime
Definition IAnimationDataModel.h:34
FEvaluationContext(FFrameTime InTime, FFrameRate InSampleRate, FName InRetargetSource, const TArray< FTransform > &InRetargetTransforms, EAnimInterpolationType InInterpolationType=EAnimInterpolationType::Linear)
Definition IAnimationDataModel.h:26