본문 바로가기
OpenMesh

HalfedgeIterator

by DarkRock 2024. 11. 14.
반응형

HalfedgeIterator 사용법

HalfedgeIterator는 OpenMesh에서 메쉬의 모든 Halfedge를 순회하는 데 사용됩니다. Halfedge는 OpenMesh의 가장 기본적인 요소 중 하나로, 각 Edge를 두 개의 방향성 있는 Halfedge로 나누어 메쉬를 관리합니다. Halfedge는 메쉬의 Topology와 관련된 많은 정보를 담고 있기 때문에, 메쉬의 구조를 분석하거나 변형하는 데 매우 유용합니다.



Halfedge 개념은 아래글을 참고하세요.

2023.11.29 - [OpenMesh] - Halfedge Data Structure(반모서리 자료구조)

 

Halfedge Data Structure(반모서리 자료구조)

OpenMesh는 Halfedge Data Structure를 사용하고 있습니다. 우리말로 반모서리 자료구조라고 부릅니다. Edge를 절반으로 자른 형태라고 해서 반모서리라고 합니다. 이 반모서리 구조는 3D 

darkrock.tistory.com

 

 

 

C++ 예제 코드

다음은 OpenMesh에서 HalfedgeIterator를 사용해 메쉬의 모든 Halfedge를 순회하면서 각 Halfedge의 시작점과 끝점 Vertex 정보를 출력하는 간단한 예제입니다.

MyMesh mesh;
	
	if (!OpenMesh::IO::read_mesh(mesh, "example.obj")) 
	{
		std::cerr << "Error: Cannot read mesh file." << std::endl;
		return 1;
	}
	
	for (MyMesh::HalfedgeIter he_it = mesh.halfedges_begin(); he_it != mesh.halfedges_end(); ++he_it) 
	{	
		MyMesh::VertexHandle from_vh = mesh.from_vertex_handle(*he_it);
		MyMesh::VertexHandle to_vh = mesh.to_vertex_handle(*he_it);
	
		MyMesh::Point from_pos = mesh.point(from_vh);
		MyMesh::Point to_pos = mesh.point(to_vh);

		std::cout << "Halfedge from Vertex ID: " << from_vh.idx()
			<< " (Position: " << from_pos[0] << ", " << from_pos[1] << ", " << from_pos[2] << ")"
			<< " to Vertex ID: " << to_vh.idx()
			<< " (Position: " << to_pos[0] << ", " << to_pos[1] << ", " << to_pos[2] << ")" << std::endl;
	}

 


코드 설명

- mesh.halfedges_begin()과 mesh.halfedges_end()를 사용해 메쉬의 첫 번째 Halfedge부터 마지막 Halfedge까지 순회합니다. 이 이터레이터는 각 Halfedge를 방문하면서, 해당 Halfedge와 관련된 정보를 얻을 수 있습니다.
- mesh.from_vertex_handle(*he_it)과 mesh.to_vertex_handle(*he_it)를 사용해 각 Halfedge의 시작점(Vertex)과 끝점(Vertex) 핸들을 가져옵니다.
- mesh.point(from_vh)와 mesh.point(to_vh)를 사용하여 시작점과 끝점 Vertex의 위치 좌표를 얻을 수 있습니다.
- 각 Halfedge의 시작점과 끝점 Vertex ID와 좌표를 출력합니다.

 


HalfedgeIterator 활용

HalfedgeIterator는 메쉬의 구조를 세밀하게 탐색하거나 분석하는 데 유용합니다. 각 Halfedge는 방향성이 있으므로, Edge에 대해 방향성을 고려한 작업을 수행할 수 있습니다. 예를 들어, 메쉬의 특정 방향에 따라 Edge 정보를 수집하거나, Edge의 방향에 따른 정점 간 거리를 계산할 때 사용할 수 있습니다.

반응형

'OpenMesh' 카테고리의 다른 글

VertexFaceIter  (1) 2024.11.16
VertexVertexIter  (0) 2024.11.15
FaceIterator  (0) 2024.11.13
Edge Flip  (0) 2024.11.12
Collapsing Edges  (0) 2024.11.11