본문 바로가기
OpenMesh

Incoming and outgoing halfedges

by DarkRock 2024. 11. 22.
반응형

Incoming and Outgoing Halfedges 탐색하기

OpenMesh에서는 Incoming Halfedge와 Outgoing Halfedge를 탐색하기 위해 각각 vih_iter와 voh_iter를 사용합니다. 이 두 반복자는 특정 Vertex를 중심으로 Halfedge의 방향성을 탐색할 수 있도록 설계되었습니다.
- Incoming Halfedge: 특정 Vertex를 시작점으로 가지는 Halfedge입니다.
- Outgoing Halfedge: 특정 Vertex를 끝점으로 가지는 Halfedge입니다.

 

 

 

C++ 예제 코드

다음은 voh_iter와 vih_iter를 사용하여 특정 Vertex에서 나가는 및 들어오는 Halfedge를 탐색하고, 연결된 정보를 출력하는 예제입니다.

 MyMesh mesh;

	if (!OpenMesh::IO::read_mesh(mesh, "example.obj")) 
    {
        std::cerr << "Error: Cannot read mesh file." << std::endl;
        return 1;
    }
    
    MyMesh::VertexHandle vh = mesh.vertex_handle(0);

    std::cout << "Outgoing Halfedges for Vertex " << vh.idx() << ":" << std::endl;
    for (MyMesh::VertexOHIter voh_it = mesh.voh_iter(vh); voh_it.is_valid(); ++voh_it) 
    {
        MyMesh::HalfedgeHandle heh = *voh_it;
        MyMesh::VertexHandle to_vh = mesh.to_vertex_handle(heh);
        std::cout << "  Halfedge from Vertex " << vh.idx() 
                  << " to Vertex " << to_vh.idx() << std::endl;
    }
    
    std::cout << "Incoming Halfedges for Vertex " << vh.idx() << ":" << std::endl;
    for (MyMesh::VertexIHIter vih_it = mesh.vih_iter(vh); vih_it.is_valid(); ++vih_it) 
    {
        MyMesh::HalfedgeHandle heh = *vih_it;
        MyMesh::VertexHandle from_vh = mesh.from_vertex_handle(heh);
        std::cout << "  Halfedge from Vertex " << from_vh.idx() 
                  << " to Vertex " << vh.idx() << std::endl;
    }



다음 코드는 Vertex에서 나가는 Edge와 들어오는 Edge의 길이를 계산하여 출력하는 예제입니다.

MyMesh::VertexHandle vh = mesh.vertex_handle(0);
for (MyMesh::VertexOHIter voh_it = mesh.voh_iter(vh); voh_it.is_valid(); ++voh_it)
{
    MyMesh::EdgeHandle eh = mesh.edge_handle(*voh_it);
    float length = mesh.calc_edge_length(eh);
    std::cout << "  Edge ID: " << eh.idx() << ", Length: " << length << std::endl;
}

for (MyMesh::VertexIHIter vih_it = mesh.vih_iter(vh); vih_it.is_valid(); ++vih_it) 
{
    MyMesh::EdgeHandle eh = mesh.edge_handle(*vih_it);
    float length = mesh.calc_edge_length(eh);
    std::cout << "  Edge ID: " << eh.idx() << ", Length: " << length << std::endl;
}



vih_iter와 voh_iter는 OpenMesh에서 Vertex와 연결된 Halfedge를 탐색하는 데 중요한 도구입니다. 위 예제는 Incoming 및 Outgoing Halfedge의 탐색 방법과 이를 활용한 분석 방법을 보여주며, 메쉬 데이터의 구조적 이해와 조작에 유용하게 사용할 수 있습니다.

반응형

'OpenMesh' 카테고리의 다른 글

Delete Face  (0) 2024.11.24
Delete Vertex  (0) 2024.11.23
Normal  (0) 2024.11.21
To from vertices  (0) 2024.11.20
FaceEdgeIter  (0) 2024.11.19