#include #include "MainWindow.h" #include "Scene.h" #include "Polyhedron_type.h" #include #include #include #include #include void MainWindow::on_actionSelfIntersection_triggered() { if(onePolygonIsSelected()) { QApplication::setOverrideCursor(Qt::WaitCursor); // get active polyhedron int index = getSelectedPolygonIndex(); Polyhedron* pMesh = scene->polyhedron(index); // compute self-intersections typedef std::list::iterator Iterator; typedef CGAL::Box_intersection_d::Box_with_handle_d Box; std::list triangles; // intersecting triangles typedef std::back_insert_iterator > OutputIterator; std::cout << "Self-intersect..."; ::self_intersect(*pMesh,std::back_inserter(triangles)); std::cout << "ok (" << triangles.size() << " triangle(s))" << std::endl; // add intersecting triangles as a new polyhedron, i.e., a triangle soup. if(triangles.size() != 0) { Polyhedron *pSoup = new Polyhedron; Make_triangle_soup soup_builder; soup_builder.run(triangles.begin(),triangles.end(),*pSoup); scene->addPolyhedron(pSoup, tr("%1 (intersecting triangles)").arg(scene->polyhedronName(index)), Qt::magenta, scene->isPolyhedronActivated(index), scene->polyhedronRenderingMode(index)); } QApplication::restoreOverrideCursor(); } }