UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MeshIndexUtil.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Set.h"
9#include "HAL/Platform.h"
10#include "IndexTypes.h"
12
13namespace UE
14{
15namespace Geometry
16{
24
25
33
34
42 template<typename OverlayType, typename EnumeratorType, typename OutputSetType>
44
45
46
51 GEOMETRYCORE_API FIndex2i FindVertexEdgesInTriangle(const FDynamicMesh3& Mesh, int32 TriangleID, int32 VertexID);
52
53
57 GEOMETRYCORE_API int32 FindSharedEdgeInTriangles(const FDynamicMesh3& Mesh, int32 Triangle0, int32 Triangle1);
58
59
63 template<typename EnumeratorType, typename SetType>
64 void CollectVertexPositions(const FDynamicMesh3& Mesh, EnumeratorType Enumeration, SetType& Output);
65
66
72 template<typename TrisConnectedPredicate>
73 FIndex3i FindNextAdjacentTriangleAroundVtx(const FDynamicMesh3* Mesh,
76
83 const FDynamicMesh3* Mesh,
84 int32 VertexID,
87
94 const FDynamicMesh3* Mesh,
95 int32 VertexID,
98
99}
100}
101
102
103
104// implementations of functions declared above
105
106namespace UE
107{
108namespace Geometry
109{
110
111template<typename EnumeratorType, typename SetType>
113{
114 for (int32 vid : Enumeration)
115 {
116 if (Mesh.IsVertex(vid))
117 {
118 Output.Add(Mesh.GetVertex(vid));
119 }
120 }
121}
122
123
124template<typename TrisConnectedPredicate>
128{
129 check(Mesh);
130
131 // find neigbour edges and tris for triangle
132 FIndex3i TriEdges = Mesh->GetTriEdges(FromTriangleID);
134 for (int32 j = 0; j < 3; ++j)
135 {
136 FIndex2i EdgeT = Mesh->GetEdgeT(TriEdges[j]);
137 TriNbrTris[j] = (EdgeT.A == FromTriangleID) ? EdgeT.B : EdgeT.A;
138 }
139
140 // Search for the neighbour tri that is not PrevTriangleID, and is also connected to VertexID.
141 // This is our next triangle around the ring
142 for (int32 j = 0; j < 3; ++j)
143 {
144 if (TriNbrTris[j] != PrevTriangleID && Mesh->IsTriangle(TriNbrTris[j]))
145 {
146 FIndex3i TriVerts = Mesh->GetTriangle(TriNbrTris[j]);
147 if (TriVerts.A == VertexID || TriVerts.B == VertexID || TriVerts.C == VertexID)
148 {
149 // test if predicate allows this connection
151 {
152 break;
153 }
154 return FIndex3i(TriNbrTris[j], TriEdges[j], j);
155 }
156 }
157 }
158
160}
161
162
163
164template<typename OverlayType, typename EnumeratorType, typename OutputSetType>
166{
167 for (int32 TriangleID : TriangleEnumeration)
168 {
169 if ( Overlay->IsSetTriangle(TriangleID) )
170 {
171 FIndex3i TriElements = Overlay->GetTriangle(TriangleID);
175 }
176 }
177}
178
179
180
181}
182}
#define check(expr)
Definition AssertionMacros.h:314
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
Definition DynamicMesh3.h:108
constexpr int InvalidID
Definition IndexTypes.h:13
GEOMETRYCORE_API bool SplitInteriorVertexTrianglesIntoSubsets(const FDynamicMesh3 *Mesh, int32 VertexID, int32 SplitEdgeID0, int32 SplitEdgeID1, TArray< int32 > &TriangleSet0, TArray< int32 > &TriangleSet1)
Definition MeshIndexUtil.cpp:164
void CollectVertexPositions(const FDynamicMesh3 &Mesh, EnumeratorType Enumeration, SetType &Output)
Definition MeshIndexUtil.h:112
GEOMETRYCORE_API FIndex2i FindVertexEdgesInTriangle(const FDynamicMesh3 &Mesh, int32 TriangleID, int32 VertexID)
Definition MeshIndexUtil.cpp:71
GEOMETRYCORE_API void TriangleToVertexIDs(const FDynamicMesh3 *Mesh, TConstArrayView< int > TriangleIDs, TArray< int > &VertexIDsOut)
Definition MeshIndexUtil.cpp:8
GEOMETRYCORE_API bool SplitBoundaryVertexTrianglesIntoSubsets(const FDynamicMesh3 *Mesh, int32 VertexID, int32 SplitEdgeID, TArray< int32 > &TriangleSet0, TArray< int32 > &TriangleSet1)
Definition MeshIndexUtil.cpp:109
GEOMETRYCORE_API int32 FindSharedEdgeInTriangles(const FDynamicMesh3 &Mesh, int32 Triangle0, int32 Triangle1)
Definition MeshIndexUtil.cpp:90
void TrianglesToOverlayElements(const OverlayType *Overlay, EnumeratorType TriangleEnumeration, OutputSetType &ElementsOut)
Definition MeshIndexUtil.h:165
FIndex3i FindNextAdjacentTriangleAroundVtx(const FDynamicMesh3 *Mesh, int32 VertexID, int32 FromTriangleID, int32 PrevTriangleID, TrisConnectedPredicate TrisConnectedTest)
Definition MeshIndexUtil.h:125
GEOMETRYCORE_API void VertexToTriangleOneRing(const FDynamicMesh3 *Mesh, TConstArrayView< int > VertexIDs, TSet< int > &TriangleIDsOut)
Definition MeshIndexUtil.cpp:53
Definition AdvancedWidgetsModule.cpp:13
Definition IndexTypes.h:27
int B
Definition IndexTypes.h:32
Definition IndexTypes.h:158