2013-02-24 3 views
1

OpenMesh를 처음 사용하고 메시의 모든 버텍스의 원자가를 계산하는 데 아주 간단한 함수를 사용하려고합니다. 이메쉬의 버텍스 원자가 계산하기 OpenMesh

Mesh::VertexIter vIterator, vBegin, vEnd; 
Mesh::HalfedgeHandle initialEdge, nextEdge; 

vBegin = mesh_.vertices_begin(); 
vEnd = mesh_.vertices_end(); 

int vertexValence; 

for (vIterator = vBegin; vIterator != vEnd; ++vIterator) { 
    initialEdge = mesh_.halfedge_handle(vIterator.handle()); 
    nextEdge = mesh_.next_halfedge_handle(initialEdge); 
    vertexValence = 0; 
    while (nextEdge != initialEdge) { 
     vertexValence++; 
     nextEdge = mesh_.next_halfedge_handle(nextEdge); 
    } 
    if(vIterator == vBegin){ 
     std::cout << "myCount = " << vertexValence << std::endl; // prints 2 
     std::cout << "meshCount = "<< mesh_.valence(vIterator)<< std::endl; // prints 10 
    } 
} 

원자가 수가 메쉬 카운트 (표준 : : cout을 참조) 어떤 다른처럼

내 첫 번째 시도가 보인다. 나는 뭔가를 놓친다는 것을 알고있다.

UPDATE

는 나는 이제 두 번호가 일치를 다음 코드

for(vIterator = vBegin; vIterator != vEnd; ++vIterator){ 
    vertexValence = 0; 
    for (voIterator = mesh_.voh_iter(vIterator); voIterator; ++voIterator) { 
     vertexValence++; 
    } 
    if(vIterator == vBegin){ 
     std::cout << "myCount = " << vertexValence << std::endl; 
     std::cout << "openMeshCount = " << mesh_.valence(vIterator) << std::endl; 
    } 
} 

를 사용하여 작업을했다. 그러나, 나는 그것을 넣을 수있는 첫 번째 코드와 동일한 구현할 수 있는지 알고 싶습니다. 아이디어는 동일해야합니다.

답변

1

당신이 시도해야합니다

for (vIterator = vBegin; vIterator != vEnd; ++vIterator) { 
    vertexValence = 0; 
    initialEdge = mesh_.halfedge_handle(vIterator.handle()); 
    nextEdge = initialEdge; 

    do { 
     vertexValence++; 
     oppositeEdge = mesh_.opposite_halfedge_handle(nextEdge); 
     nextEdge = mesh_.next_halfedge_handle(oppositeEdge); 
    } while (initialEdge != nextEdge); 
} 

당신은 다시 원래의 정점에 갈 반대 halfedge를 사용할 필요가 this page을 살펴보고 halfedge 데이터 구조에 대한 간단한 설명이있다.

+0

예 저는 첫 번째 코드로 삼각형을 돌아 다녔다는 것을 깨달았습니다. 고마워, 내 비슷한 두 번째 코드 뒤에 뭔가 생각합니다. – BRabbit27