diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index 5c3d87bbb3a..3ebc983c9d4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -1204,14 +1204,28 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { CGAL::Three::Scene_item* item = scene->item(i); Scene_polyhedron_item* poly_item = qobject_cast(item); if(!poly_item) continue; - + if(!poly_item->polyhedron()->is_pure_triangle()) + { + messages->warning(QString("%1 ignored (not a triangulated mesh)").arg(poly_item->name())); + continue; + } if(facet_trees.find(poly_item) == facet_trees.end()) { facet_trees[poly_item] = new Facet_tree(); PPMAP pmap; - facet_trees[poly_item]->insert(faces(*(poly_item->polyhedron())).first, - faces(*(poly_item->polyhedron())).second, - *poly_item->polyhedron(), - pmap ); + //filter facets to ignore degenerated ones + for(Polyhedron::Facet_iterator + fit = poly_item->polyhedron()->facets_begin(), + end = poly_item->polyhedron()->facets_end(); + fit!=end; ++fit) + { + Polyhedron::Point a(fit->halfedge()->vertex()->point()), + b(fit->halfedge()->next()->vertex()->point()), + c(fit->halfedge()->prev()->vertex()->point()); + + if(!CGAL::collinear(a,b,c)) + facet_trees[poly_item]->insert(Facet_primitive(fit, *poly_item->polyhedron(), pmap)); + } + Scene_aabb_item* aabb_item = new Scene_aabb_item(*facet_trees[poly_item]); aabb_item->setName(tr("AABB tree of %1").arg(poly_item->name())); aabb_item->setRenderingMode(Wireframe);