UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DatasmithUtils.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Containers/Array.h"
6#include "Containers/Map.h"
7#include "Containers/Set.h"
10#include "HAL/CriticalSection.h"
11#include "HAL/PlatformCrt.h"
12#include "Math/Matrix.h"
13#include "Math/Transform.h"
14#include "Math/UnrealMathSSE.h"
15#include "Math/Vector.h"
16#include "Misc/EnumClassFlags.h"
18
19#include <stdint.h>
20
21#define UE_API DATASMITHCORE_API
22
23class FDatasmithMesh;
25class IDatasmithScene;
26struct FMeshDescription;
27struct FRawMesh;
28
30{
31public:
32 static UE_API void SanitizeNameInplace(FString& InString);
33 static UE_API FString SanitizeName(FString InString);
34 static UE_API FString SanitizeObjectName(FString InString);
35 static UE_API FString SanitizeFileName(FString InString);
36
38 static UE_API void SanitizeStringInplace(FString& InString);
39
41 static UE_API FString GetEnterpriseVersionAsString(bool bWithChangelist=false);
42
47
49 static UE_API const TCHAR* GetFileExtension();
50
60 static UE_API void GetCleanFilenameAndExtension(const FString& InFilePath, FString& OutFilename, FString& OutExtension);
61
63 static UE_API const TCHAR* GetLongAppName();
65 static UE_API const TCHAR* GetShortAppName();
66
68 static UE_API float AreaTriangle3D(const FVector3f& v0, const FVector3f& v1, const FVector3f& v2);
69
78
79 template<typename VecType>
81 {
82 switch (ModelCoordSys)
83 {
85 for (VecType& Vector : Array)
86 {
87 Vector.Set(Vector[2], Vector[0], Vector[1]);
88 }
89 break;
90
92 for (VecType& Vector : Array)
93 {
94 Vector.Set(-Vector[2], Vector[0], Vector[1]);
95 }
96 break;
97
99 for (VecType& Vector : Array)
100 {
101 Vector.Set(-Vector[0], Vector[1], Vector[2]);
102 }
103 break;
104
106 for (VecType& Vector : Array)
107 {
108 Vector.Set(Vector[0], -Vector[1], Vector[2]);
109 }
110 break;
111
113 default:
114 break;
115 }
116 }
117
118 template<typename VecType>
119 static VecType ConvertVector(EModelCoordSystem ModelCoordSys, const VecType& V)
120 {
121 switch (ModelCoordSys)
122 {
124 return VecType(V[2], V[0], V[1]);
125
127 return VecType(-V[2], V[0], V[1]);
128
130 return VecType(-V[0], V[1], V[2]);
131
133 return VecType(V[0], -V[1], V[2]);
134
136 default:
137 return VecType(V[0], V[1], V[2]);
138 }
139 }
140
142
143 template<typename Type>
145 {
146 using namespace UE::Math;
147 //Calculate symmetry matrix
148 //(Px, Py, Pz) = normal
149 // -Px*Px + Pz*Pz + Py*Py | - 2 * Px * Py | - 2 * Px * Pz
150 // - 2 * Py * Px | - Py*Py + Px*Px + Pz*Pz | - 2 * Py * Pz
151 // - 2 * Pz * Px | - 2 * Pz * Py | - Pz*Pz + Py*Py + Px*Px
152
153 TVector<Type> LocOrigin = Origin;
154
155 Type NormalXSqr = Normal.X * Normal.X;
156 Type NormalYSqr = Normal.Y * Normal.Y;
157 Type NormalZSqr = Normal.Z * Normal.Z;
158
161 TVector<Type> Axis0(-NormalXSqr + NormalZSqr + NormalYSqr, -2 * Normal.X * Normal.Y, -2 * Normal.X * Normal.Z);
162 TVector<Type> Axis1(-2 * Normal.Y * Normal.X, -NormalYSqr + NormalXSqr + NormalZSqr, -2 * Normal.Y * Normal.Z);
164 OSymmetricMatrix.SetAxes(&Axis0, &Axis1, &Axis2);
165
168
169 //Translate to 0, 0, 0
170 LocOrigin *= -1.;
171 SymmetricMatrix.SetOrigin(LocOrigin);
172
175
176 //Translate to original position
177 LocOrigin *= -1.;
180 OrigTranslation.SetOrigin(LocOrigin);
182
183 return SymmetricMatrix;
184 }
185};
186
188{
193 static bool ToRawMesh(const FDatasmithMesh& Mesh, FRawMesh& RawMesh, bool bValidateRawMesh = true);
194
195public:
197 {
198 Ignore, // do not generate a default UV. Conversion fails when no UV is available
199 GenerateBox, // generate a Box UV mapping on the resulting MeshDescription (see also FStaticMeshOperations::GenerateBoxUV)
200 };
202
209 static UE_API bool IsUVChannelValid(const FDatasmithMesh& DsMesh, const int32 Channel);
210
217
222};
223
225{
226 NoError = 0,
227 FileNotFound = -1,
228 InvalidFileType = -2,
229 FileReadIssue = -3,
230 InvalidData = -4,
232 FileNotSaved = -6,
233 ResizeFailed = -7,
234};
235
249
256
262{
263 None = 0x00,
264 X = 0x01,
265 Y = 0x02,
266 Z = 0x04,
267 All = X | Y | Z,
268};
270
280
302
310{
311public:
315
317
320
328
333 virtual void AddExistingName(const FString& Name) = 0;
334
339 virtual void RemoveExistingName(const FString& Name) = 0;
340
344 UE_API virtual void Clear();
345
346protected:
347
354 virtual bool Contains(const FString& Name) = 0;
355
356private:
357 TMap<FString, int32> FrequentlyUsedNames;
358 mutable FCriticalSection CriticalSection;
359};
360
365{
366public:
368
369 void Reserve( int32 NumberOfName ) { KnownNames.Reserve(NumberOfName); }
370
371 virtual void AddExistingName(const FString& Name) override { KnownNames.Add(Name); }
372 virtual void RemoveExistingName(const FString& Name) override { KnownNames.Remove(Name); }
373
374 virtual void Clear() override { Super::Clear(); KnownNames.Empty(); }
375
376protected:
377 virtual bool Contains(const FString& Name) override { return KnownNames.Contains(Name); }
378
379private:
380 TSet<FString> KnownNames;
381};
382
383#undef UE_API
@ Normal
Definition AndroidInputInterface.h:116
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
EDatasmithTransformType
Definition DatasmithDefinitions.h:390
EDatasmithTransformChannels
Definition DatasmithDefinitions.h:110
EDSTextureUtilsError
Definition DatasmithUtils.h:225
#define UE_API
Definition DatasmithUtils.h:21
EDSResizeTextureMode
Definition DatasmithUtils.h:243
ETransformChannelComponents
Definition DatasmithUtils.h:262
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition DatasmithUtils.h:272
static UE_API ETransformChannelComponents GetChannelTypeComponents(EDatasmithTransformChannels Channels, EDatasmithTransformType TransformType)
Definition DatasmithUtils.cpp:500
static UE_API EDatasmithTransformChannels SetChannelTypeComponents(ETransformChannelComponents Components, EDatasmithTransformType TransformType)
Definition DatasmithUtils.cpp:532
Definition DatasmithUtils.h:188
static UE_API void ExtractVertexPositions(const FMeshDescription &Mesh, TArray< FVector3f > &OutPositions)
Definition DatasmithUtils.cpp:461
static UE_API bool ToMeshDescription(FDatasmithMesh &DsMesh, FMeshDescription &MeshDescription, EUvGenerationPolicy UvGen=EUvGenerationPolicy::Ignore)
Definition DatasmithUtils.cpp:298
static UE_API void CreateDefaultUVsWithLOD(FDatasmithMesh &Mesh)
Definition DatasmithUtils.cpp:448
EUvGenerationPolicy
Definition DatasmithUtils.h:197
@ GenerateBox
Definition DatasmithUtils.h:199
@ Ignore
Definition DatasmithUtils.h:198
static UE_API bool IsUVChannelValid(const FDatasmithMesh &DsMesh, const int32 Channel)
Definition DatasmithUtils.cpp:369
Definition DatasmithMesh.h:14
Definition DatasmithUtils.h:282
static UE_API TArray< TSharedPtr< class IDatasmithCustomActorElement > > GetAllCustomActorsFromScene(const TSharedPtr< class IDatasmithScene > &Scene)
Definition DatasmithUtils.cpp:618
static UE_API bool IsMaterialIDUsedInScene(const TSharedPtr< class IDatasmithScene > &Scene, const TSharedPtr< class IDatasmithMaterialIDElement > &MaterialElement)
Definition DatasmithUtils.cpp:680
static UE_API TArray< TSharedPtr< class IDatasmithCameraActorElement > > GetAllCameraActorsFromScene(const TSharedPtr< class IDatasmithScene > &Scene)
Definition DatasmithUtils.cpp:582
static UE_API TArray< TSharedPtr< class IDatasmithMeshActorElement > > GetAllMeshActorsFromScene(const TSharedPtr< class IDatasmithScene > &Scene)
Definition DatasmithUtils.cpp:606
static UE_API TArray< TSharedPtr< class IDatasmithLightActorElement > > GetAllLightActorsFromScene(const TSharedPtr< class IDatasmithScene > &Scene)
Definition DatasmithUtils.cpp:594
static UE_API bool IsPostProcessUsedInScene(const TSharedPtr< class IDatasmithScene > &Scene, const TSharedPtr< class IDatasmithPostProcessElement > &PostProcessElement)
Definition DatasmithUtils.cpp:711
static UE_API bool FindActorHierarchy(const IDatasmithScene *Scene, const TSharedPtr< IDatasmithActorElement > &ToFind, TActorHierarchy &OutHierarchy)
Definition DatasmithUtils.cpp:654
static UE_API void CleanUpScene(TSharedRef< class IDatasmithScene > Scene, bool bRemoveUnused=false)
Definition DatasmithUtils.cpp:1570
Definition DatasmithUtils.h:251
static UE_API bool CalculateTextureHash(const TSharedPtr< class IDatasmithTextureElement > &TextureElement)
Definition DatasmithUtils.cpp:475
static UE_API void CalculateTextureHashes(const TSharedPtr< class IDatasmithScene > &Scene)
Definition DatasmithUtils.cpp:489
Definition DatasmithUtils.h:310
virtual UE_API void Clear()
Definition DatasmithUtils.cpp:1695
virtual ~FDatasmithUniqueNameProviderBase()=default
virtual bool Contains(const FString &Name)=0
virtual void RemoveExistingName(const FString &Name)=0
UE_API FDatasmithUniqueNameProviderBase * operator=(const FDatasmithUniqueNameProviderBase &Other)
Definition DatasmithUtils.cpp:1606
UE_API FString GenerateUniqueName(const FString &BaseName, int32 CharBudget=INT32_MAX)
Definition DatasmithUtils.cpp:1640
virtual void AddExistingName(const FString &Name)=0
Definition DatasmithUtils.h:365
virtual void RemoveExistingName(const FString &Name) override
Definition DatasmithUtils.h:372
virtual void Clear() override
Definition DatasmithUtils.h:374
virtual bool Contains(const FString &Name) override
Definition DatasmithUtils.h:377
virtual void AddExistingName(const FString &Name) override
Definition DatasmithUtils.h:371
void Reserve(int32 NumberOfName)
Definition DatasmithUtils.h:369
Definition DatasmithUtils.h:30
static UE_API void SanitizeStringInplace(FString &InString)
Definition DatasmithUtils.cpp:57
static UE_API float GetDatasmithFormatVersionAsFloat()
Definition DatasmithUtils.cpp:184
static UE_API int32 GetEnterpriseVersionAsInt()
Definition DatasmithUtils.cpp:166
static UE_API void GetCleanFilenameAndExtension(const FString &InFilePath, FString &OutFilename, FString &OutExtension)
Definition DatasmithUtils.cpp:147
static UE_API FString GetEnterpriseVersionAsString(bool bWithChangelist=false)
Definition DatasmithUtils.cpp:178
UE_API static FTransform ConvertTransform(EModelCoordSystem SourceCoordSystem, const FTransform &LocalTransform)
Definition DatasmithUtils.cpp:1701
static UE_API const TCHAR * GetLongAppName()
Definition DatasmithUtils.cpp:204
static UE_API FString GetDatasmithFormatVersionAsString()
Definition DatasmithUtils.cpp:194
static UE_API FString SanitizeObjectName(FString InString)
Definition DatasmithUtils.cpp:74
static UE_API float AreaTriangle3D(const FVector3f &v0, const FVector3f &v1, const FVector3f &v2)
Definition DatasmithUtils.cpp:214
static UE::Math::TMatrix< Type > GetSymmetricMatrix(const UE::Math::TVector< Type > &Origin, const UE::Math::TVector< Type > &Normal)
Definition DatasmithUtils.h:144
static UE_API const TCHAR * GetShortAppName()
Definition DatasmithUtils.cpp:209
static UE_API FString SanitizeName(FString InString)
Definition DatasmithUtils.cpp:68
static UE_API int32 GetDatasmithFormatVersionAsInt()
Definition DatasmithUtils.cpp:189
static UE_API void SanitizeNameInplace(FString &InString)
Definition DatasmithUtils.cpp:39
static UE_API const TCHAR * GetFileExtension()
Definition DatasmithUtils.cpp:199
static void ConvertVectorArray(EModelCoordSystem ModelCoordSys, TArray< VecType > &Array)
Definition DatasmithUtils.h:80
static VecType ConvertVector(EModelCoordSystem ModelCoordSys, const VecType &V)
Definition DatasmithUtils.h:119
EModelCoordSystem
Definition DatasmithUtils.h:71
static UE_API FString SanitizeFileName(FString InString)
Definition DatasmithUtils.cpp:136
Definition IDatasmithSceneElements.h:73
Definition IDatasmithSceneElements.h:1466
Definition RawMesh.Build.cs:6
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition ContainerAllocationPolicies.h:894
Definition Sphere.cpp:10
Definition MeshDescription.h:94
Definition RawMesh.h:39
Definition Matrix.h:43
void SetIdentity()
Definition Matrix.inl:48