9#include "Containers/Array.h"
22#include "Misc/Optional.h"
38#include <initializer_list>
46class FDynamicMeshAttributeSet;
47class FMeshShapeGenerator;
134 return (
e0.Vert !=
e1.Vert) || (
e0.Tri !=
e1.Tri);
202 UE_DEPRECATED(5.7,
"bEnableShapeChangeStamp is no longer used. Use SetShapeChangeStampEnabled and HasShapeChangeStampEnabled instead.")
221 bool bIsEnabled =
false;
230 void IncrementIfEnabled()
269 FChangeStamp ChangeStampShape{
false};
272 FChangeStamp ChangeStampTopology{
true};
487 ChangeStampShape.bIsEnabled = bEnabled;
493 ChangeStampTopology.bIsEnabled = bEnabled;
499 return ChangeStampShape.bIsEnabled;
505 return ChangeStampTopology.bIsEnabled;
513 ChangeStampShape.IncrementIfEnabled();
517 ChangeStampTopology.IncrementIfEnabled();
527 ensureMsgf(ChangeStampShape.bIsEnabled,
TEXT(
"Shape change tracking is not enabled on this mesh. Use SetShapeChangeStampEnabled() to enable."));
528 return ChangeStampShape.GetValue();
537 ensureMsgf(ChangeStampTopology.bIsEnabled,
TEXT(
"Topology change tracking is not enabled on this mesh. Use SetTopologyChangeStampEnabled() to enable."));
538 return ChangeStampTopology.GetValue();
544 return ChangeStampShape.GetValue() + ChangeStampTopology.GetValue();
603 return Edges[EdgeID];
646 return GetOrderedOneRingEdgeTris(VertexID, EdgeID);
832 template<
typename VecType>
833 inline void GetTriVertices(
int TriangleID, VecType& v0, VecType& v1, VecType& v2)
const
851 return Edges[EdgeID];
858 return Edges[EdgeID];
865 return Edges[EdgeID].Vert;
885 return Edges[EdgeID].Tri;
1106 template<
typename ArrayType = FLocalIntArray>
1118 template<
typename ArrayType = FLocalIntArray>
1135 template<
typename IntArrayType = FLocalIntArray,
typename BoolArrayType = FLocalBoolArray>
1152 template<
typename ArrayType = FLocalIntArray>
1727 ToRet.bAllowNonManifoldVertices =
true;
1768 for (
int i : {0, 1, 2})
1788 template<
typename ArrayType = FLocalIntArray>
1803 Edges[EdgeID].Vert[0] = a;
1804 Edges[EdgeID].Vert[1] = b;
1819 return Triangles[TriangleID][0] == VertexID ||
Triangles[TriangleID][1] == VertexID ||
1833 return ((Tri.
A ==
vA && Tri.
B ==
vB) || (Tri.
B ==
vA && Tri.
C ==
vB) || (Tri.
C ==
vA && Tri.
A ==
vB));
1843 return (Verts[0] == VertexID) || (Verts[1] == VertexID);
1848 return (
Tris[0] == TriangleID) || (
Tris[1] == TriangleID);
1854 return (Verts[0] == VertexID) ? Verts[1] : ((Verts[1] == VertexID) ? Verts[0] :
InvalidID);
1867 Edges[EdgeID].Tri[1] = TriangleID;
1899 template<
int Variant>
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
Definition Archive.h:1208
virtual void Serialize(void *V, int64 Length)
Definition Archive.h:1689
Definition UnrealType.h:3087
Definition ArrayView.h:139
Definition AssetRegistryState.h:50
Definition MathUtil.h:150
Definition UniquePtr.h:107
UE_API void Lock()
Definition RecursiveMutex.cpp:40
UE_API void Unlock()
Definition RecursiveMutex.cpp:115
Definition CompactMaps.h:20
Definition DynamicMesh3.h:108
GEOMETRYCORE_API FVector3d GetTriBaryPoint(int TriangleID, double Bary0, double Bary1, double Bary2) const
Definition DynamicMesh3_Queries.cpp:777
TUniquePtr< FDynamicMeshAttributeSet > AttributeSet
Definition DynamicMesh3.h:199
bool HasVertexUVs() const
Definition DynamicMesh3.h:426
GEOMETRYCORE_API FFrame3d GetTriFrame(int TriangleID, int Edge=0) const
Definition DynamicMesh3_Queries.cpp:845
FRefCountVector VertexRefCounts
Definition DynamicMesh3.h:172
const FRefCountVector & GetEdgesRefCounts() const
Definition DynamicMesh3.h:1304
GEOMETRYCORE_API EMeshResult InsertVertex(int VertexID, const FVertexInfo &VertInfo, bool bUnsafe=false)
Definition DynamicMesh3_Edits.cpp:102
void SetVertexNormal(int vID, const FVector3f &vNewNormal)
Definition DynamicMesh3.h:955
virtual void BeginUnsafeTrianglesInsert()
Definition DynamicMesh3.h:713
int EdgeCount() const
Definition DynamicMesh3.h:388
DynamicMeshInfo::FEdgeCollapseInfo FEdgeCollapseInfo
Definition DynamicMesh3.h:118
GEOMETRYCORE_API void DiscardVertexNormals()
Definition DynamicMesh3.cpp:605
GEOMETRYCORE_API void EnumerateEdgeTriangles(int32 EdgeID, TFunctionRef< void(int32)> ApplyFunc) const
Definition DynamicMesh3.cpp:803
TOptional< TDynamicVector< FVector2f > > VertexUVs
Definition DynamicMesh3.h:178
FRefCountVector::IndexEnumerable edge_iterator
Definition DynamicMesh3.h:556
int MaxTriangleID() const
Definition DynamicMesh3.h:399
int AddEdgeInternal(int vA, int vB, int tA, int tB=InvalidID)
Definition DynamicMesh3.h:1751
uint64 GetChangeStamp() const
Definition DynamicMesh3.h:542
const FRefCountVector & GetTrianglesRefCounts() const
Definition DynamicMesh3.h:1292
int TriangleCount() const
Definition DynamicMesh3.h:383
const FVector3d & GetVertexRef(int VertexID) const
Definition DynamicMesh3.h:743
GEOMETRYCORE_API FIndex2i GetOrientedBoundaryEdgeV(int EdgeID) const
Definition DynamicMesh3_Queries.cpp:325
int AppendVertex(const FVector3d &Position)
Definition DynamicMesh3.h:668
void EnumerateTriEdgeIDsFromEdgeID(const int32 EdgeID, const TFunctionRef< void(FMeshTriEdgeID TriEdgeID)> &TriEdgeFunc) const
Definition DynamicMesh3.h:907
int GetTriEdge(int TriangleID, int j) const
Definition DynamicMesh3.h:812
value_iteration< FIndex3i > TrianglesItr() const
Definition DynamicMesh3.h:594
GEOMETRYCORE_API void EnableMeshComponents(int MeshComponentsFlags)
Definition DynamicMesh3.cpp:552
GEOMETRYCORE_API EMeshResult RemoveVertex(int VertexID, bool bPreserveManifold=false)
Definition DynamicMesh3_Edits.cpp:614
const FDynamicMeshAttributeSet * Attributes() const
Definition DynamicMesh3.h:1043
virtual EMeshResult CollapseEdge(int KeepVertID, int RemoveVertID, const FCollapseEdgeOptions &Options, FEdgeCollapseInfo &CollapseInfo)
Definition DynamicMesh3.h:1486
virtual GEOMETRYCORE_API EMeshResult MergeEdges(int KeepEdgeID, int DiscardEdgeID, double InterpolationT, FMergeEdgesInfo &MergeInfo, bool bCheckValidOrientation=true)
Definition DynamicMesh3_Edits.cpp:1799
GEOMETRYCORE_API void EnableVertexNormals(const FVector3f &InitialNormal)
Definition DynamicMesh3.cpp:588
virtual GEOMETRYCORE_API EMeshResult CanCollapseEdgeInternal(int vKeep, int vRemove, double collapse_t, FEdgeCollapseInfo *OutCollapseInfo) const
Definition DynamicMesh3_Edits.cpp:1300
FRefCountVector::IndexEnumerable triangle_iterator
Definition DynamicMesh3.h:555
GEOMETRYCORE_API int GetVtxSingleTriangle(int VertexID) const
Definition DynamicMesh3_Queries.cpp:119
GEOMETRYCORE_API int AddTriangleInternal(int a, int b, int c, int e0, int e1, int e2)
Definition DynamicMesh3.cpp:1438
GEOMETRYCORE_API bool GetVertexGroups(int VertexID, FIndex4i &GroupsOut) const
Definition DynamicMesh3_Queries.cpp:433
GEOMETRYCORE_API void GetTriInfo(int TriangleID, FVector3d &Normal, double &Area, FVector3d &Centroid) const
Definition DynamicMesh3_Queries.cpp:768
void SetVertex(int VertexID, const FVector3d &vNewPos, bool bTrackChange=true)
Definition DynamicMesh3.h:753
int MaxEdgeID() const
Definition DynamicMesh3.h:404
int MaxVertexID() const
Definition DynamicMesh3.h:394
edge_iterator EdgeIndicesItr() const
Definition DynamicMesh3.h:574
bool EdgeHasVertex(int EdgeID, int VertexID) const
Definition DynamicMesh3.h:1840
const TDynamicVector< FVector3f > * GetNormalsBuffer() const
Definition DynamicMesh3.h:1276
bool HasVertexColors() const
Definition DynamicMesh3.h:421
virtual GEOMETRYCORE_API EMeshResult SetTriangle(int TriangleID, const FIndex3i &NewVertices, bool bRemoveIsolatedVertices=true)
Definition DynamicMesh3_Edits.cpp:759
FIndex2i GetEdgeT(int EdgeID) const
Definition DynamicMesh3.h:882
FRefCountVector::IndexEnumerable vertex_iterator
Definition DynamicMesh3.h:554
GEOMETRYCORE_API FIndex2i GetEdgeOpposingV(int EdgeID) const
Definition DynamicMesh3_Queries.cpp:8
GEOMETRYCORE_API int FindTriangleEdge(int TriangleID, int vA, int vB) const
returns edge ID
Definition DynamicMesh3.cpp:1514
bool TriHasNeighbourTri(int CheckTriID, int NbrTriID) const
Definition DynamicMesh3.h:1823
GEOMETRYCORE_API int ReplaceTriangleEdge(int EdgeID, int eOld, int eNew)
Definition DynamicMesh3.cpp:1497
bool HasAttributes() const
Definition DynamicMesh3.h:436
FSmallListSet::ValueEnumerable VtxEdgesItr(int VertexID) const
Definition DynamicMesh3.h:627
int GetOtherEdgeVertex(int EdgeID, int VertexID) const
Definition DynamicMesh3.h:1851
GEOMETRYCORE_API int FindTriangle(int A, int B, int C) const
Definition DynamicMesh3_Queries.cpp:573
static constexpr int NonManifoldID
Definition DynamicMesh3.h:160
const FEdge & GetEdgeRef(int EdgeID) const
Definition DynamicMesh3.h:855
virtual GEOMETRYCORE_API bool CheckValidity(FValidityOptions ValidityOptions=FValidityOptions(), EValidityCheckFailMode FailMode=EValidityCheckFailMode::Check) const
Definition DynamicMesh3.cpp:1227
GEOMETRYCORE_API bool IsGroupBoundaryEdge(int EdgeID) const
Definition DynamicMesh3_Queries.cpp:344
GEOMETRYCORE_API int AppendVertex(const FVertexInfo &VertInfo)
Definition DynamicMesh3_Edits.cpp:9
GEOMETRYCORE_API double CalculateWindingNumber(const FVector3d &QueryPoint) const
Definition DynamicMesh3_Queries.cpp:911
GEOMETRYCORE_API FIndex3i GetTriNeighbourTris(int TriangleID) const
Definition DynamicMesh3.cpp:750
bool TriangleHasVertex(int TriangleID, int VertexID) const
Definition DynamicMesh3.h:1817
GEOMETRYCORE_API FDynamicMesh3()
Definition DynamicMesh3.cpp:19
virtual EMeshResult MergeVertices(int KeepVid, int DiscardVid, FMergeVerticesInfo &MergeInfo)
Definition DynamicMesh3.h:1574
bool HasTopologyChangeStampEnabled() const
Definition DynamicMesh3.h:503
static constexpr FIndex2i InvalidEdge
Definition DynamicMesh3.h:166
GEOMETRYCORE_API int AppendTriangle(const FIndex3i &TriVertices, int GroupID=0)
Definition DynamicMesh3_Edits.cpp:150
GEOMETRYCORE_API int ReplaceEdgeVertex(int EdgeID, int vOld, int vNew)
Definition DynamicMesh3.cpp:1447
GEOMETRYCORE_API void CompactInPlace(FCompactMaps *CompactInfo=nullptr)
Definition DynamicMesh3_Edits.cpp:331
GEOMETRYCORE_API void EnableTriangleGroups(int InitialGroupID=0)
Definition DynamicMesh3.cpp:650
virtual void BeginUnsafeVerticesInsert()
Definition DynamicMesh3.h:694
GEOMETRYCORE_API void EnableAttributes()
Definition DynamicMesh3.cpp:673
bool IsReferencedVertex(int VertexID) const
Definition DynamicMesh3.h:451
GEOMETRYCORE_API FVector3d GetEdgePoint(int EdgeID, double ParameterT) const
Definition DynamicMesh3_Queries.cpp:687
FSmallListSet VertexEdgeLists
Definition DynamicMesh3.h:180
FVector3d GetVertex(int VertexID) const
Definition DynamicMesh3.h:736
FIndex3i GetTriangle(int TriangleID) const
Definition DynamicMesh3.h:784
DynamicMeshInfo::FEdgeFlipInfo FEdgeFlipInfo
Definition DynamicMesh3.h:116
GEOMETRYCORE_API int32 FindEdgeInternal(int32 vA, int32 vB, bool &bIsBoundary) const
Definition DynamicMesh3.cpp:1524
GEOMETRYCORE_API void DiscardAttributes()
Definition DynamicMesh3.cpp:683
void SetEdgeVerticesInternal(int EdgeID, int a, int b)
Definition DynamicMesh3.h:1797
virtual void EndUnsafeTrianglesInsert()
Definition DynamicMesh3.h:719
FRefCountVector::FilteredEnumerable BoundaryEdgeIndicesItr() const
Definition DynamicMesh3.h:582
GEOMETRYCORE_API int32 RemoveUnusedVertices()
Definition DynamicMesh3_Edits.cpp:289
GEOMETRYCORE_API int GetMaxVtxEdgeCount() const
Definition DynamicMesh3.cpp:717
bool HasShapeChangeStampEnabled() const
Definition DynamicMesh3.h:497
GEOMETRYCORE_API EMeshResult GetVtxContiguousTriangles(int VertexID, IntArrayType &TrianglesOut, IntArrayType &ContiguousGroupLengths, BoolArrayType &GroupIsLoop) const
virtual EMeshResult CollapseEdge(int KeepVertID, int RemoveVertID, FEdgeCollapseInfo &CollapseInfo)
Definition DynamicMesh3.h:1506
triangle_iterator TriangleIndicesItr() const
Definition DynamicMesh3.h:568
bool IsEdge(int EdgeID) const
Definition DynamicMesh3.h:462
virtual GEOMETRYCORE_API FString MeshInfoString() const
Definition DynamicMesh3.cpp:818
const FIndex3i & GetTriEdgesRef(int TriangleID) const
Definition DynamicMesh3.h:805
int MaxGroupID() const
Definition DynamicMesh3.h:409
const TDynamicVector< int > * GetTriangleGroupsBuffer() const
Definition DynamicMesh3.h:1296
void SetTriangleInternal(int TriangleID, int v0, int v1, int v2)
Definition DynamicMesh3.h:1742
const TDynamicVector< FVector3d > & GetVerticesBuffer() const
Definition DynamicMesh3.h:1268
virtual GEOMETRYCORE_API EMeshResult MergeVertices(int KeepVid, int DiscardVid, double InterpolationT, const FMergeVerticesOptions &Options, FMergeVerticesInfo &MergeInfo)
Definition DynamicMesh3_Edits.cpp:2121
FRefCountVector TriangleRefCounts
Definition DynamicMesh3.h:185
GEOMETRYCORE_API void AppendWithOffsets(const FDynamicMesh3 &ToAppend, FAppendInfo *OutAppendInfo=nullptr)
Definition DynamicMesh3.cpp:248
TOptional< TDynamicVector< int > > TriangleGroups
Definition DynamicMesh3.h:189
GEOMETRYCORE_API static const FVector3d InvalidVertex
Definition DynamicMesh3.h:164
GEOMETRYCORE_API FVector3d GetTriCentroid(int TriangleID) const
Definition DynamicMesh3_Queries.cpp:800
FIndex2i GetEdgeV(int EdgeID) const
Definition DynamicMesh3.h:862
GEOMETRYCORE_API bool IsBoundaryVertex(int VertexID) const
Definition DynamicMesh3_Queries.cpp:295
std::atomic< uint32 > ShapeChangeStamp
Definition DynamicMesh3.h:206
void SerializeInternal(FArchive &Ar, void *Ptr)
bool IsBoundaryEdge(int EdgeID) const
Definition DynamicMesh3.h:1057
FIndex2i GetOrderedOneRingEdgeTris(int VertexID, int EdgeID) const
Definition DynamicMesh3.h:1880
void SetVertexColor(int vID, const FVector3f &vNewColor)
Definition DynamicMesh3.h:981
TDynamicVector< FVector3d > Vertices
Definition DynamicMesh3.h:170
virtual GEOMETRYCORE_API bool SplitVertexWouldLeaveIsolated(int VertexID, const TArrayView< const int > &TrianglesToUpdate)
Definition DynamicMesh3_Edits.cpp:1287
GEOMETRYCORE_API FVector3d GetTriInternalAnglesR(int TriangleID) const
Definition DynamicMesh3_Queries.cpp:895
int GetOtherEdgeTriangle(int EdgeID, int TriangleID) const
Definition DynamicMesh3.h:1856
FSmallListSet::MappedValueEnumerable VtxVerticesItr(int VertexID) const
Definition DynamicMesh3.h:608
uint32 GetShapeChangeStamp() const
Definition DynamicMesh3.h:525
static constexpr int DuplicateTriangleID
Definition DynamicMesh3.h:162
bool bEnableShapeChangeStamp
Definition DynamicMesh3.h:203
GEOMETRYCORE_API int GetComponentsFlags() const
Definition DynamicMesh3.cpp:530
DynamicMeshInfo::FVertexSplitInfo FVertexSplitInfo
Definition DynamicMesh3.h:122
GEOMETRYCORE_API void EnableMatchingAttributes(const FDynamicMesh3 &ToMatch, bool bClearExisting=true, bool bDiscardExtraAttributes=false)
Definition DynamicMesh3.cpp:471
void AddTriangleEdge(int TriangleID, int v0, int v1, int j, int EdgeID)
Definition DynamicMesh3.h:1862
const TDynamicVector< FIndex3i > & GetTriangleEdges() const
Definition DynamicMesh3.h:1312
virtual EMeshResult MergeVertices(int KeepVid, int DiscardVid, double InterpolationT, FMergeVerticesInfo &MergeInfo)
Definition DynamicMesh3.h:1566
FEdge GetEdge(int EdgeID) const
Definition DynamicMesh3.h:848
virtual GEOMETRYCORE_API EMeshResult SplitEdge(int EdgeAB, FEdgeSplitInfo &SplitInfo, double SplitParameterT=0.5)
Definition DynamicMesh3_Edits.cpp:888
int GroupIDCounter
Definition DynamicMesh3.h:191
GEOMETRYCORE_API bool IsClosed() const
Definition DynamicMesh3_Queries.cpp:651
GEOMETRYCORE_API SIZE_T GetByteCount() const
Definition DynamicMesh3.cpp:834
FRefCountVector EdgeRefCounts
Definition DynamicMesh3.h:196
const TDynamicVector< FIndex3i > & GetTrianglesBuffer() const
Definition DynamicMesh3.h:1288
GEOMETRYCORE_API int GetVtxBoundaryEdges(int VertexID, int &Edge0Out, int &Edge1Out) const
Definition DynamicMesh3_Queries.cpp:28
GEOMETRYCORE_API int FindEdgeFromTriPair(int TriangleA, int TriangleB) const
Definition DynamicMesh3.cpp:1599
GEOMETRYCORE_API void EnableVertexColors(const FVector3f &InitialColor)
Definition DynamicMesh3.cpp:610
FDynamicMeshAttributeSet * Attributes()
Definition DynamicMesh3.h:1039
GEOMETRYCORE_API bool HasUnusedVertices() const
Definition DynamicMesh3_Edits.cpp:316
void SetEdgeTrianglesInternal(int EdgeID, int t0, int t1)
Definition DynamicMesh3.h:1807
bool IsTriangle(int TriangleID) const
Definition DynamicMesh3.h:457
GEOMETRYCORE_API void EnumerateVertexTriangles(int32 VertexID, TFunctionRef< void(int32)> ApplyFunc) const
Definition DynamicMesh3.cpp:769
GEOMETRYCORE_API int FindEdgeFromTri(int VertexA, int VertexB, int TriangleID) const
Definition DynamicMesh3.cpp:1580
GEOMETRYCORE_API FAxisAlignedBox3d GetBounds(bool bParallel=false) const
Definition DynamicMesh3_Queries.cpp:605
bool HasTriangleGroups() const
Definition DynamicMesh3.h:431
bool IsVertex(int VertexID) const
Definition DynamicMesh3.h:446
bool IsCompact() const
Definition DynamicMesh3.h:1159
friend class FDynamicMeshBulkEdit
Definition DynamicMesh3.h:1909
GEOMETRYCORE_API int GetAllVtxBoundaryEdges(int VertexID, ArrayType &EdgeListOut) const
vertex_iterator VertexIndicesItr() const
Definition DynamicMesh3.h:562
virtual GEOMETRYCORE_API EMeshResult FlipEdge(int EdgeAB, FEdgeFlipInfo &FlipInfo)
Definition DynamicMesh3_Edits.cpp:1110
void GetTriVertices(int TriangleID, VecType &v0, VecType &v1, VecType &v2) const
Definition DynamicMesh3.h:833
double CompactMetric() const
Definition DynamicMesh3.h:1177
GEOMETRYCORE_API EMeshResult RemoveTriangle(int TriangleID, bool bRemoveIsolatedVertices=true, bool bPreserveManifold=false)
Definition DynamicMesh3_Edits.cpp:679
TPairExpandEnumerable< FSmallListSet::ValueIterator > vtx_triangles_enumerable
Definition DynamicMesh3.h:559
const FRefCountVector & GetVerticesRefCounts() const
Definition DynamicMesh3.h:1272
GEOMETRYCORE_API int ReplaceEdgeTriangle(int EdgeID, int tOld, int tNew)
Definition DynamicMesh3.cpp:1470
GEOMETRYCORE_API bool IsBowtieVertex(int VertexID) const
Definition DynamicMesh3_Queries.cpp:501
int ReplaceTriangleVertex(int TriangleID, int vOld, int vNew)
Definition DynamicMesh3.h:1765
GEOMETRYCORE_API bool IsGroupBoundaryVertex(int VertexID) const
Definition DynamicMesh3_Queries.cpp:360
bool TriHasSequentialVertices(int TriangleID, int vA, int vB) const
Definition DynamicMesh3.h:1830
TDynamicVector< FIndex3i > TriangleEdges
Definition DynamicMesh3.h:187
GEOMETRYCORE_API double GetTriInternalAngleR(int TriangleID, int i) const
Definition DynamicMesh3_Queries.cpp:877
GEOMETRYCORE_API bool IsGroupJunctionVertex(int VertexID) const
Definition DynamicMesh3_Queries.cpp:396
GEOMETRYCORE_API FAxisAlignedBox3d GetTriBounds(int TriangleID) const
Definition DynamicMesh3_Queries.cpp:836
GEOMETRYCORE_API void CompactCopy(const FDynamicMesh3 &CopyMesh, bool bNormals=true, bool bColors=true, bool bUVs=true, bool bAttributes=true, FCompactMaps *CompactInfo=nullptr)
Definition DynamicMesh3.cpp:360
virtual GEOMETRYCORE_API EMeshResult SplitVertex(int VertexID, const TArrayView< const int > &TrianglesToUpdate, FVertexSplitInfo &SplitInfo)
Definition DynamicMesh3_Edits.cpp:1227
GEOMETRYCORE_API FVector3d GetEdgeNormal(int EdgeID) const
Definition DynamicMesh3_Queries.cpp:670
const TDynamicVector< FVector3f > * GetColorsBuffer() const
Definition DynamicMesh3.h:1280
GEOMETRYCORE_API EMeshResult InsertTriangle(int TriangleID, const FIndex3i &TriVertices, int GroupID=0, bool bUnsafe=false)
Definition DynamicMesh3_Edits.cpp:221
const FIndex3i & GetTriangleRef(int TriangleID) const
Definition DynamicMesh3.h:791
const FSmallListSet & GetVertexEdges() const
Definition DynamicMesh3.h:1308
GEOMETRYCORE_API int32 GetSingleVertexTriangle(int32 VID) const
Definition DynamicMesh3.cpp:792
int AppendTriangle(int Vertex0, int Vertex1, int Vertex2, int GroupID=0)
Definition DynamicMesh3.h:680
virtual GEOMETRYCORE_API EMeshResult CanCollapseEdge(int vKeep, int vRemove, const FCollapseEdgeOptions &Options) const
Definition DynamicMesh3_Edits.cpp:1471
int GetVtxEdgeCount(int VertexID) const
Definition DynamicMesh3.h:775
GEOMETRYCORE_API void DiscardVertexColors()
Definition DynamicMesh3.cpp:625
GEOMETRYCORE_API FVertexInfo GetVertexInfo(int VertexID) const
Definition DynamicMesh3.cpp:727
GEOMETRYCORE_API void GetVtxNbrhood(int EdgeID, int VertexID, int &OtherVertOut, int &OppVert1Out, int &OppVert2Out, int &Tri1Out, int &Tri2Out) const
Definition DynamicMesh3_Queries.cpp:76
bool EdgeHasTriangle(int EdgeID, int TriangleID) const
Definition DynamicMesh3.h:1845
int GetTriangleGroup(int tID) const
Definition DynamicMesh3.h:1023
GEOMETRYCORE_API bool GetAllVertexGroups(int VertexID, ArrayType &GroupsOut) const
GEOMETRYCORE_API int FindEdge(int VertexA, int VertexB) const
Definition DynamicMesh3.cpp:1546
bool IsCompactV() const
Definition DynamicMesh3.h:1165
virtual GEOMETRYCORE_API bool IsSameAs(const FDynamicMesh3 &OtherMesh, const FSameAsOptions &Options) const
Definition DynamicMesh3.cpp:844
void GetVertexEdgesList(int VertexID, ArrayType &EdgesOut) const
Definition DynamicMesh3.h:1789
static constexpr int InvalidID
Definition DynamicMesh3.h:158
virtual GEOMETRYCORE_API EMeshResult CollapseEdge(int KeepVertID, int RemoveVertID, double EdgeParameterT, const FCollapseEdgeOptions &Options, FEdgeCollapseInfo &CollapseInfo)
Definition DynamicMesh3_Edits.cpp:1481
vtx_triangles_enumerable VtxTrianglesItr(int VertexID) const
Definition DynamicMesh3.h:642
void SetTriangleGroup(int tid, int group_id)
Definition DynamicMesh3.h:1029
GEOMETRYCORE_API const FDynamicMesh3 & operator=(const FDynamicMesh3 &CopyMesh)
Definition DynamicMesh3.cpp:97
GEOMETRYCORE_API int GetVtxTriangleCount(int VertexID) const
Definition DynamicMesh3_Queries.cpp:94
GEOMETRYCORE_API void DiscardVertexUVs()
Definition DynamicMesh3.cpp:645
void EnumerateVertexVertices(int32 VertexID, TFunctionRef< void(int32)> VertexFunc) const
Definition DynamicMesh3.h:616
bool GetEdgeV(int EdgeID, FVector3d &a, FVector3d &b) const
Definition DynamicMesh3.h:869
std::atomic< uint32 > TopologyChangeStamp
Definition DynamicMesh3.h:208
GEOMETRYCORE_API void GetVtxOneRingCentroid(int VertexID, FVector3d &CentroidOut) const
Definition DynamicMesh3_Queries.cpp:703
virtual GEOMETRYCORE_API EMeshResult PokeTriangle(int TriangleID, const FVector3d &BaryCoordinates, FPokeTriangleInfo &PokeInfo)
Definition DynamicMesh3_Edits.cpp:2242
GEOMETRYCORE_API EMeshResult ReverseTriOrientation(int TriangleID)
Definition DynamicMesh3_Edits.cpp:574
static constexpr FIndex3i InvalidTriangle
Definition DynamicMesh3.h:165
bool HasVertexNormals() const
Definition DynamicMesh3.h:416
GEOMETRYCORE_API FVector3d GetTriBaryNormal(int TriangleID, double Bary0, double Bary1, double Bary2) const
Definition DynamicMesh3_Queries.cpp:786
TOptional< TDynamicVector< FVector3f > > VertexNormals
Definition DynamicMesh3.h:174
GEOMETRYCORE_API void EnableVertexUVs(const FVector2f &InitialUV)
Definition DynamicMesh3.cpp:630
void UpdateChangeStamps(bool bShapeChange, bool bTopologyChange)
Definition DynamicMesh3.h:509
GEOMETRYCORE_API FVector3d GetTriNormal(int TriangleID) const
Definition DynamicMesh3_Queries.cpp:752
value_iteration< FEdge > EdgesItr() const
Definition DynamicMesh3.h:600
GEOMETRYCORE_API double GetTriArea(int TriangleID) const
Definition DynamicMesh3_Queries.cpp:759
friend FArchive & operator<<(FArchive &Ar, FDynamicMesh3 &Mesh)
Definition DynamicMesh3.h:367
TOptional< TDynamicVector< FVector3f > > VertexColors
Definition DynamicMesh3.h:176
FVector3f GetVertexColor(int vID) const
Definition DynamicMesh3.h:969
GEOMETRYCORE_API FFrame3d GetVertexFrame(int VertexID, bool bFrameNormalY=false, FVector3d *UseNormal=nullptr) const
Definition DynamicMesh3_Queries.cpp:723
int AllocateTriangleGroup()
Definition DynamicMesh3.h:1018
value_iteration< FVector3d > VerticesItr() const
Definition DynamicMesh3.h:588
int VertexCount() const
Definition DynamicMesh3.h:378
TDynamicVector< FEdge > Edges
Definition DynamicMesh3.h:194
void SetShapeChangeStampEnabled(bool bEnabled)
Definition DynamicMesh3.h:485
GEOMETRYCORE_API double GetTriSolidAngle(int TriangleID, const FVector3d &p) const
Definition DynamicMesh3_Queries.cpp:863
GEOMETRYCORE_API void Clear()
Definition DynamicMesh3.cpp:446
GEOMETRYCORE_API void ReverseTriOrientationInternal(int TriangleID)
Definition DynamicMesh3_Edits.cpp:585
void AllocateEdgesList(int VertexID)
Definition DynamicMesh3.h:1779
void SetTriangleEdgesInternal(int TriangleID, int e0, int e1, int e2)
Definition DynamicMesh3.h:1746
void SetTopologyChangeStampEnabled(bool bEnabled)
Definition DynamicMesh3.h:491
void SetVertexUV(int vID, const FVector2f &vNewUV)
Definition DynamicMesh3.h:1005
FVector2f GetVertexUV(int vID) const
Definition DynamicMesh3.h:994
FMeshTriEdgeID GetTriEdgeIDFromEdgeID(int EdgeID) const
Definition DynamicMesh3.h:892
uint32 GetTopologyChangeStamp() const
Definition DynamicMesh3.h:535
FVector3f GetVertexNormal(int vID) const
Definition DynamicMesh3.h:944
const TDynamicVector< FEdge > & GetEdgesBuffer() const
Definition DynamicMesh3.h:1300
GEOMETRYCORE_API void DiscardTriangleGroups()
Definition DynamicMesh3.cpp:667
virtual EMeshResult PokeTriangle(int TriangleID, FPokeTriangleInfo &PokeInfo)
Definition DynamicMesh3.h:1589
void EnumerateVertexEdges(int32 VertexID, TFunctionRef< void(int32)> EdgeFunc) const
Definition DynamicMesh3.h:634
GEOMETRYCORE_API EMeshResult GetVtxTriangles(int VertexID, ArrayType &TrianglesOut) const
DynamicMeshInfo::FPokeTriangleInfo FPokeTriangleInfo
Definition DynamicMesh3.h:121
FIndex3i GetTriEdges(int TriangleID) const
Definition DynamicMesh3.h:798
virtual void EndUnsafeVerticesInsert()
Definition DynamicMesh3.h:700
bool IsCompactT() const
Definition DynamicMesh3.h:1171
FVector3d GetTriVertex(int TriangleID, int j) const
Definition DynamicMesh3.h:842
const TDynamicVector< FVector2f > * GetUVBuffer() const
Definition DynamicMesh3.h:1284
DynamicMeshInfo::FMergeEdgesInfo FMergeEdgesInfo
Definition DynamicMesh3.h:119
void EnumerateTriEdgeIDsFromTriID(const int TriID, const TFunctionRef< void(FMeshTriEdgeID TriEdgeID)> &TriEdgeFunc) const
Definition DynamicMesh3.h:819
GEOMETRYCORE_API void ReverseOrientation(bool bFlipNormals=true)
Definition DynamicMesh3_Edits.cpp:597
GEOMETRYCORE_API bool IsBoundaryTriangle(int TriangleID) const
Definition DynamicMesh3_Queries.cpp:311
TDynamicVector< FIndex3i > Triangles
Definition DynamicMesh3.h:183
virtual GEOMETRYCORE_API ~FDynamicMesh3()
Definition DynamicMeshAttributeSet.h:84
Definition MeshShapeGenerator.h:19
Definition RefCountVector.h:506
Definition RefCountVector.h:445
Definition RefCountVector.h:469
Definition RefCountVector.h:25
MappedEnumerable< ToType > MappedIndices(TFunction< ToType(int)> MapFunc) const
Definition RefCountVector.h:497
void RebuildFreeList()
Definition RefCountVector.h:306
size_t GetMaxIndex() const
Definition RefCountVector.h:56
size_t GetCount() const
Definition RefCountVector.h:51
bool IsDense() const
Definition RefCountVector.h:61
int GetRefCount(int Index) const
Definition RefCountVector.h:76
bool IsValid(int Index) const
Definition RefCountVector.h:66
FilteredEnumerable FilteredIndices(TFunction< bool(int)> FilterFunc) const
Definition RefCountVector.h:527
int Allocate()
Definition RefCountVector.h:102
IndexEnumerable Indices() const
Definition RefCountVector.h:458
Definition SmallListSet.h:641
Definition SmallListSet.h:554
Definition SmallListSet.h:36
GEOMETRYCORE_API void AllocateAt(int32 ListIndex)
Definition SmallListSet.cpp:44
GEOMETRYCORE_API void Insert(int32 ListIndex, int32 Value)
Definition SmallListSet.cpp:195
size_t Size() const
Definition SmallListSet.h:75
void Enumerate(int32 ListIndex, const IntToVoidFunc &ApplyFunc) const
Definition SmallListSet.h:293
ValueEnumerable Values(int32 ListIndex) const
Definition SmallListSet.h:571
MappedValueEnumerable MappedValues(int32 ListIndex, TFunction< int32(int32)> MapFunc) const
Definition SmallListSet.h:660
int32 GetCount(int32 ListIndex) const
Definition SmallListSet.h:155
GEOMETRYCORE_API void Clear(int32 ListIndex)
Definition SmallListSet.cpp:305
Definition DynamicVector.h:27
Definition IteratorUtil.h:369
constexpr int InvalidID
Definition IndexTypes.h:13
GEOMETRYCORE_API bool FetchDebugMesh(FString DebugMeshName, FDynamicMesh3 &MeshOut, bool bClear)
Definition DynamicMesh3.cpp:1669
GEOMETRYCORE_API void StashDebugMesh(const FDynamicMesh3 &Mesh, FString DebugMeshName)
Definition DynamicMesh3.cpp:1654
GEOMETRYCORE_API void ClearAllDebugMeshes()
Definition DynamicMesh3.cpp:1639
bool IsFinite(const TVector2< RealType > &V)
Definition VectorUtil.h:42
EMeshResult
Definition GeometryTypes.h:18
EValidityCheckFailMode
Definition GeometryTypes.h:72
@ Area
Definition FitOrientedBox2.h:17
EMeshComponents
Definition DynamicMesh3.h:50
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition InfoTypes.h:181
Definition InfoTypes.h:171
Definition InfoTypes.h:155
Definition InfoTypes.h:197
Definition InfoTypes.h:216
Definition InfoTypes.h:229
Definition InfoTypes.h:242
@ Value
Definition Array.h:46
Definition Optional.h:131
Definition DynamicMesh3.h:309
int32 GroupOffset
Definition DynamicMesh3.h:311
int32 EdgeOffset
Definition DynamicMesh3.h:311
int32 NumVertex
Definition DynamicMesh3.h:317
int32 NormalOverlayOffsets[3]
Definition DynamicMesh3.h:314
int32 NumEdge
Definition DynamicMesh3.h:317
int32 VertexOffset
Definition DynamicMesh3.h:311
int32 NumTriangle
Definition DynamicMesh3.h:317
int32 TriangleOffset
Definition DynamicMesh3.h:311
Definition DynamicMesh3.h:1436
bool bAllowCollapsingInternalEdgeWithBoundaryVertices
Definition DynamicMesh3.h:1450
bool bAllowTetrahedronCollapse
Definition DynamicMesh3.h:1456
bool bAllowHoleCollapse
Definition DynamicMesh3.h:1444
Definition DynamicMesh3.h:129
FIndex2i Tri
Definition DynamicMesh3.h:131
FIndex2i Vert
Definition DynamicMesh3.h:130
void Serialize(FArchive &Ar)
Definition DynamicMesh3.h:151
friend FArchive & operator<<(FArchive &Ar, FEdge &E)
Definition DynamicMesh3.h:144
friend bool operator!=(const FEdge &e0, const FEdge &e1)
Definition DynamicMesh3.h:132
Definition DynamicMesh3.h:1538
bool bAllowNonBoundaryBowtieCreation
Definition DynamicMesh3.h:1543
Definition DynamicMesh3.h:1629
int32 OtherID
Definition DynamicMesh3.h:1664
EReason
Definition DynamicMesh3.h:1632
EIDType IDType
Definition DynamicMesh3.h:1666
EReason Reason
Definition DynamicMesh3.h:1647
FString Detail
Definition DynamicMesh3.h:1650
int32 ID
Definition DynamicMesh3.h:1662
void SetEID(int32 EID, int32 OtherEID=InvalidID)
Definition DynamicMesh3.h:1681
void SetVID(int32 VID, int32 OtherVID=InvalidID)
Definition DynamicMesh3.h:1669
EIDType
Definition DynamicMesh3.h:1654
void SetTID(int32 TID, int32 OtherTID=InvalidID)
Definition DynamicMesh3.h:1675
Definition DynamicMesh3.h:1609
bool bCheckAttributes
Definition DynamicMesh3.h:1616
bool bIgnoreDataLayout
Definition DynamicMesh3.h:1619
bool bCheckGroups
Definition DynamicMesh3.h:1615
bool bCheckColors
Definition DynamicMesh3.h:1613
float EpsilonFloat
Definition DynamicMesh3.h:1622
bool bCheckEdgeIDs
Definition DynamicMesh3.h:1611
bool bCheckNormals
Definition DynamicMesh3.h:1612
bool bCheckConnectivity
Definition DynamicMesh3.h:1610
double EpsilonDouble
Definition DynamicMesh3.h:1625
bool bCheckUVs
Definition DynamicMesh3.h:1614
Definition DynamicMesh3.h:1708
bool bAllowAdjacentFacesReverseOrientation
Definition DynamicMesh3.h:1710
static FValidityOptions Permissive()
Definition DynamicMesh3.h:1723
bool bAllowNonManifoldVertices
Definition DynamicMesh3.h:1709
FValidityOptions(bool bAllowNonManifoldVertices=false, bool bAllowAdjacentFacesReverseOrientation=false)
Definition DynamicMesh3.h:1715
Definition AdaptiveTessellator.h:29
Definition IndexTypes.h:27
int B
Definition IndexTypes.h:32
Definition IndexTypes.h:158
int B
Definition IndexTypes.h:164
int A
Definition IndexTypes.h:163
int C
Definition IndexTypes.h:165
Definition IndexTypes.h:296
Definition InfoTypes.h:55
Definition InfoTypes.h:17
static TVector2< float > Zero()
Definition Vector2D.h:79
static TVector< float > One()
Definition Vector.h:115
static TVector< float > UnitY()
Definition Vector.h:121