#openmesh
#openmesh
Вопрос:
Есть ли в OpenMesh легкодоступная функция, которая возвращает дескриптор ребра, соединяющий две вершины? Для половинных ребер есть find_halfedge(vertex1, vertex2)
функция, но я не смог найти соответствующую find_edge(vertex1, vertex2)
функцию. В настоящее время я использую свой собственный, но мне было интересно, есть ли лучший способ, чем этот. По сути, я перебираю окружающие ребра двух вершин и проверяю, куда указывают их полукруги:
MyMesh::EdgeHandle find_edge(MyMesh amp; mesh, MyMesh::VertexHandle amp; v1, MyMesh::VertexHandle amp; v2 ){
for (MyMesh::VertexEdgeIter edge = mesh.ve_iter(v1); edge.is_valid(); edge){
if( (mesh.from_vertex_handle((*edge).h0())==v1) amp;amp; (mesh.to_vertex_handle((*edge).h0())==v2)){
return *edge;
}
if( (mesh.from_vertex_handle((*edge).h0())==v2) amp;amp; (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;
}
Ответ №1:
Встроенного find_edge
метода нет, но вы можете легко создать его find_halfedge
, поскольку halfedges знают, к какому краю они принадлежат:
MyMesh::EdgeHandle find_edge(const MyMeshamp; 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;
}
}