4 #include "DatasmithDefinitions.h"
6 #include "Containers/Array.h"
7 #include "Containers/UnrealString.h"
8 #include "Math/Vector.h"
11 struct FMeshDescription;
17 static void SanitizeNameInplace(FString& InString);
18 static FString SanitizeName(FString InString);
19 static FString SanitizeObjectName(FString InString);
20 static FString SanitizeFileName(FString InString);
22 static float GetEnterpriseVersionAsFloat();
23 static int32 GetEnterpriseVersionAsInt();
24 static FString GetEnterpriseVersionAsString();
27 static float GetDatasmithFormatVersionAsFloat();
28 static int32 GetDatasmithFormatVersionAsInt();
29 static FString GetDatasmithFormatVersionAsString();
32 static const TCHAR* GetFileExtension();
35 static const TCHAR* GetLongAppName();
37 static const TCHAR* GetShortAppName();
40 static double AreaTriangle3D(FVector v0, FVector v1, FVector v2);
42 enum class EModelCoordSystem : uint8
50 template<
typename VecType>
51 static FVector ConvertVector(EModelCoordSystem ModelCoordSys,
const VecType& V)
53 switch (ModelCoordSys)
55 case EModelCoordSystem::YUp_LeftHanded:
56 return FVector(V[2], V[0], V[1]);
58 case EModelCoordSystem::YUp_RightHanded:
59 return FVector(-V[2], V[0], V[1]);
61 case EModelCoordSystem::ZUp_RightHanded:
62 return FVector(-V[0], V[1], V[2]);
64 case EModelCoordSystem::ZUp_LeftHanded:
66 return FVector(V[0], V[1], V[2]);
70 FTransform
static ConvertTransform(EModelCoordSystem SourceCoordSystem,
const FTransform& LocalTransform);
72 FMatrix
static GetSymmetricMatrix(
const FVector& Origin,
const FVector& Normal);
82 static bool ToRawMesh(
const FDatasmithMesh& Mesh, FRawMesh& RawMesh,
bool bValidateRawMesh =
true);
83 static bool ToMeshDescription(
FDatasmithMesh& DsMesh, FMeshDescription& MeshDescription);
92 static bool IsUVChannelValid(
const FDatasmithMesh& DsMesh,
const int32 Channel);
95 enum class EDSTextureUtilsError : int32
102 FreeImageNotFound = -5,
113 enum class EDSResizeTextureMode
124 static bool CalculateTextureHash(
const TSharedPtr<class IDatasmithTextureElement>& TextureElement);
125 static void CalculateTextureHashes(
const TSharedPtr<class IDatasmithScene>& Scene);
132 enum class ETransformChannelComponents : uint8
140 ENUM_CLASS_FLAGS(ETransformChannelComponents);
146 static ETransformChannelComponents GetChannelTypeComponents(EDatasmithTransformChannels Channels, EDatasmithTransformType TransformType);
149 static EDatasmithTransformChannels SetChannelTypeComponents(ETransformChannelComponents Components, EDatasmithTransformType TransformType);
155 static TArray<TSharedPtr<class IDatasmithCameraActorElement>> GetAllCameraActorsFromScene(
const TSharedPtr<class IDatasmithScene>& Scene);
156 static TArray<TSharedPtr<class IDatasmithLightActorElement>> GetAllLightActorsFromScene(
const TSharedPtr<class IDatasmithScene>& Scene);
157 static TArray<TSharedPtr<class IDatasmithMeshActorElement>> GetAllMeshActorsFromScene(
const TSharedPtr<class IDatasmithScene>& Scene);
158 static TArray<TSharedPtr<class IDatasmithCustomActorElement>> GetAllCustomActorsFromScene(
const TSharedPtr<class IDatasmithScene>& Scene);
160 using TActorHierarchy = TArray<TSharedPtr<class IDatasmithActorElement>, TInlineAllocator<8>>;
161 static bool FindActorHierarchy(
const IDatasmithScene* Scene,
const TSharedPtr<IDatasmithActorElement>& ToFind, TActorHierarchy& OutHierarchy);
163 static bool IsMaterialIDUsedInScene(
const TSharedPtr<class IDatasmithScene>& Scene,
const TSharedPtr<class IDatasmithMaterialIDElement>& MaterialElement);
164 static bool IsPostProcessUsedInScene(
const TSharedPtr<class IDatasmithScene>& Scene,
const TSharedPtr<class IDatasmithPostProcessElement>& PostProcessElement);
183 FString GenerateUniqueName(
const FString& BaseName);
189 virtual void AddExistingName(
const FString& Name) = 0;
195 virtual void RemoveExistingName(
const FString& Name) = 0;
205 virtual bool Contains(
const FString& Name) = 0;
208 TMap<FString, int32> FrequentlyUsedNames;
217 void Reserve( int32 NumberOfName ) { KnownNames.Reserve(NumberOfName); }
223 virtual bool Contains(
const FString& Name)
override {
return KnownNames.Contains(Name); }
226 TSet<FString> KnownNames;
236 static void GetRotation(
const FTransform& InTransform, FQuat& OutRotation)
238 OutRotation = InTransform.GetRotation();
243 if (fabs(OutRotation.X) < 0.005) OutRotation.X = 0;
244 if (fabs(OutRotation.Y) < 0.005) OutRotation.Y = 0;
245 if (fabs(OutRotation.Z) < 0.005) OutRotation.Z = 0;
246 if (fabs(OutRotation.W) > 0.999) OutRotation.W = 1;
247 OutRotation.Normalize();