교차 세그먼트의 각 끝점을 분석하여 EVertexType으로 분류한다.
의사 코드
// 각 교차 세그먼트
for ( int SegIdx = 0, SegCount = Intersections.Segments.Num(); SegIdx < SegCount; SegIdx++ )
{
// 세그먼트의 양 끝점
for ( int SegPtIdx = 0; SegPtIdx < 2; SegPtIdx++ )
{
// 기존 정점과 거리 < SnapTolerance
int OnVertexIdx = OnVertex( Tri, PtOnMesh.Pos );
if ( OnVertexIdx > -1 )
{
// Vertex 타입으로 분류
PtOnMesh.Type = EVertexType::Vertex;
PtOnMesh.ElemID = TriVIDs[ OnVertexIdx ];
continue;
}
// 엣지까지 거리 < SnapTolerance
int OnEdgeIdx = OnEdge( Tri, PtOnMesh.Pos );
if ( OnEdgeIdx > -1 )
{
// Edge 타입으로 분류
PtOnMesh.Type = EVertexType::Edge;
PtOnMesh.ElemID = Mesh->GetTriEdge( SegToEls.BaseTID, OnEdgeIdx );
// EdgeVertices에 추가
EdgeVertices.Add( PtOnMesh.ElemID, NewPtIdx );
continue;
}
// Face 타입으로 분류
PtOnMesh.Type = EVertexType::Face;
PtOnMesh.ElemID = SegToEls.BaseTID;
// FaceVertices에 추가
FaceVertices.Add( PtOnMesh.ElemID, NewPtIdx );
}
}