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