У меня есть CGAL surface_mesh из треугольников с некоторыми самопересекающимися треугольниками, которые я пытаюсь удалить, чтобы создать непрерывную оболочку из 2 коллекторов, в конечном счете, для печати.
Я пытался использовать remove_self_intersection () и autorefine_and_remove_self_intersections () из этого ответа .Первое удаляет только несколько самопересечений, а второе полностью удаляет мою сетку.
Итак, я пробую свой собственный подход - я нахожу самопересечения , а затем пытаюсь удалить их.Я попытался использовать низкий уровень remove_face , но границы впоследствии не обнаруживаются, поэтому я не могу заполнить получившиеся отверстия. Этот ответ относится к использованию Euler remove_face более высокого уровня, но этот метод, и make_hole, похоже, полностью отбрасывают мою сетку.
Вот выдержка (я использую break, чтобы посмотреть, смогу ли яудалить хотя бы один треугольник, и я просто пытаюсь с первой парой):
vector<pair<face_descriptor, face_descriptor> > intersected_tris;
PMP::self_intersections(mesh, back_inserter(intersected_tris));
for (pair<face_descriptor, face_descriptor> &p : intersected_tris) {
CGAL::Euler::remove_face(mesh.halfedge(get<0>(p)), mesh);
break;
}
Здесь - пример выходных данных, прежде чем я попытаюсь удалить самопересечения.