교차 세그먼트의 각 끝점을 분석하여 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 );
    }
}