3d 计算网格OpenMesh的顶点价

3d 计算网格OpenMesh的顶点价,3d,computational-geometry,mesh,vertex,openmesh,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 = vBeg

这是我第一次使用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
    }
}
Mesh::VertexIter vIterator,vBegin,vEnd;
网格::半边手柄初始边,下一个;
vBegin=网格顶点开始();
vEnd=网格顶点顶点端点();
int顶点价;
对于(vIterator=vBegin;vIterator!=vEnd;++vIterator){
initialEdge=网格\半边缘\句柄(vIterator.handle());
nextEdge=网格\下一个\半边缘\手柄(初始边缘);
顶点价=0;
while(nextEdge!=initialEdge){
顶点价++;
nextEdge=网格\下一个\半边\手柄(nextEdge);
}
if(vIterator==vBegin){
std::cout您应该尝试以下方法:

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);
}

您必须使用相反的半边返回到原始顶点,请看,这里有半边数据结构的简要说明。

是的,我刚刚意识到我的第一个代码是围绕一个三角形运行的。为此,我认为在我的第二个代码后面有类似的东西。
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);
}