UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EdgeLoop.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Port of geometry3cpp EdgeLoop
4
5#pragma once
6
8#include "Util/IndexUtil.h"
9
10namespace UE
11{
12namespace Geometry
13{
14
19{
20public:
23
28
31
33 bool bBowtiesCalculated = false;
34
36 {
37 Mesh = nullptr;
38 }
39
41 {
42 Mesh = mesh;
43 }
44
48 FEdgeLoop(const FDynamicMesh3* mesh, const TArray<int>& vertices, const TArray<int> & edges)
49 {
50 Mesh = mesh;
51 Vertices = vertices;
52 Edges = edges;
53 }
54
55
59 GEOMETRYCORE_API void Initialize(const FDynamicMesh3* mesh, const TArray<int>& vertices, const TArray<int> & edges, const TArray<int>* BowtieVerticesIn = nullptr);
60
66
77
78
79
87
100
101
102
103
110
111
116
120 int GetVertexCount() const
121 {
122 return Vertices.Num();
123 }
124
128 int GetEdgeCount() const
129 {
130 return Edges.Num();
131 }
132
136 inline FVector3d GetVertex(int LoopIndex) const
137 {
138 return Mesh->GetVertex(Vertices[LoopIndex]);
139 }
140
144 inline FVector3d GetPrevVertex(int32 LoopIndex) const
145 {
146 return Mesh->GetVertex(Vertices[ (LoopIndex == 0) ? (Vertices.Num()-1) : (LoopIndex-1) ]);
147 }
148
152 inline FVector3d GetNextVertex(int32 LoopIndex) const
153 {
154 return Mesh->GetVertex(Vertices[ (LoopIndex + 1) % Vertices.Num() ]);
155 }
156
157
158
163
167 template<typename VecType>
169 {
170 int NumV = Vertices.Num();
171 for (int i = 0; i < NumV; ++i)
172 {
173 VecType Pos = Mesh->GetVertex(Vertices[i]);
174 VerticesOut.Add(Pos);
175 }
176 }
177
178
185
186
190 void Reverse()
191 {
194 }
195
196
200 GEOMETRYCORE_API bool IsInternalLoop() const;
201
202
207 GEOMETRYCORE_API bool IsBoundaryLoop(const FDynamicMesh3* TestMesh = nullptr) const;
208
209
213 GEOMETRYCORE_API int FindVertexIndex(int VertexID) const;
214
215
220
221
222
228
229
230
231
239
240};
241
242
243//
244// Utility functions for converting/processing edge loops
245//
246
260 TFunctionRef<int(int EdgeID, int TriangleA, int TriangleB)> SelectEdgeTriangleFunc,
262
269
278
279
280
281} // end namespace UE::Geometry
282} // end namespace UE
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
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition AssetRegistryState.h:50
Definition DynamicMesh3.h:108
FVector3d GetVertex(int VertexID) const
Definition DynamicMesh3.h:736
Definition EdgeLoop.h:19
void GetVertices(TArray< VecType > &VerticesOut) const
Definition EdgeLoop.h:168
GEOMETRYCORE_API bool SetCorrectOrientation()
Definition EdgeLoop.cpp:95
TArray< int > BowtieVertices
Definition EdgeLoop.h:30
bool InitializeFromVertices(const FDynamicMesh3 *MeshIn, const TArray< int > &VerticesIn, bool bAutoOrient=true)
Definition EdgeLoop.h:95
static GEOMETRYCORE_API void VertexLoopToEdgeLoop(const FDynamicMesh3 *Mesh, const TArray< int > &VertexLoop, TArray< int > &OutEdgeLoop)
Definition EdgeLoop.cpp:241
int GetEdgeCount() const
Definition EdgeLoop.h:128
void SetBowtieVertices(const TArray< int > &Bowties)
Definition EdgeLoop.h:105
GEOMETRYCORE_API bool IsBoundaryLoop(const FDynamicMesh3 *TestMesh=nullptr) const
Definition EdgeLoop.cpp:134
GEOMETRYCORE_API bool InitializeFromVertices(const TArray< int > &VerticesIn, bool bAutoOrient=true)
Definition EdgeLoop.cpp:41
TArray< int > Vertices
Definition EdgeLoop.h:25
GEOMETRYCORE_API bool CheckValidity(EValidityCheckFailMode FailMode=EValidityCheckFailMode::Check) const
Definition EdgeLoop.cpp:185
GEOMETRYCORE_API bool IsInternalLoop() const
Definition EdgeLoop.cpp:120
void Reverse()
Definition EdgeLoop.h:190
const FDynamicMesh3 * Mesh
Definition EdgeLoop.h:22
FEdgeLoop()
Definition EdgeLoop.h:35
GEOMETRYCORE_API void CalculateBowtieVertices()
Definition EdgeLoop.cpp:68
GEOMETRYCORE_API FAxisAlignedBox3d GetBounds() const
Definition EdgeLoop.cpp:83
FVector3d GetNextVertex(int32 LoopIndex) const
Definition EdgeLoop.h:152
FVector3d GetPrevVertex(int32 LoopIndex) const
Definition EdgeLoop.h:144
GEOMETRYCORE_API int FindVertexIndex(int VertexID) const
Definition EdgeLoop.cpp:150
FVector3d GetVertex(int LoopIndex) const
Definition EdgeLoop.h:136
FEdgeLoop(const FDynamicMesh3 *mesh)
Definition EdgeLoop.h:40
GEOMETRYCORE_API int FindNearestVertexIndex(const FVector3d &QueryPoint) const
Definition EdgeLoop.cpp:164
FEdgeLoop(const FDynamicMesh3 *mesh, const TArray< int > &vertices, const TArray< int > &edges)
Definition EdgeLoop.h:48
TArray< int > Edges
Definition EdgeLoop.h:27
void InitializeFromEdges(const FDynamicMesh3 *MeshIn, const TArray< int > &EdgesIn)
Definition EdgeLoop.h:72
GEOMETRYCORE_API void InitializeFromEdges(const TArray< int > &EdgesIn)
Definition EdgeLoop.cpp:21
int GetVertexCount() const
Definition EdgeLoop.h:120
bool bBowtiesCalculated
Definition EdgeLoop.h:33
UE_REWRITE void Reverse(T(&Array)[ArraySize])
Definition Reverse.h:28
GEOMETRYCORE_API bool ConvertLoopToTriOrderedEdgeLoop(const FDynamicMesh3 &Mesh, const TArray< int32 > &VertexLoop, const TArray< int32 > &EdgeLoop, TFunctionRef< int(int EdgeID, int TriangleA, int TriangleB)> SelectEdgeTriangleFunc, TArray< FMeshTriOrderedEdgeID > &TriOrderedEdgesLoopOut)
EValidityCheckFailMode
Definition GeometryTypes.h:72
GEOMETRYCORE_API bool ConvertTriOrderedEdgeLoopToLoop(const FDynamicMesh3 &Mesh, const TArray< FMeshTriOrderedEdgeID > &TriOrderedEdgesLoopOut, TArray< int32 > &VertexLoop, TArray< int32 > *EdgeLoop=nullptr)
Definition EdgeLoop.cpp:298
Definition AdvancedWidgetsModule.cpp:13