这是我第一次使用 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;
}
}
现在两个数字匹配。但是,我想知道是否可以使用我放置的第一个代码来实现相同的功能。思路应该是一样的。