0
yの長さでメッシュの一部を削除するスライス機能を作っています。問題は、メッシュの削除されたフェースエッジを削除しようとすると、無限ループに入ります。サーフェスメッシュ除去エッジ、ループが無限ループに入ります。CGAL
ここで問題が発生します。
//removes edge - puts in infinite loop
BOOST_FOREACH(halfEdge_descriptor hed, halfedges_around_face(mesh.halfedge(fd), mesh)){
edge_descriptor ed = mesh.edge(hed);
mesh.remove_edge(ed);
}
iはhalfedges、繰り返し処理は、反復が必要として、私は
remove_edge(Edge_index編)
に変換することによって、halfedgeを削除しようそれは無限ループに入ります。
誰もがなぜそうするのか説明できますが、どうすれば修正できますか?
フルコード!あなたが反復されている要素を削除:
void Mesh::slice(SurfaceMesh &mesh, double lengthToCut){
typedef SurfaceMesh::Vertex_index vertex_descriptor;
typedef SurfaceMesh::Face_index face_descriptor;
typedef SurfaceMesh::Halfedge_index halfEdge_descriptor;
typedef SurfaceMesh::Edge_index edge_descriptor;
double y = findMaxY(mesh) - lengthToCut; // length of a mesh
//;oops over faces
BOOST_FOREACH(face_descriptor fd, mesh.faces()){
int verticesLargerThan = 0;
//loops over vertices of face
BOOST_FOREACH(vertex_descriptor vd,vertices_around_face(mesh.halfedge(fd), mesh)){
if(CGAL::compare (mesh.point(vd)[1], y) == CGAL::LARGER){
verticesLargerThan++;
// if all vertices y coordinates are larger than double y, then removes face
if(verticesLargerThan == 3){
mesh.remove_face(fd);
//mesh.remove_face(fd);
int removedFaceCounter = 0;
BOOST_FOREACH(face_descriptor rfd,faces_around_face(mesh.halfedge(fd), mesh)){
if(mesh.is_removed(rfd)){
removedFaceCounter++;
}
//remove all edges and vertices of face if face is not linked to any other face
if(removedFaceCounter == 3){
//removes edge - puts in infinite loop
BOOST_FOREACH(halfEdge_descriptor hed, halfedges_around_face(mesh.halfedge(fd), mesh)){
edge_descriptor ed = mesh.edge(hed);
mesh.remove_edge(ed);
}
//removes vertice
BOOST_FOREACH(vertex_descriptor rvd,vertices_around_face(mesh.halfedge(fd), mesh)){
//removes vertice if its not linked to any face
bool allFacesRemoved = true;
BOOST_FOREACH(face_descriptor rfvd, faces_around_target(mesh.halfedge(fd), mesh)){
if(!mesh.is_removed(rfvd)){
allFacesRemoved = false;
break;
}
}
if(allFacesRemoved){
mesh.remove_vertex(rvd);
}
}
}
}
}
}
}
}
すでに見つかっている、愚かな私の笑 – duufous