Addition of a test for the self_intersections

This commit is contained in:
Maxime Gimeno 2016-01-04 14:38:53 +01:00
parent d999f2e526
commit 64f8f4195c
3 changed files with 18 additions and 5 deletions

View File

@ -1244,13 +1244,14 @@ void MainWindow::updateInfo() {
int null_edges(0), null_facet(0),isolated(0), polys(0), vertices(0), edges(0), facets(0), total_edges(0), holes(0);
double min_edge(std::pow(2, sizeof(double))), max_edge(0);
double mean(0);
bool all_triangle = true;
bool all_triangle = true, none_self_interset = true;
Q_FOREACH(int id, getSelectedSceneItemIndices())
{
Scene_polyhedron_item* item = qobject_cast<Scene_polyhedron_item*>(scene->item(id));
if(item)
{
all_triangle &= item->triangulated();
none_self_interset &= item->self_intersected();
polys++;
vertices += item->polyhedron()->size_of_vertices();
edges += item->polyhedron()->size_of_halfedges()/2;
@ -1315,7 +1316,11 @@ void MainWindow::updateInfo() {
str += QString("Number of holes : %1<br />").arg(holes);
str += QString("Number of null length edges : %1<br />").arg(null_edges);
if(all_triangle)
str += QString("Number of degenerated faces : %1").arg(null_facet);
str += QString("Number of degenerated faces : %1<br />").arg(null_facet);
if(none_self_interset)
str += QString("No self-intersection");
else
str += QString("There are self-intersections");
str+="</p>";
if(isolated > 0)
str += QString("<br />Number of isolated vertices : %1<br />").arg(isolated);

View File

@ -16,6 +16,7 @@
#include <CGAL/boost/graph/graph_traits_Polyhedron_3.h>
#include <CGAL/Polygon_mesh_processing/connected_components.h>
#include <CGAL/Polygon_mesh_processing/measure.h>
#include <CGAL/Polygon_mesh_processing/self_intersections.h>
#include <CGAL/statistics_helpers.h>
@ -435,8 +436,7 @@ Scene_polyhedron_item::compute_normals_and_vertices(void) const
typedef Kernel::Vector_3 Vector;
typedef Polyhedron::Facet_iterator Facet_iterator;
typedef Polyhedron::Halfedge_around_facet_circulator HF_circulator;
self_intersect = CGAL::Polygon_mesh_processing::does_self_intersect(*poly);
Facet_iterator f = poly->facets_begin();
@ -656,7 +656,7 @@ Scene_polyhedron_item::Scene_polyhedron_item()
nb_lines = 0;
is_triangulated = true;
init();
self_intersect = false;
}
Scene_polyhedron_item::Scene_polyhedron_item(Polyhedron* const p)
@ -676,6 +676,7 @@ Scene_polyhedron_item::Scene_polyhedron_item(Polyhedron* const p)
is_triangulated = true;
init();
invalidate_buffers();
self_intersect = false;
}
Scene_polyhedron_item::Scene_polyhedron_item(const Polyhedron& p)
@ -695,6 +696,7 @@ Scene_polyhedron_item::Scene_polyhedron_item(const Polyhedron& p)
nb_facets = 0;
nb_lines = 0;
invalidate_buffers();
self_intersect = false;
}
Scene_polyhedron_item::~Scene_polyhedron_item()
@ -791,6 +793,10 @@ Scene_polyhedron_item::toolTip() const
str += QString("Median edge length : %1<br />").arg(mid_edges_length);
str += QString("Mean edge length : %1<br />").arg(mean_edges_length);
str += QString("Number of null length edges : %1<br />").arg(number_of_null_length_edges);
if(self_intersect)
str += QString("Does self-intersect<br />");
else
str += QString("Does not self-intersect<br />");
if(is_triangulated)
str += QString("Number of degenerated faces : %1").arg(number_of_degenerated_faces);
if (volume!=-std::numeric_limits<double>::infinity())

View File

@ -68,6 +68,7 @@ public:
double getMeanEdgesLength(){return mean_edges_length;}
double getMidEdgesLength(){return mid_edges_length;}
bool triangulated(){return is_triangulated;}
bool self_intersected(){return !self_intersect;}
public Q_SLOTS:
virtual void invalidate_buffers();
@ -147,6 +148,7 @@ private:
mutable QOpenGLShaderProgram *program;
mutable int number_of_null_length_edges, number_of_degenerated_faces;
mutable double min_edges_length, max_edges_length, mean_edges_length, mid_edges_length;
mutable bool self_intersect;
using CGAL::Three::Scene_item::initialize_buffers;
void initialize_buffers(CGAL::Three::Viewer_interface *viewer = 0) const;