21#if WITH_EDITORONLY_DATA
38 return(
Name ==
B.Name);
132 bool bOnlyOneRootAllowed;
137 static constexpr int32 BRANCH_CACHE_INVALID_INDEX = -2;
138 void InvalidateEndOfBranchCache()
const
140 CachedEndOfBranchIndicesRaw.
Init(BRANCH_CACHE_INVALID_INDEX, RawRefBonePose.
Num());
164 if(
Bone.ParentIndex > BoneIndex )
166 Bone.ParentIndex -= 1;
171 RawRefBonePose.
RemoveAt(BoneIndex, 1);
172 RawRefBoneInfo.
RemoveAt(BoneIndex, 1);
174 InvalidateEndOfBranchCache();
185 (((BoneIndex == 0) && (ParentIndex ==
INDEX_NONE))
186 || ((BoneIndex > 0) &&
BoneInfo.IsValidIndex(ParentIndex) && (ParentIndex < BoneIndex))));
193 RawRefBonePose[BoneIndex] =
BonePose;
204 checkSlow((RawRefBoneInfo.
Num() == RawRefBonePose.
Num()) && (RawRefBoneInfo.
Num() == RawNameToIndexMap.Num()));
208 RawNameToIndexMap.Add(
BoneInfo.Name, BoneIndex);
211 RawRefBonePose[BoneIndex].NormalizeRotation();
214 check(!bOnlyOneRootAllowed ||
243 return FinalRefBoneInfo.
Num();
249 return RawRefBoneInfo.
Num();
259 return FinalRefBoneInfo;
265 return FinalRefBonePose;
271 return RawRefBoneInfo;
277 return RawRefBonePose;
304 RawNameToIndexMap.Empty(
Size);
305 FinalNameToIndexMap.Empty(
Size);
313 checkSlow(FinalRefBoneInfo.
Num() == FinalNameToIndexMap.Num());
329 checkSlow(RawRefBoneInfo.
Num() == RawNameToIndexMap.Num());
344 return FinalRefBoneInfo[BoneIndex].Name;
349 return GetParentIndexInternal(BoneIndex, FinalRefBoneInfo);
354 return GetParentIndexInternal(BoneIndex, RawRefBoneInfo);
374 if (BoneIndex >= ParentBoneIndex)
402 if (ChildBoneIndex > ParentBoneIndex)
407 if (BoneIndex == ParentBoneIndex)
428 for(
int32 BoneIndex=NumBones-1; BoneIndex>=0; BoneIndex--)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define WITH_EDITORONLY_DATA
Definition CoreMiscDefines.h:24
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
uint32 Size
Definition VulkanMemory.cpp:4034
if(Failed) console_printf("Failed.\n")
Definition Archive.h:1208
Definition NameTypes.h:617
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void RemoveAt(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2083
bool Contains(const ComparisonType &Item) const
Definition Array.h:1518
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_NODEBUG UE_FORCEINLINE_HINT bool IsValidIndex(SizeType Index) const
Definition Array.h:1122
void Init(const ElementType &Element, SizeType Number)
Definition Array.h:3043
void Empty(SizeType Slack=0)
Definition Array.h:2273
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition UnrealString.h.inl:34
Definition Skeleton.h:295
const FName ParentIndex("ParentIndex")
Definition SkeletalMeshAttributes.h:33
U16 Index
Definition radfft.cpp:71
Definition ReferenceSkeleton.h:14
FName Name
Definition ReferenceSkeleton.h:16
friend FArchive & operator<<(FArchive &Ar, FMeshBoneInfo &F)
Definition ReferenceSkeleton.cpp:57
FMeshBoneInfo()
Definition ReferenceSkeleton.h:26
bool operator==(const FMeshBoneInfo &B) const
Definition ReferenceSkeleton.h:36
FMeshBoneInfo(const FName &InName, const FString &InExportName, int32 InParentIndex)
Definition ReferenceSkeleton.h:28
int32 ParentIndex
Definition ReferenceSkeleton.h:19
Definition ReferenceSkeleton.h:65
FReferenceSkeletonModifier(FReferenceSkeleton &InRefSkel, const USkeleton *InSkeleton)
Definition ReferenceSkeleton.h:70
ENGINE_API int32 FindBoneIndex(const FName &BoneName) const
Definition ReferenceSkeleton.cpp:47
ENGINE_API void UpdateRefPoseTransform(const int32 BoneIndex, const FTransform &BonePose)
Definition ReferenceSkeleton.cpp:20
ENGINE_API ~FReferenceSkeletonModifier()
Definition ReferenceSkeleton.cpp:15
ENGINE_API void Rename(const FName &InOldName, const FName &InNewName)
Definition ReferenceSkeleton.cpp:36
ENGINE_API int32 SetParent(const FName &InBoneName, const FName &InParentName, const bool bAllowMultipleRoots=false)
Definition ReferenceSkeleton.cpp:41
const FReferenceSkeleton & GetReferenceSkeleton() const
Definition ReferenceSkeleton.h:95
ENGINE_API const TArray< FMeshBoneInfo > & GetRefBoneInfo() const
Definition ReferenceSkeleton.cpp:52
Definition ReferenceSkeleton.h:100
int32 FindRawBoneIndex(const FName &BoneName) const
Definition ReferenceSkeleton.h:327
void Empty(int32 Size=0)
Definition ReferenceSkeleton.h:296
bool IsValidIndex(int32 Index) const
Definition ReferenceSkeleton.h:357
ENGINE_API FTransform GetBoneAbsoluteTransform(const int32 InBoneIndex) const
Definition ReferenceSkeleton.cpp:724
int32 GetNum() const
Definition ReferenceSkeleton.h:241
const TArray< FBoneIndexType > & GetRequiredVirtualBones() const
Definition ReferenceSkeleton.h:252
ENGINE_API int32 GetRawDirectChildBones(int32 ParentBoneIndex, TArray< int32 > &Children) const
Definition ReferenceSkeleton.cpp:904
TArray< FName > GetRawRefBoneNames() const
Definition ReferenceSkeleton.h:283
void GetRawChildrenIndicesRecursiveCached(const int32 BoneIndex, TArray< int32 > &OutChildren) const
Definition ReferenceSkeleton.cpp:752
ENGINE_API void GetRawBoneAbsoluteTransforms(TArray< FTransform > &OutAbsoluteTransforms) const
Definition ReferenceSkeleton.cpp:704
ENGINE_API void EnsureParentsExist(TArray< FBoneIndexType > &InOutBoneSortedArray) const
Definition ReferenceSkeleton.cpp:772
ENGINE_API void GetBoneAbsoluteTransforms(TArray< FTransform > &OutAbsoluteTransforms) const
Definition ReferenceSkeleton.cpp:709
ENGINE_API friend FArchive & operator<<(FArchive &Ar, FReferenceSkeleton &F)
Definition ReferenceSkeleton.cpp:909
ENGINE_API int32 GetDirectChildBones(int32 ParentBoneIndex, TArray< int32 > &Children) const
Definition ReferenceSkeleton.cpp:899
ENGINE_API void RebuildRefSkeleton(const USkeleton *Skeleton, bool bRebuildNameMap)
Definition ReferenceSkeleton.cpp:484
SIZE_T GetDataSize() const
Definition ReferenceSkeleton.cpp:641
FName GetBoneName(const int32 BoneIndex) const
Definition ReferenceSkeleton.h:342
void RemoveDuplicateBones(const UObject *Requester, TArray< FBoneIndexType > &DuplicateBones)
Definition ReferenceSkeleton.cpp:539
const TArray< FTransform > & GetRawRefBonePose() const
Definition ReferenceSkeleton.h:275
int32 GetRawParentIndex(const int32 BoneIndex) const
Definition ReferenceSkeleton.h:352
void GetRawChildrenIndicesCached(const int32 BoneIndex, TArray< int32 > &OutChildren) const
Definition ReferenceSkeleton.cpp:734
int32 FindBoneIndex(const FName &BoneName) const
Definition ReferenceSkeleton.h:311
const TMap< FName, int32 > & GetRawNameToIndexMap() const
Definition ReferenceSkeleton.h:280
int32 GetDepthBetweenBones(const int32 BoneIndex, const int32 ParentBoneIndex) const
Definition ReferenceSkeleton.h:372
bool IsValidRawIndex(int32 Index) const
Definition ReferenceSkeleton.h:362
int32 GetRawBoneNum() const
Definition ReferenceSkeleton.h:247
friend FReferenceSkeletonModifier
Definition ReferenceSkeleton.h:475
const TArray< FMeshBoneInfo > & GetRefBoneInfo() const
Definition ReferenceSkeleton.h:257
TArray< int32 > RemoveBonesByName(USkeleton *Skeleton, const TArray< FName > &BonesToRemove)
Definition ReferenceSkeleton.h:423
ENGINE_API void EnsureParentsExistAndSort(TArray< FBoneIndexType > &InOutBoneUnsortedArray) const
Definition ReferenceSkeleton.cpp:827
const TArray< FTransform > & GetRefBonePose() const
Definition ReferenceSkeleton.h:263
ENGINE_API FTransform GetRawBoneAbsoluteTransform(const int32 InRawBoneIndex) const
Definition ReferenceSkeleton.cpp:714
bool BoneIsChildOf(const int32 ChildBoneIndex, const int32 ParentBoneIndex) const
Definition ReferenceSkeleton.h:396
const TArray< FVirtualBoneRefData > & GetVirtualBoneRefData() const
Definition ReferenceSkeleton.h:254
int32 GetParentIndex(const int32 BoneIndex) const
Definition ReferenceSkeleton.h:347
FReferenceSkeleton(bool bInOnlyOneRootAllowed=true)
Definition ReferenceSkeleton.h:101
void RebuildNameToIndexMap()
Definition ReferenceSkeleton.cpp:617
const TArray< FMeshBoneInfo > & GetRawRefBoneInfo() const
Definition ReferenceSkeleton.h:269
Definition ReferenceSkeleton.h:46
int32 TargetRefSkelIndex
Definition ReferenceSkeleton.h:49
FVirtualBoneRefData(int32 InVBRefSkelIndex, int32 InSourceRefSkelIndex, int32 InTargetRefSkelIndex)
Definition ReferenceSkeleton.h:51
int32 VBRefSkelIndex
Definition ReferenceSkeleton.h:47
int32 SourceRefSkelIndex
Definition ReferenceSkeleton.h:48