From 4682f8d6b830709d129bb223b3b2670e4b5873cc Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 19 Jul 2016 15:27:06 +0200 Subject: [PATCH 1/3] Filters the facets of the polyhedrons to only keep the non-degenerated ones. --- .../Plugins/AABB_tree/Cut_plugin.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index 5c3d87bbb3a..975ae1fc6c6 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -1208,10 +1208,25 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { 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, + //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()); + + Polyhedron::Traits::Collinear_3 collinear = poly_item->polyhedron()->traits().collinear_3_object(); + bool test = collinear(a,b,c); + if(!test) + facet_trees[poly_item]->insert(Facet_primitive(fit, *poly_item->polyhedron(), pmap)); + } + + + /* insert(faces(*(poly_item->polyhedron())).first, faces(*(poly_item->polyhedron())).second, *poly_item->polyhedron(), - pmap ); + 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); From f27b08cf7899ef1e07834f0652bf7e77fc55f6db Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Tue, 19 Jul 2016 15:38:42 +0200 Subject: [PATCH 2/3] Plugin ignores non pure triangle polyhedrons. --- Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index 975ae1fc6c6..ee33eee68fc 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -1204,7 +1204,11 @@ 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 pure triangle)").arg(poly_item->name())); + continue; + } if(facet_trees.find(poly_item) == facet_trees.end()) { facet_trees[poly_item] = new Facet_tree(); PPMAP pmap; From 181c432e154062b36b31def34cfb0c7824ac2ff7 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Wed, 20 Jul 2016 09:36:01 +0200 Subject: [PATCH 3/3] Clean up - Refrase the warning - remove commented code - realigned long code - use CGAL::collinear instead of the Polyhedron traits. --- .../Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index ee33eee68fc..3ebc983c9d4 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -1206,31 +1206,26 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { if(!poly_item) continue; if(!poly_item->polyhedron()->is_pure_triangle()) { - messages->warning(QString("%1 ignored (not pure triangle)").arg(poly_item->name())); + 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; //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) + 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()); - Polyhedron::Traits::Collinear_3 collinear = poly_item->polyhedron()->traits().collinear_3_object(); - bool test = collinear(a,b,c); - if(!test) + if(!CGAL::collinear(a,b,c)) facet_trees[poly_item]->insert(Facet_primitive(fit, *poly_item->polyhedron(), pmap)); } - - /* insert(faces(*(poly_item->polyhedron())).first, - faces(*(poly_item->polyhedron())).second, - *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);