1

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

1 回答 1

1

没有内置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;
    }
}
于 2020-10-08T07:33:16.290 回答