OpenMesh 找到连接两个顶点的边

OpenMesh find edge connecting two vertices

OpenMesh 中是否有现成的函数returns 连接两个顶点的边缘句柄?对于半边有 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;
}

没有 built-in find_edge 方法,但您可以很容易地从 find_halfedge 构造一个方法,因为 halfedges 知道它们属于哪条边:

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