From c7a1cdabca1bb483c2a9814b5efe5ccf66f1c711 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 22 Jul 2016 11:30:06 +0200 Subject: [PATCH] Do not display the Signed function for open polyhedra. --- .../Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp index 3cc523e0cfc..efa86a25d90 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/AABB_tree/Cut_plugin.cpp @@ -104,6 +104,8 @@ public: Q_FOREACH(Tree *tree, trees->values()) { + if(is_signed && !qobject_cast(trees->key(tree))->polyhedron()->is_closed()) + continue; FT dist = CGAL::sqrt( tree->squared_distance(query) ); if(dist < min) { @@ -115,8 +117,15 @@ public: distance_function[i][j] = Point_distance(query,min); max_distance_function = (std::max)(min, max_distance_function); + if(is_signed) { + if(!min_tree) + { + distance_function[i][j] = Point_distance(query,DBL_MAX); + max_distance_function = DBL_MAX;//(std::max)(min, max_distance_function); + continue; + } typedef typename Tree::size_type size_type; Simple_kernel::Vector_3 random_vec = random_vector(); @@ -682,6 +691,8 @@ private: Q_FOREACH(Tree *tree, trees->values()) { + if(is_signed && !qobject_cast(trees->key(tree))->polyhedron()->is_closed()) + continue; FT dist = CGAL::sqrt( tree->squared_distance(query) ); if(dist < min) { @@ -690,6 +701,8 @@ private: min_tree = tree; } } + if(min == DBL_MAX) + return; m_distance_function[i][j] = Point_distance(query,min); m_max_distance_function = (std::max)(min, m_max_distance_function); } @@ -1209,6 +1222,10 @@ void Polyhedron_demo_cut_plugin::createCutPlane() { messages->warning(QString("%1 ignored (not a triangulated mesh)").arg(poly_item->name())); continue; } + if(!poly_item->polyhedron()->is_closed()) + { + messages->warning(QString("%1 is not closed. Signed function will not be displayed.").arg(poly_item->name())); + } if(facet_trees.find(poly_item) == facet_trees.end()) { facet_trees[poly_item] = new Facet_tree(); PPMAP pmap;