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

#include <IsoTriangulator.h>

Public Member Functions

 FIsoTriangulator (FGrid &InGrid, FFaceMesh &OutMesh, const FMeshingTolerances &InTolerance)
 
bool Triangulate ()
 
void BuildNodes ()
 
void BuildLoopSegments ()
 
void BuildInnerSegments ()
 
void GetThinZonesMesh ()
 
void GetThinZoneMesh (const TMap< int32, FLoopNode * > &IndexToNode, const FThinZone2D &ThinZone)
 
void FillMeshNodes ()
 
void BuildInnerSegmentsIntersectionTool ()
 
void FindInnerGridCellSurroundingSmallLoop ()
 
void ConnectCellLoops ()
 
void FindCellContainingBoundaryNodes (TArray< FCell > &Cells)
 
void FindCandidateToConnectCellCornerToLoops (FCell &Cell)
 
void SelectSegmentsToLinkInnerToLoop ()
 
void InitCellCorners (FCell &Cell)
 
void TriangulateOverCycle (const EGridSpace Space)
 
bool FindCycle (FIsoSegment *StartSegment, bool bLeftSide, TArray< FIsoSegment * > &Cycle, TArray< bool > &CycleOrientation)
 
void MeshCycle (const TArray< FIsoSegment * > &Cycle, const TArray< bool > &CycleOrientation)
 
void MeshLargeCycle (const TArray< FIsoSegment * > &Cycle, const TArray< bool > &CycleOrientation)
 
template<uint32 Dim>
void MeshCycleOf (const TArray< FIsoSegment * > &Cycle, const TArray< bool > &CycleOrientation, FMeshPolygonFunc MeshPolygonFunc)
 
bool CanCycleBeMeshed (const TArray< FIsoSegment * > &Cycle, FIntersectionSegmentTool &CycleIntersectionTool)
 
void TriangulateInnerNodes ()
 
void SortLoopNodes ()
 
const FGridGetGrid () const
 

Public Attributes

const FMeshingTolerancesTolerances
 

Protected Attributes

FGridGrid
 
FFaceMeshMesh
 
TArray< int32LoopStartIndex
 
TArray< FLoopNodeLoopNodes
 
int32 LoopNodeCount = 0
 
TArray< FLoopNode * > SortedLoopNodes
 
TArray< FIsoInnerNode * > GlobalIndexToIsoInnerNodes
 
TArray< FIsoInnerNodeInnerNodes
 
int32 InnerNodeCount = 0
 
TFactory< FIsoSegmentIsoSegmentFactory
 
TArray< FIsoSegment * > LoopSegments
 
TArray< FIsoSegment * > ThinZoneSegments
 
TArray< FIsoSegment * > FinalInnerSegments
 
TArray< FIsoSegment * > InnerToOuterSegments
 
TArray< FIsoSegment * > InnerToLoopCandidateSegments
 
FIntersectionSegmentTool LoopSegmentsIntersectionTool
 
FIntersectionSegmentTool InnerSegmentsIntersectionTool
 
FIntersectionIsoSegmentTool InnerToOuterIsoSegmentsIntersectionTool
 
FIntersectionSegmentTool ThinZoneIntersectionTool
 
TArray< int32IndexOfLowerLeftInnerNodeSurroundingALoop
 
TArray< FIsoSegment * > FinalToLoops
 
TArray< FIsoSegment * > CandidateSegments
 
bool bDisplay = false
 
bool bNeedCheckOrientation = false
 

Friends

class FCycleTriangulator
 
class FLoopCleaner
 
class FParametricMesher
 
struct FCell
 

Constructor & Destructor Documentation

◆ FIsoTriangulator()

UE::CADKernel::FIsoTriangulator::FIsoTriangulator ( FGrid InGrid,
FFaceMesh OutMesh,
const FMeshingTolerances InTolerance 
)

Member Function Documentation

◆ BuildInnerSegments()

void UE::CADKernel::FIsoTriangulator::BuildInnerSegments ( )

◆ BuildInnerSegmentsIntersectionTool()

void UE::CADKernel::FIsoTriangulator::BuildInnerSegmentsIntersectionTool ( )

Build the Inner Segments Intersection Tool used to check if a candidate segment crosses the inner mesh

The minimal set of segments of the intersection tool is the boundaries of the inner triangulation.

https://docs.google.com/presentation/d/1qUVOH-2kU_QXBVKyRUcdDy1Y6WGkcaJCiaS8wGjSZ6M/edit?usp=sharing Slide "Boundary Segments Of Inner Triangulation"

◆ BuildLoopSegments()

void UE::CADKernel::FIsoTriangulator::BuildLoopSegments ( )

Build the segments of the loops and check if each loop is self intersecting.

Returns
false if the loop is self intersecting

◆ BuildNodes()

void UE::CADKernel::FIsoTriangulator::BuildNodes ( )

◆ CanCycleBeMeshed()

bool UE::CADKernel::FIsoTriangulator::CanCycleBeMeshed ( const TArray< FIsoSegment * > &  Cycle,
FIntersectionSegmentTool CycleIntersectionTool 
)

◆ ConnectCellLoops()

void UE::CADKernel::FIsoTriangulator::ConnectCellLoops ( )

◆ FillMeshNodes()

void UE::CADKernel::FIsoTriangulator::FillMeshNodes ( )

Fill mesh node data (Position, normal, UV, Index) of the FFaceMesh object

◆ FindCandidateToConnectCellCornerToLoops()

void UE::CADKernel::FIsoTriangulator::FindCandidateToConnectCellCornerToLoops ( FCell Cell)

◆ FindCellContainingBoundaryNodes()

void UE::CADKernel::FIsoTriangulator::FindCellContainingBoundaryNodes ( TArray< FCell > &  Cells)

◆ FindCycle()

bool UE::CADKernel::FIsoTriangulator::FindCycle ( FIsoSegment StartSegment,
bool  bLeftSide,
TArray< FIsoSegment * > &  Cycle,
TArray< bool > &  CycleOrientation 
)

Find in the network a minimal cycle stating from a segment

Returns
false if the new cycle crosses a segment already used

◆ FindInnerGridCellSurroundingSmallLoop()

void UE::CADKernel::FIsoTriangulator::FindInnerGridCellSurroundingSmallLoop ( )

The purpose of the method is to add surrounding segments (boundary of an unitary inner grid cell) to the small loop to intersection tool to prevent traversing inner segments A loop is inside inner segments

| |

| XXX | | XXXXX |

| XXX |

| | https://docs.google.com/presentation/d/1qUVOH-2kU_QXBVKyRUcdDy1Y6WGkcaJCiaS8wGjSZ6M/edit?usp=sharing Slide "Find Inner Grid Cell Surrounding Small Loop" This method finalizes BuildInnerSegmentsIntersectionTool

The purpose is to add surrounding segments to the small loop to intersection tool to prevent traversing inner segments A loop is inside inner segments

| |

| XXX | | XXXXX |

| XXX |

| |

◆ GetGrid()

const FGrid & UE::CADKernel::FIsoTriangulator::GetGrid ( ) const
inline

◆ GetThinZoneMesh()

void UE::CADKernel::FIsoTriangulator::GetThinZoneMesh ( const TMap< int32, FLoopNode * > &  IndexToNode,
const FThinZone2D ThinZone 
)

◆ GetThinZonesMesh()

void UE::CADKernel::FIsoTriangulator::GetThinZonesMesh ( )

Add temporary loops defining thin zones to avoid the tessellation of these zone. These zones are tessellated in a specific process

◆ InitCellCorners()

void UE::CADKernel::FIsoTriangulator::InitCellCorners ( FCell Cell)

◆ MeshCycle()

void UE::CADKernel::FIsoTriangulator::MeshCycle ( const TArray< FIsoSegment * > &  Cycle,
const TArray< bool > &  CycleOrientation 
)

Generate the "Delaunay" tessellation of the cycle. The algorithm is based on frontal process

◆ MeshCycleOf()

template<uint32 Dim>
void UE::CADKernel::FIsoTriangulator::MeshCycleOf ( const TArray< FIsoSegment * > &  Cycle,
const TArray< bool > &  CycleOrientation,
FMeshPolygonFunc  MeshPolygonFunc 
)
inline

◆ MeshLargeCycle()

void UE::CADKernel::FIsoTriangulator::MeshLargeCycle ( const TArray< FIsoSegment * > &  Cycle,
const TArray< bool > &  CycleOrientation 
)

◆ SelectSegmentsToLinkInnerToLoop()

void UE::CADKernel::FIsoTriangulator::SelectSegmentsToLinkInnerToLoop ( )

◆ SortLoopNodes()

void UE::CADKernel::FIsoTriangulator::SortLoopNodes ( )
inline

Sorted loop node array used to have efficient loop proximity node research

◆ Triangulate()

bool UE::CADKernel::FIsoTriangulator::Triangulate ( )

Main method

Returns
false if the tessellation failed

◆ TriangulateInnerNodes()

void UE::CADKernel::FIsoTriangulator::TriangulateInnerNodes ( )

Finalization of the mesh by the tessellation of the inner grid

◆ TriangulateOverCycle()

void UE::CADKernel::FIsoTriangulator::TriangulateOverCycle ( const EGridSpace  Space)

Finalize the tessellation between inner grid boundary and loops. The final set of segments define a network Each minimal cycle is tessellated independently

Friends And Related Symbol Documentation

◆ FCell

◆ FCycleTriangulator

friend class FCycleTriangulator
friend

◆ FLoopCleaner

friend class FLoopCleaner
friend

◆ FParametricMesher

friend class FParametricMesher
friend

Member Data Documentation

◆ bDisplay

bool UE::CADKernel::FIsoTriangulator::bDisplay = false
protected

◆ bNeedCheckOrientation

bool UE::CADKernel::FIsoTriangulator::bNeedCheckOrientation = false
protected

◆ CandidateSegments

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::CandidateSegments
protected

◆ FinalInnerSegments

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::FinalInnerSegments
protected

◆ FinalToLoops

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::FinalToLoops
protected

Segments to link inner to boundary and boundary to boundary From FindIsoSegmentToLinkInnerToBoundary SelectSegmentInCandidateSegments

◆ GlobalIndexToIsoInnerNodes

TArray<FIsoInnerNode*> UE::CADKernel::FIsoTriangulator::GlobalIndexToIsoInnerNodes
protected

GlobalIndexToIsoInnerNodes contains only inner nodes of the grid, if GlobalIndexToIsoInnerNodes[Index] == null, the point is outside the domain

◆ Grid

FGrid& UE::CADKernel::FIsoTriangulator::Grid
protected

◆ IndexOfLowerLeftInnerNodeSurroundingALoop

TArray<int32> UE::CADKernel::FIsoTriangulator::IndexOfLowerLeftInnerNodeSurroundingALoop
protected

Define all the lower left index of grid node that the upper cell is surrounding a loop This is set in FindSegmentIsoUVSurroundingSmallLoop and use in TriangulateInnerNodes to don't generate the both cell triangles

◆ InnerNodeCount

int32 UE::CADKernel::FIsoTriangulator::InnerNodeCount = 0
protected

◆ InnerNodes

TArray<FIsoInnerNode> UE::CADKernel::FIsoTriangulator::InnerNodes
protected

Static array of InnerNodes. Only used for allocation needs

◆ InnerSegmentsIntersectionTool

FIntersectionSegmentTool UE::CADKernel::FIsoTriangulator::InnerSegmentsIntersectionTool
protected

Boundary of the inner grid

◆ InnerToLoopCandidateSegments

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::InnerToLoopCandidateSegments
protected

Waiting list for SelectSegmentsToLinkInnerToLoop Segments are identified in each cell but not directly processed

◆ InnerToOuterIsoSegmentsIntersectionTool

FIntersectionIsoSegmentTool UE::CADKernel::FIsoTriangulator::InnerToOuterIsoSegmentsIntersectionTool
protected

To check if the candidate segment intersect a iso line

◆ InnerToOuterSegments

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::InnerToOuterSegments
protected

◆ IsoSegmentFactory

TFactory<FIsoSegment> UE::CADKernel::FIsoTriangulator::IsoSegmentFactory
protected

◆ LoopNodeCount

int32 UE::CADKernel::FIsoTriangulator::LoopNodeCount = 0
protected

◆ LoopNodes

TArray<FLoopNode> UE::CADKernel::FIsoTriangulator::LoopNodes
protected

◆ LoopSegments

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::LoopSegments
protected

◆ LoopSegmentsIntersectionTool

FIntersectionSegmentTool UE::CADKernel::FIsoTriangulator::LoopSegmentsIntersectionTool
protected

Tool to check if a segment intersect or not existing segments. To be optimal, depending on the segment, only a subset of segment is used. Checks intersection with loop.

◆ LoopStartIndex

TArray<int32> UE::CADKernel::FIsoTriangulator::LoopStartIndex
protected

◆ Mesh

FFaceMesh& UE::CADKernel::FIsoTriangulator::Mesh
protected

◆ SortedLoopNodes

TArray<FLoopNode*> UE::CADKernel::FIsoTriangulator::SortedLoopNodes
protected

◆ ThinZoneIntersectionTool

FIntersectionSegmentTool UE::CADKernel::FIsoTriangulator::ThinZoneIntersectionTool
protected

To check if a candidate segment intersect a thin zone that is already meshed

◆ ThinZoneSegments

TArray<FIsoSegment*> UE::CADKernel::FIsoTriangulator::ThinZoneSegments
protected

◆ Tolerances

const FMeshingTolerances& UE::CADKernel::FIsoTriangulator::Tolerances

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