UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshDescriptionWrapper.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "MeshUtilities.h"
6#if PLATFORM_DESKTOP
7
8#include "MeshDescription.h"
9#include "NaniteDefinitions.h"
10
11namespace UE::CADKernel::MeshUtilities
12{
14 {
15 public:
16 FMeshDescriptionWrapper(const FMeshExtractionContext& InContext, FMeshDescription& InMesh);
17
18 virtual void ClearMesh() override;
19 virtual bool ReserveNewTriangles(int32 AdditionalTriangleCount) override;
20 virtual bool SetVertices(TArray<FVector>&& Vertices) override;
21 virtual bool AddNewVertices(TArray<FVector>&& Vertices) override;
22 virtual bool AddTriangle(int32 GroupID, uint32 MaterialID, const FArray3i& VertexIndices, const TArrayView<FVector3f>& Normals, const TArrayView<FVector2f>& TexCoords) override;
23 virtual bool StartFaceTriangles(int32 TriangleCount, const TArray<FVector3f>& Normals, const TArray<FVector2f>& TexCoords) override;
24 virtual bool StartFaceTriangles(const TArrayView<FVector>& Normals, const TArrayView<FVector2d>& TexCoords) override;
25 virtual bool AddFaceTriangles(const TArray<FFaceTriangle>& FaceTriangles) override;
26 virtual bool AddFaceTriangle(const FFaceTriangle& FaceTriangle) override
27 {
29 }
30 virtual void EndFaceTriangles() override;
31
32 virtual void FinalizeMesh() override;
33 virtual void AddSymmetry() override;
34 virtual void RecomputeNullNormal() override;
35 virtual void OrientMesh() override;
36 virtual void ResolveTJunctions() override;
37
38 private:
39 template<typename VertexType>
40 struct TMeshDescEntity
41 {
42 union
43 {
44 struct
45 {
49 };
50
52 };
53
56 : A(ValA), B(ValB), C(ValC)
57 {}
58
59 VertexType& operator[](int Index)
60 {
61 return ABC[Index];
62 }
63
64 const VertexType& operator[](int Index) const
65 {
66 return ABC[Index];
67 }
68 };
69
72
74 {
76 {
77 return *PolygonGroupIDPtr;
78 }
79
81 {
82 FName ImportedSlotName = *LexToString(MaterialID);
83 LastPolygonGroupID = Mesh.CreatePolygonGroup();
86 }
87
88 return LastPolygonGroupID;
89 }
90
91 // bIsBoundary is only modified if an edge exists
92 FEdgeID FindEdge(const FVertexID& Start, const FVertexID& End, bool& bIsBoundary)
93 {
94 FEdgeID EdgeID = Mesh.GetVertexPairEdge(Start, End);
95 if (EdgeID != INDEX_NONE)
96 {
97 TArrayView<const FTriangleID> Triangles = Mesh.GetEdgeConnectedTriangleIDs(EdgeID);
98 bIsBoundary = Triangles.Num() < 2;
99 }
100
101 return EdgeID;
102 }
103
104 bool GetVertexInstances(const FArray3i& Vertices, FVertexInstanceID3& VertexInstances);
105
106 private:
111 TVertexInstanceAttributesRef<FVector3f> VertexInstanceNormals;
116 TPolygonAttributesRef<int32> PolygonAttributes;
118
119 bool bSelectiveExtraction = false;
122 TArray<FVertexID> VertexIDs;
124 TArray<FVector2f> TexCoords;
125
127 bool bIsFinalized = false;
128 };
129}
130#endif
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
const TCHAR * LexToString(EAnalyticsRecordEventMode Mode)
Definition IAnalyticsProvider.cpp:5
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition MeshAttributeArray.h:836
U16 Index
Definition radfft.cpp:71
Definition MeshTypes.h:150
Definition MeshDescription.h:94
Definition MeshTypes.h:236
Definition MeshTypes.h:90