OpenMesh查找连接两个顶点的边

问题描述

OpenMesh中是否有可用的函数返回连接两个顶点的边柄?对于半边,有find_halfedge(vertex1,vertex2)函数,但是我找不到对应的find_edge(vertex1,vertex2)函数。目前,我正在使用自己的方法,但是我想知道是否有比这更好的方法。本质上,我要遍历两个顶点的周围边缘,并检查它们的半边沿指向哪里:

MyMesh::EdgeHandle find_edge(MyMesh & mesh,MyMesh::VertexHandle & v1,MyMesh::VertexHandle & v2 ){
  for (MyMesh::VertexEdgeIter edge =  mesh.ve_iter(v1); edge.is_valid(); ++edge){
    if( (mesh.from_vertex_handle((*edge).h0())==v1) && (mesh.to_vertex_handle((*edge).h0())==v2)){
        return *edge;     
    }
    if( (mesh.from_vertex_handle((*edge).h0())==v2) && (mesh.to_vertex_handle((*edge).h0())==v1)){
        return *edge;     
    }
  }
  std::cout<<"No common edge between v1 and v2"<<std::endl;
  MyMesh::EdgeHandle edge_null;
  return edge_null;
}

解决方法

没有内置的find_edge方法,但是您可以很容易地从find_halfedge构造一个方法,因为半边知道它们属于哪个边:

MyMesh::EdgeHandle find_edge(const MyMesh& m,MyMesh::VertexHandle v1,MyMesh::VertexHandle v2)
{
    MyMesh::HalfedgeHandle heh = m.find_halfedge(v1,v2);
    if (heh.is_valid()) {
        return m.edge_handle(heh);
    }
    else {
        return MyMesh::InvalidEdgeHandle;
    }
}