mirror of https://github.com/CGAL/cgal
Addition of a test for the self_intersections
This commit is contained in:
parent
d999f2e526
commit
64f8f4195c
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue