FVector UAnimGraphNode_SkeletalControlBase::ConvertCSVectorToBoneSpace(const USkeletalMeshComponent* SkelComp, FVector& InCSVector, FA2CSPose& MeshBases, const FName& BoneName, const EBoneControlSpace Space) { FVector OutVector = InCSVector; if (MeshBases.IsValid()) { int32 MeshBoneIndex = SkelComp->GetBoneIndex(BoneName); switch (Space) { // World Space, no change in preview window case BCS_WorldSpace: case BCS_ComponentSpace: // Component Space, no change. break; case BCS_ParentBoneSpace: { const int32 ParentIndex = MeshBases.GetParentBoneIndex(MeshBoneIndex); if (ParentIndex != INDEX_NONE) { FTransform ParentTM = MeshBases.GetComponentSpaceTransform(ParentIndex); OutVector = ParentTM.InverseTransformVector(InCSVector); } } break; case BCS_BoneSpace: { FTransform BoneTM = MeshBases.GetComponentSpaceTransform(MeshBoneIndex); OutVector = BoneTM.InverseTransformVector(InCSVector); } break; } } return OutVector; }