UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
UE::Geometry::FMeshFaceSelection Class Reference

#include <MeshFaceSelection.h>

Public Member Functions

 FMeshFaceSelection (const FDynamicMesh3 *mesh)
 
GEOMETRYCORE_API FMeshFaceSelection (const FDynamicMesh3 *mesh, const FMeshVertexSelection &convertV, int minCount=3)
 
 FMeshFaceSelection (const FDynamicMesh3 *mesh, int group_id)
 
TSet< int >::TRangedForIterator begin ()
 
TSet< int >::TRangedForConstIterator begin () const
 
TSet< int >::TRangedForIterator end ()
 
TSet< int >::TRangedForConstIterator end () const
 
int Num () const
 
bool IsSelected (int tid) const
 
bool Contains (int tid) const
 
void Select (int tid)
 
template<typename EnumerableType , typename E = decltype(DeclVal<EnumerableType>().begin())>
void Select (const EnumerableType &Enumerable)
 
void Select (TFunctionRef< bool(int)> SelectF)
 
void SelectVertexOneRing (int vid)
 
void SelectVertexOneRings (TArrayView< const int > Vertices)
 
void SelectEdgeTris (int eid)
 
void Deselect (int tid)
 
void Deselect (TArrayView< const int > Triangles)
 
template<typename EnumerableType >
void Deselect (const EnumerableType &Enumerable)
 
void DeselectAll ()
 
void SelectGroup (int gid)
 
void SelectGroupInverse (int gid)
 
void DeselectGroup (int gid)
 
template<typename EnumerableType , typename StorageType >
void SetDifference (const EnumerableType &SubtractSet, StorageType &DifferenceStorage) const
 
template<typename EnumerableType , typename StorageType >
void SetIntersection (const EnumerableType &IntersectSet, StorageType &IntersectionStorage) const
 
const TSet< int > & AsSet () const
 
TArray< int > AsArray () const
 
TBitArray< FDefaultBitArrayAllocatorAsBitArray () const
 
TPair< bool, boolIsSelectionBoundaryEdge (int32 eid) const
 
TArray< int > FindNeighbourTris () const
 
TArray< int > FindBorderTris () const
 
void ExpandToFaceNeighbours (const TUniqueFunction< bool(int)> &FilterF=nullptr)
 
void ExpandToFaceNeighbours (int rounds, const TUniqueFunction< bool(int)> &FilterF=nullptr)
 
GEOMETRYCORE_API void ExpandToOneRingNeighbours (const TUniqueFunction< bool(int)> &FilterF=nullptr)
 
GEOMETRYCORE_API void ExpandToOneRingNeighbours (int nRings, const TUniqueFunction< bool(int)> &FilterF=nullptr)
 
GEOMETRYCORE_API void ContractBorderByOneRingNeighbours (int NumRings=1, bool bContractFromMeshBoundary=false, const TUniqueFunction< bool(int)> &FilterF=nullptr)
 
void FloodFill (int tSeed, const TUniqueFunction< bool(int)> &TriFilterF=nullptr, const TUniqueFunction< bool(int)> &EdgeFilterF=nullptr)
 
void FloodFill (const TArray< int > &Seeds, const TUniqueFunction< bool(int)> &TriFilterF=nullptr, const TUniqueFunction< bool(int)> &EdgeFilterF=nullptr)
 
bool ClipFins (bool bClipLoners)
 
bool FillEars (bool bFillTinyHoles)
 
bool LocalOptimize (bool bClipFins, bool bFillEars, bool bFillTinyHoles=true, bool bClipLoners=true, bool bRemoveBowties=false)
 
bool LocalOptimize (bool bRemoveBowties=true)
 
bool RemoveBowties ()
 
bool remove_bowties ()
 

Constructor & Destructor Documentation

◆ FMeshFaceSelection() [1/3]

UE::Geometry::FMeshFaceSelection::FMeshFaceSelection ( const FDynamicMesh3 mesh)
inline

◆ FMeshFaceSelection() [2/3]

FMeshFaceSelection::FMeshFaceSelection ( const FDynamicMesh3 mesh,
const FMeshVertexSelection convertV,
int  minCount = 3 
)

◆ FMeshFaceSelection() [3/3]

UE::Geometry::FMeshFaceSelection::FMeshFaceSelection ( const FDynamicMesh3 mesh,
int  group_id 
)
inline

Member Function Documentation

◆ AsArray()

TArray< int > UE::Geometry::FMeshFaceSelection::AsArray ( ) const
inline

◆ AsBitArray()

TBitArray< FDefaultBitArrayAllocator > UE::Geometry::FMeshFaceSelection::AsBitArray ( ) const
inline

◆ AsSet()

const TSet< int > & UE::Geometry::FMeshFaceSelection::AsSet ( ) const
inline

◆ begin() [1/2]

TSet< int >::TRangedForIterator UE::Geometry::FMeshFaceSelection::begin ( )
inline

DO NOT USE DIRECTLY STL-like iterators to enable range-based for loop support.

◆ begin() [2/2]

TSet< int >::TRangedForConstIterator UE::Geometry::FMeshFaceSelection::begin ( ) const
inline

◆ ClipFins()

bool UE::Geometry::FMeshFaceSelection::ClipFins ( bool  bClipLoners)
inline

◆ Contains()

bool UE::Geometry::FMeshFaceSelection::Contains ( int  tid) const
inline

◆ ContractBorderByOneRingNeighbours()

void FMeshFaceSelection::ContractBorderByOneRingNeighbours ( int  NumRings = 1,
bool  bContractFromMeshBoundary = false,
const TUniqueFunction< bool(int)> &  FilterF = nullptr 
)

remove all triangles in vertex one-rings of current selection to set. On a large selection this is quite expensive as we don't know the boundary, so we have to iterate over all selected triangles.

Return false from FilterF to prevent triangles from being deselected.

◆ Deselect() [1/3]

void UE::Geometry::FMeshFaceSelection::Deselect ( const EnumerableType Enumerable)
inline

◆ Deselect() [2/3]

void UE::Geometry::FMeshFaceSelection::Deselect ( int  tid)
inline

◆ Deselect() [3/3]

void UE::Geometry::FMeshFaceSelection::Deselect ( TArrayView< const int >  Triangles)
inline

◆ DeselectAll()

void UE::Geometry::FMeshFaceSelection::DeselectAll ( )
inline

◆ DeselectGroup()

void UE::Geometry::FMeshFaceSelection::DeselectGroup ( int  gid)
inline

◆ end() [1/2]

TSet< int >::TRangedForIterator UE::Geometry::FMeshFaceSelection::end ( )
inline

◆ end() [2/2]

TSet< int >::TRangedForConstIterator UE::Geometry::FMeshFaceSelection::end ( ) const
inline

◆ ExpandToFaceNeighbours() [1/2]

void UE::Geometry::FMeshFaceSelection::ExpandToFaceNeighbours ( const TUniqueFunction< bool(int)> &  FilterF = nullptr)
inline

◆ ExpandToFaceNeighbours() [2/2]

void UE::Geometry::FMeshFaceSelection::ExpandToFaceNeighbours ( int  rounds,
const TUniqueFunction< bool(int)> &  FilterF = nullptr 
)
inline

◆ ExpandToOneRingNeighbours() [1/2]

void FMeshFaceSelection::ExpandToOneRingNeighbours ( const TUniqueFunction< bool(int)> &  FilterF = nullptr)

Add all triangles in vertex one-rings of current selection to set. On a large selection this is quite expensive as we don't know the boundary, so we have to iterate over all selected triangles.

Return false from FilterF to prevent triangles from being included.

◆ ExpandToOneRingNeighbours() [2/2]

void FMeshFaceSelection::ExpandToOneRingNeighbours ( int  nRings,
const TUniqueFunction< bool(int)> &  FilterF = nullptr 
)

Expand selection by N vertex one-rings. This is significantly faster than calling ExpandToOnering() multiple times, because we can track the growing front and only check the new triangles.

Return false from FilterF to prevent triangles from being included.

◆ FillEars()

bool UE::Geometry::FMeshFaceSelection::FillEars ( bool  bFillTinyHoles)
inline

◆ FindBorderTris()

TArray< int > UE::Geometry::FMeshFaceSelection::FindBorderTris ( ) const
inline

find set of tris just inside border of selection

◆ FindNeighbourTris()

TArray< int > UE::Geometry::FMeshFaceSelection::FindNeighbourTris ( ) const
inline

find set of tris just outside border of selection

◆ FloodFill() [1/2]

void UE::Geometry::FMeshFaceSelection::FloodFill ( const TArray< int > &  Seeds,
const TUniqueFunction< bool(int)> &  TriFilterF = nullptr,
const TUniqueFunction< bool(int)> &  EdgeFilterF = nullptr 
)
inline

Grow selection outwards from seed triangles, until it hits boundaries defined by triangle and edge filters. Edge filter is not effective unless it (possibly combined w/ triangle filter) defines closed loops.

◆ FloodFill() [2/2]

void UE::Geometry::FMeshFaceSelection::FloodFill ( int  tSeed,
const TUniqueFunction< bool(int)> &  TriFilterF = nullptr,
const TUniqueFunction< bool(int)> &  EdgeFilterF = nullptr 
)
inline

Grow selection outwards from seed triangle, until it hits boundaries defined by triangle and edge filters. Edge filter is not effective unless it (possibly combined w/ triangle filter) defines closed loops.

◆ IsSelected()

bool UE::Geometry::FMeshFaceSelection::IsSelected ( int  tid) const
inline

◆ IsSelectionBoundaryEdge()

TPair< bool, bool > UE::Geometry::FMeshFaceSelection::IsSelectionBoundaryEdge ( int32  eid) const
inline
Returns
pair (bIsSelectionBoundaryEdge, bIsMeshBoundaryEdge) for a given edge

◆ LocalOptimize() [1/2]

bool UE::Geometry::FMeshFaceSelection::LocalOptimize ( bool  bClipFins,
bool  bFillEars,
bool  bFillTinyHoles = true,
bool  bClipLoners = true,
bool  bRemoveBowties = false 
)
inline

◆ LocalOptimize() [2/2]

bool UE::Geometry::FMeshFaceSelection::LocalOptimize ( bool  bRemoveBowties = true)
inline

◆ Num()

int UE::Geometry::FMeshFaceSelection::Num ( ) const
inline

◆ remove_bowties()

bool UE::Geometry::FMeshFaceSelection::remove_bowties ( )
inline

◆ RemoveBowties()

bool UE::Geometry::FMeshFaceSelection::RemoveBowties ( )
inline

Find any "bowtie" vertices - ie vertex v such taht there is multiple spans of triangles selected in v's triangle one-ring - and deselect those one-rings. Returns true if selection was modified.

◆ Select() [1/3]

template<typename EnumerableType , typename E = decltype(DeclVal<EnumerableType>().begin())>
void UE::Geometry::FMeshFaceSelection::Select ( const EnumerableType Enumerable)
inline

◆ Select() [2/3]

void UE::Geometry::FMeshFaceSelection::Select ( int  tid)
inline

◆ Select() [3/3]

void UE::Geometry::FMeshFaceSelection::Select ( TFunctionRef< bool(int)>  SelectF)
inline

◆ SelectEdgeTris()

void UE::Geometry::FMeshFaceSelection::SelectEdgeTris ( int  eid)
inline

◆ SelectGroup()

void UE::Geometry::FMeshFaceSelection::SelectGroup ( int  gid)
inline

◆ SelectGroupInverse()

void UE::Geometry::FMeshFaceSelection::SelectGroupInverse ( int  gid)
inline

◆ SelectVertexOneRing()

void UE::Geometry::FMeshFaceSelection::SelectVertexOneRing ( int  vid)
inline

◆ SelectVertexOneRings()

void UE::Geometry::FMeshFaceSelection::SelectVertexOneRings ( TArrayView< const int >  Vertices)
inline

◆ SetDifference()

template<typename EnumerableType , typename StorageType >
void UE::Geometry::FMeshFaceSelection::SetDifference ( const EnumerableType SubtractSet,
StorageType &  DifferenceStorage 
) const
inline

Find the elements in current selection that are not in SubtractSet, and store in DifferenceStorage

◆ SetIntersection()

template<typename EnumerableType , typename StorageType >
void UE::Geometry::FMeshFaceSelection::SetIntersection ( const EnumerableType IntersectSet,
StorageType &  IntersectionStorage 
) const
inline

Find the elements in current selection that are also in IntersectSet, and store in IntersectionStorage


The documentation for this class was generated from the following files: