UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Topomaker.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "Core/Types.h"
5
6#ifdef CADKERNEL_DEV
7#include "Topo/TopomakerReport.h"
8#endif
9
10namespace UE::CADKernel
11{
12
13class FModel;
14class FSession;
15class FShell;
16class FTopologicalEdge;
17class FTopologicalFace;
18class FTopologicalVertex;
19
20enum class ESewOption : uint8
21{
22 None = 0x00u, // No flags.
23
24 ForceJoining = 0x01u,
25 RemoveThinFaces = 0x02u,
27
28 All = 0x07u
29};
30
32
33namespace SewOption
34{
35
37{
39
41 {
43 }
44
46 {
48 }
49
51 {
53 }
54
55 return Option;
56}
57
58}
59
60namespace TopomakerTools
61{
62
68
69}
70
83
84
86{
87
88protected:
89
91
94
95#ifdef CADKERNEL_DEV
96 FTopomakerReport Report;
97#endif
98
99public:
100
104
105 void SetTolerance(const FTopomakerOptions Options)
106 {
107 SewOptions = Options.SewOptions;
108 Tolerance = Options.Tolerance;
109 ForceJoinFactor = Options.ForceJoinFactor;
110
111 SewTolerance = Tolerance * UE_DOUBLE_SQRT_2;
112
113 // StartVertex (SV) is linked to TwinStartVertex (TSV), the max distance between vertices is SewTolerance
114 // EndVertex (EV) is linked to TwinEndVertex (TEV), the max distance between vertices is SewTolerance
115 //
116 // * TSV * TEV
117 // SV *-----------* EV
118 // So the max length is 2*SewTolerance
119 EdgeLengthTolerance = SewTolerance * 2.;
120
121 SewToleranceToForceJoin = Tolerance * ForceJoinFactor;
122 LargeEdgeLengthTolerance = SewToleranceToForceJoin * 2.;
123
124 ThinFaceWidth = Tolerance * ForceJoinFactor * 0.5;
125 }
126
127 void Sew();
128
132 void SplitIntoConnectedShells();
133
134 void OrientShells();
135
139 void UnlinkNonManifoldVertex();
140
144 void UnlinkFromOther();
145
146 void RemoveThinFaces();
147
152 void DeleteNonmanifoldLink();
153
154#ifdef CADKERNEL_DEV
155 void PrintSewReport()
156 {
157 Report.PrintSewReport();
158 }
159
161 {
162 Report.PrintRemoveThinFacesReport();
163 }
164#endif
165
166private:
167
172 void InitFaces();
173
174 void EmptyShells();
175
176 void RemoveEmptyShells();
177
178 void RemoveDuplicatedFaces();
179
183 void GetVertices(TArray<FTopologicalVertex*>& Vertices);
184
188 void GetBorderVertices(TArray<FTopologicalVertex*>& BorderVertices);
189
191 void RemoveIsolatedEdges(); // Useful ???
192
193 void SetSelfConnectedEdgeDegenerated(TArray<FTopologicalVertex*>& Vertices);
194
212 void MergeUnconnectedSuccessiveEdges();
213
214 void SetToProcessMarkerOfFaces();
215 void ResetMarkersOfFaces();
216
217private:
218
219 ESewOption SewOptions;
220
221 double Tolerance;
222 double ForceJoinFactor;
223
224 double SewTolerance;
225 double SewToleranceToForceJoin; // SewTolerance x ForceJoinFactor;
226
227 double EdgeLengthTolerance; // 2x SewTolerance
228 double LargeEdgeLengthTolerance; // 2x SewToleranceToForceJoin
229
230 double ThinFaceWidth;
231};
232
233} // namespace UE::CADKernel
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define UE_DOUBLE_SQRT_2
Definition UnrealMathUtility.h:170
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Array.h:670
Definition SharedPointer.h:692
Definition Session.h:18
Definition Topomaker.h:86
void SetTolerance(const FTopomakerOptions Options)
Definition Topomaker.h:105
TArray< FShell * > Shells
Definition Topomaker.h:92
FSession & Session
Definition Topomaker.h:90
TArray< TSharedPtr< FTopologicalFace > > Faces
Definition Topomaker.h:93
void MergeCoincidentVertices(TArray< FTopologicalVertex * > &VerticesToMerge, double Tolerance)
Definition Topomaker.cpp:50
Definition CADEntity.cpp:23
ESewOption
Definition Topomaker.h:21
Definition Topomaker.h:72
double Tolerance
Definition Topomaker.h:74
double ForceJoinFactor
Definition Topomaker.h:75
FTopomakerOptions(ESewOption InSewOptions, double InTolerance, double InForceJoinFactor)
Definition Topomaker.h:77
ESewOption SewOptions
Definition Topomaker.h:73