计算网格OpenMesh的顶点效价

时间:2013-02-24 09:28:31

标签: 3d computational-geometry mesh vertex 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
    }
}

效价计数与网格计数不同(参见std :: cout)。我知道我错过了什么,有谁能看出错误在哪里?

更新

我使用以下代码

使其工作
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 个答案:

答案 0 :(得分:2)

你应该试试这个:

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数据结构的简要描述。