18template <
typename SPLINETYPE>
class UE_EXPERIMENTAL(5.7,
"") TMultiSpline;
24template <
typename SPLINETYPE>
41 FChildSpline() =
default;
44 FChildSpline(
const FChildSpline&
Other)
45 : MappingRangeSpace(
Other.MappingRangeSpace)
46 , MappingRange(
Other.MappingRange)
51 Spline =
Other.Spline->Clone();
56 FChildSpline(FChildSpline&&
Other) =
default;
59 FChildSpline& operator=(
const FChildSpline&
Other)
63 MappingRangeSpace =
Other.MappingRangeSpace;
64 MappingRange =
Other.MappingRange;
69 Spline =
Other.Spline->Clone();
80 FChildSpline& operator=(FChildSpline&&
Other) =
default;
90 Ar << MappingRangeSpace;
91 Ar << MappingRange.Min;
92 Ar << MappingRange.Max;
161 switch(MappingRangeSpace)
176 return MappingRangeSpace;
228 return FString::Printf(
TEXT(
"MultiSpline.%s"), *SplineType::GetSplineTypeName());
254 for (
FName& Name : AttributeNames)
313 template <
typename ImplType>
332 UE_LOG(
LogSpline,
Warning,
TEXT(
"Failed to fetch attribute channel '%s': Channel exists with implementation type '%s', but requested type is '%s'."),
344 template <
typename AttrType>
360 UE_LOG(
LogSpline,
Warning,
TEXT(
"Failed to fetch attribute channel '%s': Channel already exists with type '%s', but requested type is '%s'."),
375 Children.GetKeys(ChannelNames);
385 template <
typename AttrType>
391 for (
auto& Pair : Children)
393 if (Pair.Value.Spline.IsValid() &&
394 Pair.Value.Spline->GetValueTypeName() == TypeName)
396 ChannelNames.
Add(Pair.Key);
411 return Children.Remove(Name) > 0;
422 template <
typename AttrType>
426 if (Children.Contains(DestName))
468 FChildSpline&
DestChild = Children[DestName];
472 const FChildSpline&
SourceChild = *Children.Find(SourceName);
487 if (
const FChildSpline*
Child = Children.Find(Name))
503 if (
const FChildSpline*
Child = Children.Find(Name))
518 if (
const FChildSpline*
Child = Children.Find(Name))
533 template <
typename ImplType>
537 using AttrType =
typename ImplType::ValueType;
546 TypeId = ImplType::GetStaticTypeId();
547 FString
ImplName = ImplType::GetSplineTypeName();
573 template <
typename AttrSplineType>
580 if (Pair.Value.Spline->GetTypeId() == AttrSplineType::GetStaticTypeId())
589 template <
typename AttrType>
612 if (
const FChildSpline* Channel = Children.Find(Name))
614 Channel->Spline->Clear();
627 return Children.Contains(Name);
636 template <
typename AttrType>
661 FChildSpline*
Child = Children.Find(Name);
667 Child->MappingRange = Range;
680 template <
typename AttrType>
681 bool CreateAttributeChannelInternal(
const FName& Name,
const FString&
ImplName)
684 if (Children.Contains(Name))
695 *
ImplName, *TSplineValueTypeTraits<AttrType>::Name);
703 UE_LOG(
LogSpline,
Error,
TEXT(
"Failed to create spline of type '%s'/'%s' (ID: 0x%08X) for attribute channel '%s'."),
704 *
ImplName, *TSplineValueTypeTraits<AttrType>::Name, TypeId, *Name.ToString());
709 if (
NewSpline->GetValueTypeName() != TSplineValueTypeTraits<AttrType>::Name)
712 *TSplineValueTypeTraits<AttrType>::Name, *
NewSpline->GetValueTypeName());
717 FChildSpline&
Child = Children.Add(Name);
#define ensureAlways( InExpression)
Definition AssertionMacros.h:466
bool bSuccess
Definition ConvexDecomposition3.cpp:819
#define UE_EXPERIMENTAL(Version, Message)
Definition CoreMiscDefines.h:369
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
virtual int64 Tell()
Definition Archive.h:149
virtual void Seek(int64 InPos)
Definition Archive.h:1753
Definition NameTypes.h:617
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition UnrealString.h.inl:34
Definition UniquePtr.h:107
uint32 IdType
Definition SplineTypeId.h:33
static constexpr IdType GenerateTypeId(const TCHAR *ImplName, const TCHAR *ValueTypeName)
Definition SplineTypeId.h:43
static TypeId GetTypeId(const FString &ImplName, const FString &ValueTypeName)
Definition SplineTypeRegistry.h:173
static bool RegisterType(TypeId TypeId, const FString &ImplName, const FString &ValueTypeName, FactoryFunction Factory)
Definition SplineTypeRegistry.h:42
static TUniquePtr< ISplineInterface > CreateSpline(TypeId TypeId)
Definition SplineTypeRegistry.h:90
Definition SplineInterfaces.h:35
Definition MultiSpline.h:28
virtual void Clear() override
Definition MultiSpline.h:273
TArray< FName > GetAttributeChannelNamesByValueType() const
Definition MultiSpline.h:590
virtual bool IsEqual(const ISplineInterface *OtherSpline) const override
Definition MultiSpline.h:283
static const FSplineTypeId::IdType & GetStaticTypeId()
Definition MultiSpline.h:213
bool SetAttributeChannelRange(FName Name, const FInterval1f &Range, EMappingRangeSpace RangeSpace)
Definition MultiSpline.h:659
SplineType & GetSpline()
Definition MultiSpline.h:236
TArray< FName > GetAttributeChannelNamesOfType() const
Definition MultiSpline.h:386
typename TSplineWrapper< SPLINETYPE >::SplineType SplineType
Definition MultiSpline.h:210
bool ClearAttributeChannel(const FName &Name)
Definition MultiSpline.h:610
float MapParameterFromChildSpace(FName Name, float Parameter) const
Definition MultiSpline.h:501
ImplType * CreateAttributeChannel(const FName &Name)
Definition MultiSpline.h:534
bool CloneAttributeChannel(const FName &SourceName, const FName &DestName)
Definition MultiSpline.h:423
bool RemoveAttributeChannel(const FName &Name)
Definition MultiSpline.h:409
virtual FString GetImplementationName() const override
Definition MultiSpline.h:231
virtual bool Serialize(FArchive &Ar) override
Definition MultiSpline.h:294
TArray< FName > GetAttributeChannelNamesBySplineType() const
Definition MultiSpline.h:574
float MapParameterToChildSpace(FName Name, float Parameter) const
Definition MultiSpline.h:485
virtual bool operator==(const TMultiSpline< SplineType > &Other) const
Definition MultiSpline.h:239
virtual FSplineTypeId::IdType GetTypeId() const override
Definition MultiSpline.h:221
bool HasAttributeChannel(const FName &Name) const
Definition MultiSpline.h:625
FInterval1f GetMappedChildSpace(FName Name) const
Definition MultiSpline.h:516
ImplType * GetTypedAttributeChannel(FName Name) const
Definition MultiSpline.h:314
AttrType EvaluateAttribute(const FName &Name, float Parameter) const
Definition MultiSpline.h:637
static FString GetSplineTypeName()
Definition MultiSpline.h:226
TSplineWrapper< SPLINETYPE >::ValueType ValueType
Definition MultiSpline.h:211
const SplineType & GetSpline() const
Definition MultiSpline.h:237
TSplineInterface< AttrType > * GetAttributeChannel(FName Name) const
Definition MultiSpline.h:345
TArray< FName > GetAllAttributeChannelNames() const
Definition MultiSpline.h:372
EMappingRangeSpace
Definition MultiSpline.h:31
Definition SplineTypeRegistry.h:236
Definition SplineInterfaces.h:92
ValueType Evaluate(float Parameter) const
Definition SplineInterfaces.h:117
virtual void Clear() override
Definition Spline.h:32
SPLINETYPE SplineType
Definition Spline.h:26
virtual FInterval1f GetParameterSpace() const override
Definition Spline.h:48
SplineType::ValueType ValueType
Definition Spline.h:27
TInterval1< float > FInterval1f
Definition BoxTypes.h:241
Version
Definition NNEModelData.cpp:15
Definition AdvancedWidgetsModule.cpp:13
Definition SplineTypeId.h:21
static TInterval1< float > Empty()
Definition BoxTypes.h:34