본문 바로가기
OpenMesh

VertexFaceIter

by DarkRock 2024. 11. 16.
반응형

VertexFaceIter 사용법

VertexFaceIter는 OpenMesh에서 특정 Vertex(정점)와 연결된 Face(면)을 순회하는 데 사용하는 이터레이터입니다. 이를 통해 Vertex와 연결된 Face 정보를 탐색하거나, Face에 기반한 작업을 수행할 수 있습니다. 예를 들어, 특정 Vertex에 연결된 Face의 면적을 계산하거나, 각 Face의 속성을 변경할 때 유용합니다.

 

 


C++ 예제 코드

다음은 OpenMesh에서 VertexFaceIter를 사용하여 특정 Vertex에 연결된 모든 Face를 순회하면서 Face의 ID와 각 Face의 중심점 좌표를 출력하는 예제입니다.

 

   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); 
    
    for (MyMesh::VertexFaceIter vf_it = mesh.vf_iter(vh); vf_it.is_valid(); ++vf_it) 
    {
        MyMesh::FaceHandle fh = *vf_it;                
        MyMesh::Point center(0.0, 0.0, 0.0);
        int vertex_count = 0;

        for (MyMesh::FaceVertexIter fv_it = mesh.fv_iter(fh); fv_it.is_valid(); ++fv_it) 
        {
            center += mesh.point(*fv_it);
            ++vertex_count;
        }

        center /= vertex_count;
        std::cout << "  Face center: (" << center[0] << ", " << center[1] << ", " << center[2] << ")" << std::endl;
    }

 

 

 

코드 설명

- mesh.vertex_handle(0)를 사용해 ID가 0인 Vertex를 선택합니다. 이 Vertex와 연결된 Face를 탐색할 것입니다.
- mesh.vf_iter(vh)를 통해 VertexFaceIter를 초기화하고, 해당 Vertex에 연결된 모든 Face를 순회합니다.
- 각 Face에 포함된 Vertex를 순회하기 위해 FaceVertexIter를 사용합니다. Face를 구성하는 Vertex의 좌표를 합산한 뒤 Vertex 수로 나누어 중심점을 계산합니다.
-각 Face의 ID와 중심점 좌표를 출력합니다.

이 예제는 VertexFaceIter를 사용해 메쉬 구조를 탐색하는 기본적인 방법을 보여줍니다. 이를 기반으로 더욱 복잡한 메쉬 처리 작업을 구현할 수 있습니다.

반응형

'OpenMesh' 카테고리의 다른 글

FaceVertexIter  (0) 2024.11.18
FaceFaceIter  (2) 2024.11.17
VertexVertexIter  (0) 2024.11.15
HalfedgeIterator  (0) 2024.11.14
FaceIterator  (0) 2024.11.13