본문 바로가기
OpenMesh

VertexVertexIter

by DarkRock 2024. 11. 15.
반응형

VertexVertexIter 사용법

VertexVertexIter는 OpenMesh에서 특정 Vertex와 연결된 인접 Vertex들을 순회하는 데 사용하는 이터레이터입니다. 이를 통해 메쉬의 Vertex 인접 정보를 탐색할 수 있으며, 메쉬 편집과 분석 작업에서 유용하게 사용할 수 있습니다. 예를 들어, 특정 Vertex의 주변 이웃들과의 거리 계산, 평활화 연산, 또는 국소적인 메쉬 변형에 활용됩니다.
vv_iter() 함수를 통해 VertexVertexIter를 사용할 수 있으며, is_valid() 함수를 통해 유효성을 검사하면서 순회를 진행합니다.

 

 


C++ 예제 코드

다음은 OpenMesh에서 VertexVertexIter를 사용해 특정 Vertex와 인접한 모든 Vertex를 순회하면서 각 이웃 Vertex의 ID와 좌표를 출력하는 예제입니다.

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::VertexVertexIter vv_it = mesh.vv_iter(vh); vv_it.is_valid(); ++vv_it) 
	{		
		MyMesh::Point pos = mesh.point(*vv_it);
		std::cout << "Adjacent Vertex ID: " << vv_it->idx()
			<< " Position: (" << pos[0] << ", " << pos[1] << ", " << pos[2] << ")" << std::endl;
	}

 


코드 설명

- MyMesh::VertexHandle vh = mesh.vertex_handle(0);를 통해 ID가 0인 Vertex를 선택합니다. 이 Vertex를 기준으로 인접 Vertex를 순회합니다.
- mesh.vv_iter(vh)를 통해 VertexVertexIter를 초기화하고, 이 이터레이터를 사용해 vh에 인접한 모든 Vertex를 순회합니다.
- vv_it.is_valid()가 true인 동안 반복문이 실행되며, 각 이웃 Vertex의 위치를 mesh.point(*vv_it)로 가져올 수 있습니다.
- 각 인접 Vertex의 ID(vv_it->idx())와 위치 좌표를 출력하여 확인할 수 있습니다.

 


VertexVertexIter 활용

VertexVertexIter는 특정 Vertex에 연결된 모든 인접 Vertex 정보를 쉽게 접근하고 출력하는 데 사용됩니다. 이를 통해 특정 Vertex 주변의 국소적인 구조를 분석할 수 있으며, 인접한 Vertex들과의 연산을 통해 메쉬의 평활화, 경계 탐색, 인접 관계를 기반으로 한 연산을 수행할 수 있습니다.

반응형

'OpenMesh' 카테고리의 다른 글

FaceFaceIter  (2) 2024.11.17
VertexFaceIter  (1) 2024.11.16
HalfedgeIterator  (0) 2024.11.14
FaceIterator  (0) 2024.11.13
Edge Flip  (0) 2024.11.12