UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
DynamicMeshEditor.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3// Port of geometry3Sharp MeshEditor
4
5#pragma once
6
9#include "EdgeLoop.h"
12#include "MeshAdapter.h"
13
14namespace UE
15{
16namespace Geometry
17{
18
19struct FDynamicSubmesh3;
20
61
62
63
64
71{
72public:
75
80
85
87 // Create and Remove Triangle Functions
89
100
101
124
140
151
152
160
161
171
172
180
181
197
214
225
232
233
234
240 GEOMETRYCORE_API void DisconnectTriangles(const TArray<int>& Triangles, bool bPreventBowties = true);
241
242
247
251 void SplitBowties(int VertexID, TArray<int32>* NewVertices = nullptr)
252 {
255 SplitBowtiesInternal(VertexID, Triangles, ContiguousGroupLengths, GroupIsLoop, NewVertices);
256 }
257
258private:
259 // Internal version of split bowties that takes some arrays for reusable storage
260 GEOMETRYCORE_API void SplitBowtiesInternal(int VertexID, TArray<int>& Triangles, TArray<int>& ContiguousGroupLengths, TArray<bool>& GroupIsLoop, TArray<int32>* NewVertices = nullptr);
261public:
262
267 {
268 SplitBowties(VertexID, &ResultOut.NewVertices);
269 }
270
275
293
308
316
317
324 GEOMETRYCORE_API int RemoveSmallComponents(double MinVolume, double MinArea = 0.0, int MinTriangleCount = 0);
325
326
335
336
338 // Normal utility functions
340
347
354
355
364
365
372
378 GEOMETRYCORE_API void SetTriangleNormals(const TArray<int>& Triangles, const FVector3f& Normal);
379
385 GEOMETRYCORE_API void SetTriangleNormals(const TArray<int>& Triangles);
386
391
392
394 // UV utility functions
396
397
408
422 float UVScaleFactor = 1.0f, const FVector2f& UVTranslation = FVector2f::Zero(), bool bShiftToOrigin = true, int32 UVLayerIndex = 0);
423
436 const FVector2f& UVScale = FVector2f::One(), const FVector2f& UVTranslation = FVector2f::Zero(), int UVLayerIndex = 0,
437 bool bShiftToOrigin = true, bool bNormalizeBeforeScaling = false);
438
444
452 GEOMETRYCORE_API void RescaleAttributeUVs(float UVScale = 1.0f, bool bWorldSpace = false, int UVLayerIndex = 0, TOptional<FTransformSRT3d> ToWorld = TOptional<FTransformSRT3d>());
453
454
456 // mesh element copying / duplication
458
459
468
477
485 GEOMETRYCORE_API int FindOrCreateDuplicateUV(int ElementID, int UVLayerIndex, FMeshIndexMappings& IndexMaps);
486
497
506
515
516
517
518
527 TFunction<FVector3d(int, const FVector3d&)> PositionTransform = nullptr,
528 TFunction<FVector3d(int, const FVector3d&)> NormalTransform = nullptr,
529 bool bReverseOrientation = false);
530
539 TFunction<FVector3d(int, const FVector3d&)> PositionTransform = nullptr);
540
541
556 const FIndexMapi& VertexMap, const FIndexMapi& TriangleMap,
559
560
574 const FIndexMapi& VertexMap, const FIndexMapi& TriangleMap,
576
590 const FIndexMapi& VertexMap, const FIndexMapi& TriangleMap,
592
593
594
606 template <typename RealType, int ElementSize>
608 const FDynamicMesh3* FromMesh,
609 const TSet<int>& TriangleROI,
610 const TSet<int>& VertexROI,
613
614
615
625
639
654
679
680};
681
682
683} // end namespace UE::Geometry
684} // end namespace UE
@ Normal
Definition AndroidInputInterface.h:116
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::Math::TVector< double > FVector3d
Definition MathFwd.h:60
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition ArrayView.h:139
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition DynamicMesh3.h:108
Definition DynamicMeshEditor.h:71
EDuplicateTriBehavior
Definition DynamicMeshEditor.h:289
GEOMETRYCORE_API int FindOrCreateDuplicateVertex(int VertexID, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:1858
GEOMETRYCORE_API void AppendMesh(const FDynamicMesh3 *AppendMesh, FMeshIndexMappings &IndexMapsOut, TFunction< FVector3d(int, const FVector3d &)> PositionTransform=nullptr, TFunction< FVector3d(int, const FVector3d &)> NormalTransform=nullptr, bool bReverseOrientation=false)
Definition DynamicMeshEditor.cpp:1899
GEOMETRYCORE_API bool RemoveIsolatedVertices()
Definition DynamicMeshEditor.cpp:248
GEOMETRYCORE_API void SplitBowties(FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:1000
GEOMETRYCORE_API bool ReinsertSubmesh(const FDynamicSubmesh3 &Submesh, FOptionallySparseIndexMap &SubToNewV, TArray< int > *NewTris=nullptr, EDuplicateTriBehavior DuplicateBehavior=EDuplicateTriBehavior::EnsureAbort)
Definition DynamicMeshEditor.cpp:1068
GEOMETRYCORE_API void ReverseTriangleOrientations(const TArray< int > &Triangles, bool bInvertNormals)
Definition DynamicMeshEditor.cpp:1671
GEOMETRYCORE_API bool DisconnectTrianglesAlongEdges(const TSet< int32 > &Edges, TArray< int32 > *AddedVertexIDs=nullptr)
Definition DynamicMeshEditor.cpp:864
GEOMETRYCORE_API bool StitchVertexLoopsMinimal(const TArray< int > &VertexLoop1, const TArray< int > &VertexLoop2, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:315
GEOMETRYCORE_API void SetQuadUVsFromProjection(const FIndex2i &QuadTris, const FFrame3d &ProjectionFrame, float UVScaleFactor=1.0f, const FVector2f &UVTranslation=FVector2f::Zero(), int UVLayerIndex=0)
Definition DynamicMeshEditor.cpp:1557
static GEOMETRYCORE_API bool SplitMesh(const FDynamicMesh3 *SourceMesh, TArray< FDynamicMesh3 > &SplitMeshes, TFunctionRef< int(int)> TriIDToMeshID, int DeleteMeshID=-1, TArray< int32 > *MeshIDPerSplitMesh=nullptr, bool bSortByMeshID=false)
Definition DynamicMeshEditor.cpp:2584
GEOMETRYCORE_API bool StitchSparselyCorrespondedVertexLoops(const TArray< int > &VertexIDs1, const TArray< int > &MatchedIndices1, const TArray< int > &VertexIDs2, const TArray< int > &MatchedIndices2, FDynamicMeshEditResult &ResultOut, bool bReverseOrientation=false)
Definition DynamicMeshEditor.cpp:461
void SplitBowties(int VertexID, TArray< int32 > *NewVertices=nullptr)
Definition DynamicMeshEditor.h:251
GEOMETRYCORE_API void InvertTriangleNormals(const TArray< int > &Triangles)
Definition DynamicMeshEditor.cpp:1684
FDynamicMeshEditor(FDynamicMesh3 *MeshIn)
Definition DynamicMeshEditor.h:76
static GEOMETRYCORE_API bool ConvertLoopToTriVidPairSequence(const FDynamicMesh3 &Mesh, const TArray< int32 > &VidLoop, const TArray< int32 > &EdgeLoop, TArray< TPair< int32, TPair< int8, int8 > > > &TriVertPairsOut)
Definition DynamicMeshEditor.cpp:351
void SplitBowties(int VertexID, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.h:266
GEOMETRYCORE_API void AppendUVs(const FDynamicMesh3 *AppendMesh, const FDynamicMeshUVOverlay *FromUVs, FDynamicMeshUVOverlay *ToUVs, const FIndexMapi &VertexMap, const FIndexMapi &TriangleMap, FIndexMapi &UVMapOut)
Definition DynamicMeshEditor.cpp:2240
GEOMETRYCORE_API bool AddTriangleFan_OrderedVertexLoop(int CenterVertex, const TArray< int > &VertexLoop, int GroupID, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:553
GEOMETRYCORE_API void AppendTriangles(const FDynamicMesh3 *SourceMesh, const TArrayView< const int > &SourceTriangles, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult &ResultOut, bool bComputeTriangleMap=true)
Definition DynamicMeshEditor.cpp:2503
GEOMETRYCORE_API void SetGeneralTubeUVs(const TArray< int > &Triangles, const TArray< int > &VertexIDs1, const TArray< int > &MatchedIndices1, const TArray< int > &VertexIDs2, const TArray< int > &MatchedIndices2, const TArray< float > &UValues, const FVector3f &VDir, float UVScaleFactor=1.0f, const FVector2f &UVTranslation=FVector2f::Zero(), int UVLayerIndex=0)
Definition DynamicMeshEditor.cpp:1396
GEOMETRYCORE_API void SplitBowtiesAtTriangles(const TArray< int32 > &TriangleIDs, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:1046
GEOMETRYCORE_API void AppendNormals(const FDynamicMesh3 *AppendMesh, const FDynamicMeshNormalOverlay *FromNormals, FDynamicMeshNormalOverlay *ToNormals, const FIndexMapi &VertexMap, const FIndexMapi &TriangleMap, TFunction< FVector3d(int, const FVector3d &)> NormalTransform, FIndexMapi &NormalMapOut)
Definition DynamicMeshEditor.cpp:2205
GEOMETRYCORE_API void SetQuadNormals(const FIndex2i &QuadTris, const FVector3f &Normal)
Definition DynamicMeshEditor.cpp:1196
GEOMETRYCORE_API void CopyAttributes(int FromTriangleID, int ToTriangleID, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:1730
GEOMETRYCORE_API int FindOrCreateDuplicateGroup(int TriangleID, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:1883
static GEOMETRYCORE_API bool RemoveSeamsAtEdges(const TSet< int32 > &EidsToRemoveAsSeams, TDynamicMeshOverlay< float, 2 > *Overlay)
Definition DynamicMeshEditor.cpp:2784
GEOMETRYCORE_API void SetTriangleNormals(const TArray< int > &Triangles, const FVector3f &Normal)
Definition DynamicMeshEditor.cpp:1231
GEOMETRYCORE_API int FindOrCreateDuplicateUV(int ElementID, int UVLayerIndex, FMeshIndexMappings &IndexMaps)
Definition DynamicMeshEditor.cpp:1809
GEOMETRYCORE_API bool WeldVertexLoops(const TArray< int32 > &VertexLoop1, const TArray< int32 > &VertexLoop2)
Definition DynamicMeshEditor.cpp:384
GEOMETRYCORE_API void AppendElementSubset(const FDynamicMesh3 *FromMesh, const TSet< int > &TriangleROI, const TSet< int > &VertexROI, const TDynamicMeshOverlay< RealType, ElementSize > *FromOverlay, TDynamicMeshOverlay< RealType, ElementSize > *ToOverlay)
FDynamicMesh3 * Mesh
Definition DynamicMeshEditor.h:74
GEOMETRYCORE_API void SetTriangleUVsFromProjection(const TArray< int32 > &Triangles, const FFrame3d &ProjectionFrame, float UVScaleFactor=1.0f, const FVector2f &UVTranslation=FVector2f::Zero(), bool bShiftToOrigin=true, int32 UVLayerIndex=0)
GEOMETRYCORE_API int RemoveSmallComponents(double MinVolume, double MinArea=0.0, int MinTriangleCount=0)
Definition DynamicMeshEditor.cpp:623
static GEOMETRYCORE_API bool CreateSeamsAtEdges(const TSet< int32 > &EidsToMakeIntoSeams, TDynamicMeshOverlay< float, 2 > *Overlay, TArray< int32 > *AddedElementIDs=nullptr)
Definition DynamicMeshEditor.cpp:2792
GEOMETRYCORE_API FVector3f ComputeAndSetQuadNormal(const FIndex2i &QuadTris, bool bIsPlanar=false)
Definition DynamicMeshEditor.cpp:1176
GEOMETRYCORE_API int FindOrCreateDuplicateColor(int ElementID, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult *ResultOut)
Definition DynamicMeshEditor.cpp:1841
GEOMETRYCORE_API void DuplicateTriangles(const TArray< int > &Triangles, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:653
GEOMETRYCORE_API int FindOrCreateDuplicateNormal(int ElementID, int NormalLayerIndex, FMeshIndexMappings &IndexMaps, FDynamicMeshEditResult *ResultOut=nullptr)
Definition DynamicMeshEditor.cpp:1823
GEOMETRYCORE_API void RescaleAttributeUVs(float UVScale=1.0f, bool bWorldSpace=false, int UVLayerIndex=0, TOptional< FTransformSRT3d > ToWorld=TOptional< FTransformSRT3d >())
Definition DynamicMeshEditor.cpp:1619
GEOMETRYCORE_API void AppendColors(const FDynamicMesh3 *AppendMesh, const FDynamicMeshColorOverlay *FromOverlay, FDynamicMeshColorOverlay *ToOverlay, const FIndexMapi &VertexMap, const FIndexMapi &TriangleMap, FIndexMapi &ColorMapOut)
Definition DynamicMeshEditor.cpp:2268
GEOMETRYCORE_API bool StitchVertexLoopToTriVidPairSequence(const TArray< TPair< int32, TPair< int8, int8 > > > &TriVidPairs1, const TArray< int > &VertexLoop2, FDynamicMeshEditResult &ResultOut)
Definition DynamicMeshEditor.cpp:331
GEOMETRYCORE_API bool RemoveTriangles(const TArray< int > &Triangles, bool bRemoveIsolatedVerts)
Definition DynamicMeshEditor.cpp:593
GEOMETRYCORE_API void SetTubeNormals(const TArray< int > &Triangles, const TArray< int > &VertexIDs1, const TArray< int > &MatchedIndices1, const TArray< int > &VertexIDs2, const TArray< int > &MatchedIndices2, bool bReverseNormals=false)
Definition DynamicMeshEditor.cpp:1304
GEOMETRYCORE_API bool DisconnectTriangles(const TArray< int > &Triangles, TArray< FLoopPairSet > &LoopSetOut, bool bHandleBoundaryVertices)
Definition DynamicMeshEditor.cpp:680
Definition DynamicMeshOverlay.h:68
Definition DynamicMeshOverlay.h:714
Definition AdvancedWidgetsModule.cpp:13
Definition Optional.h:131
Definition Tuple.h:652
Definition DynamicMeshEditor.h:26
void Reset()
Definition DynamicMeshEditor.h:47
TArray< TArray< int > > NewPolygons
Definition DynamicMeshEditor.h:35
TArray< int > NewVertices
Definition DynamicMeshEditor.h:28
TArray< int > NewGroups
Definition DynamicMeshEditor.h:38
TArray< int > NewTriangles
Definition DynamicMeshEditor.h:31
TArray< FIndex2i > NewQuads
Definition DynamicMeshEditor.h:33
TArray< TArray< int32 > > NewNormalOverlayElements
Definition DynamicMeshEditor.h:41
GEOMETRYCORE_API void GetAllTriangles(TArray< int > &TrianglesOut) const
Definition DynamicMeshEditor.cpp:229
TArray< int32 > NewColorOverlayElements
Definition DynamicMeshEditor.h:44
Definition DynamicMeshEditor.h:187
bool bOuterIncludesIsolatedVertices
Definition DynamicMeshEditor.h:195
TArray< int32 > OuterVertices
Definition DynamicMeshEditor.h:188
TArray< int32 > OuterEdges
Definition DynamicMeshEditor.h:189
TArray< int32 > InnerEdges
Definition DynamicMeshEditor.h:192
TArray< int32 > InnerVertices
Definition DynamicMeshEditor.h:191
Definition DynamicSubmesh3.h:17
Definition IndexTypes.h:27
Definition MeshIndexMappings.h:22
Definition SparseIndexCollectionTypes.h:161
Definition MeshAdapter.h:24
static TVector2< float > One()
Definition Vector2D.h:80
static TVector2< float > Zero()
Definition Vector2D.h:79