Misc improvements to stats in the demo

This commit is contained in:
Mael Rouxel-Labbé 2022-09-03 14:01:10 +02:00
parent 25184ee42c
commit db12deb0b2
7 changed files with 111 additions and 67 deletions

View File

@ -1806,7 +1806,7 @@ void MainWindow::updateInfo() {
QString item_filename = item->property("source filename").toString();
CGAL::Bbox_3 bbox = item->bbox();
if(bbox !=CGAL::Bbox_3())
item_text += QString("<div>Bounding box: min (%1,%2,%3), max (%4,%5,%6), dimensions (%7, %8, %9)</div>")
item_text += QString("<div>Bounding box:<br>&nbsp;min (%1, %2, %3),<br>&nbsp;max (%4, %5, %6),<br>&nbsp;dimensions (%7, %8, %9)</div>")
.arg(bbox.xmin(),0, 'g', 17)
.arg(bbox.ymin(),0, 'g', 17)
.arg(bbox.zmin(),0, 'g', 17)

View File

@ -911,32 +911,34 @@ void Scene_polygon_soup_item::repair(bool erase_dup, bool req_same_orientation)
CGAL::Three::Scene_item::Header_data Scene_polygon_soup_item::header() const
{
CGAL::Three::Scene_item::Header_data data;
//categories
//categories
data.categories.append(std::pair<QString,int>(QString("Properties"),2));
data.categories.append(std::pair<QString,int>(QString("Vertices"),1));
data.categories.append(std::pair<QString,int>(QString("Polygons"),4));
data.categories.append(std::pair<QString,int>(QString("Polygons"),2));
data.categories.append(std::pair<QString,int>(QString("Edges"),6));
data.categories.append(std::pair<QString,int>(QString("Angles"),3));
//titles
data.titles.append(QString("Pure Triangle"));
data.titles.append(QString("Pure Quad"));
data.titles.append(QString("#Points"));
data.titles.append(QString("#Polygons"));
data.titles.append(QString("Pure Triangle"));
data.titles.append(QString("Pure Quad"));
data.titles.append(QString("#Degenerate Polygons"));
data.titles.append(QString("#Edges"));
data.titles.append(QString("#Degenerate Edges"));
data.titles.append(QString("Minimum Length"));
data.titles.append(QString("Maximum Length"));
data.titles.append(QString("Median Length"));
data.titles.append(QString("Mean Length"));
data.titles.append(QString("#Degenerate Edges"));
data.titles.append(QString("Minimum"));
data.titles.append(QString("Maximum"));
data.titles.append(QString("Average"));
return data;
}
@ -954,7 +956,7 @@ QString Scene_polygon_soup_item::computeStats(int type)
case NB_EDGES:
return QString::number(d->nb_lines/6);
case NB_DEGENERATED_FACES:
case NB_DEGENERATE_FACES:
{
if(d->is_triangle)
{
@ -968,11 +970,11 @@ QString Scene_polygon_soup_item::computeStats(int type)
return QString::number(d->minl);
case MAX_LENGTH:
return QString::number(d->maxl);
case MID_LENGTH:
case MED_LENGTH:
return QString::number(d->midl);
case MEAN_LENGTH:
return QString::number(d->meanl);
case NB_NULL_LENGTH:
case NB_DEGENERATE_EDGES:
return QString::number(d->nb_null_edges);
case MIN_ANGLE:

View File

@ -154,19 +154,25 @@ public:
const Edges& non_manifold_edges() const;
void initializeBuffers(CGAL::Three::Viewer_interface *) const Q_DECL_OVERRIDE;
void computeElements() const Q_DECL_OVERRIDE;
//statistics
enum STATS {
NB_VERTICES = 0,
NB_FACETS,
IS_PURE_TRIANGLE,
enum STATS
{
IS_PURE_TRIANGLE = 0,
IS_PURE_QUAD,
NB_DEGENERATED_FACES,
NB_VERTICES,
NB_FACETS,
NB_DEGENERATE_FACES,
NB_EDGES,
NB_DEGENERATE_EDGES,
MIN_LENGTH,
MAX_LENGTH,
MID_LENGTH,
MED_LENGTH,
MEAN_LENGTH,
NB_NULL_LENGTH,
MIN_ANGLE,
MAX_ANGLE,
MEAN_ANGLE

View File

@ -2360,9 +2360,9 @@ QString Scene_polyhedron_selection_item::computeStats(int type)
{
case MIN_LENGTH:
case MAX_LENGTH:
case MID_LENGTH:
case MED_LENGTH:
case MEAN_LENGTH:
case NB_NULL_LENGTH:
case NB_DEGENERATE_EDGES:
if(selected_edges.size() == 0)
return QString("n/a");
else
@ -2488,7 +2488,7 @@ QString Scene_polyhedron_selection_item::computeStats(int type)
case GENUS:
return QString("n/a");
break;
case NB_DEGENERATED_FACES:
case NB_DEGENERATE_FACES:
{
if(is_triangle_mesh(*d->poly))
{
@ -2529,11 +2529,11 @@ QString Scene_polyhedron_selection_item::computeStats(int type)
return QString::number(minl);
case MAX_LENGTH:
return QString::number(maxl);
case MID_LENGTH:
case MED_LENGTH:
return QString::number(midl);
case MEAN_LENGTH:
return QString::number(meanl);
case NB_NULL_LENGTH:
case NB_DEGENERATE_EDGES:
return QString::number(number_of_null_length_edges);
case MIN_ANGLE:
@ -2542,7 +2542,7 @@ QString Scene_polyhedron_selection_item::computeStats(int type)
return QString::number(maxi);
case MEAN_ANGLE:
return QString::number(ave);
case HOLES:
case NB_HOLES:
{
return QString("n/a");
}
@ -2592,24 +2592,26 @@ CGAL::Three::Scene_item::Header_data Scene_polyhedron_selection_item::header() c
CGAL::Three::Scene_item::Header_data data;
//categories
data.categories.append(std::pair<QString,int>(QString("Properties"),10));
data.categories.append(std::pair<QString,int>(QString("Properties"),8));
data.categories.append(std::pair<QString,int>(QString("Vertices"),1));
data.categories.append(std::pair<QString,int>(QString("Faces"),10));
data.categories.append(std::pair<QString,int>(QString("Edges"),7));
data.categories.append(std::pair<QString,int>(QString("Angles"),2));
data.categories.append(std::pair<QString,int>(QString("Angles"),3));
//titles
data.titles.append(QString("#Vertices"));
data.titles.append(QString("#Connected Components"));
data.titles.append(QString("#Border Edges"));
data.titles.append(QString("#Connected Components of the Boundary"));
data.titles.append(QString("Genus"));
data.titles.append(QString("Pure Triangle"));
data.titles.append(QString("Pure Quad"));
data.titles.append(QString("#Degenerate Faces"));
data.titles.append(QString("Connected Components of the Boundary"));
data.titles.append(QString("Area"));
data.titles.append(QString("Volume"));
data.titles.append(QString("Self-Intersecting"));
data.titles.append(QString("#Vertices"));
data.titles.append(QString("#Faces"));
data.titles.append(QString("#Degenerate Faces"));
data.titles.append(QString("Min Area"));
data.titles.append(QString("Max Area"));
data.titles.append(QString("Median Area"));
@ -2618,16 +2620,19 @@ CGAL::Three::Scene_item::Header_data Scene_polyhedron_selection_item::header() c
data.titles.append(QString("Min Aspect-Ratio"));
data.titles.append(QString("Max Aspect-Ratio"));
data.titles.append(QString("Mean Aspect-Ratio"));
data.titles.append(QString("Genus"));
data.titles.append(QString("#Edges"));
data.titles.append(QString("#Border Edges"));
data.titles.append(QString("#Degenerate Edges"));
data.titles.append(QString("Minimum Length"));
data.titles.append(QString("Maximum Length"));
data.titles.append(QString("Median Length"));
data.titles.append(QString("Mean Length"));
data.titles.append(QString("#Degenerate Edges"));
data.titles.append(QString("Minimum"));
data.titles.append(QString("Maximum"));
data.titles.append(QString("Average"));
return data;
}

View File

@ -1085,18 +1085,24 @@ protected :
public:
//statistics
enum STATS {
NB_VERTICES = 0,
NB_CONNECTED_COMPOS,
NB_BORDER_EDGES,
enum STATS
{
// Properties
NB_CONNECTED_COMPOS = 0,
NB_HOLES,
GENUS,
IS_PURE_TRIANGLE,
IS_PURE_QUAD,
NB_DEGENERATED_FACES,
HOLES,
AREA,
VOLUME,
SELFINTER,
// Vertices
NB_VERTICES,
// Facets
NB_FACETS,
NB_DEGENERATE_FACES,
MIN_AREA,
MAX_AREA,
MED_AREA,
@ -1105,13 +1111,17 @@ public:
MIN_ASPECT_RATIO,
MAX_ASPECT_RATIO,
MEAN_ASPECT_RATIO,
GENUS,
// Edges
NB_EDGES,
NB_BORDER_EDGES,
NB_DEGENERATE_EDGES,
MIN_LENGTH,
MAX_LENGTH,
MID_LENGTH,
MED_LENGTH,
MEAN_LENGTH,
NB_NULL_LENGTH,
// Angles
MIN_ANGLE,
MAX_ANGLE,
MEAN_ANGLE

View File

@ -889,7 +889,7 @@ QString Scene_surface_mesh_item::toolTip() const
.arg(num_faces(*d->smesh_))
.arg(this->renderingModeName())
.arg(this->color().name());
str += QString("<br />Number of isolated vertices: %1<br />").arg(getNbIsolatedvertices());
return str;
}
@ -1625,9 +1625,9 @@ QString Scene_surface_mesh_item::computeStats(int type)
{
case MIN_LENGTH:
case MAX_LENGTH:
case MID_LENGTH:
case MED_LENGTH:
case MEAN_LENGTH:
case NB_NULL_LENGTH:
case NB_DEGENERATE_EDGES:
edges_length(d->smesh_, minl, maxl, meanl, midl, d->number_of_null_length_edges);
}
@ -1683,6 +1683,8 @@ QString Scene_surface_mesh_item::computeStats(int type)
{
case NB_VERTICES:
return QString::number(num_vertices(*d->smesh_));
case NB_ISOLATED_VERTICES:
return QString::number(this->getNbIsolatedvertices());
case HAS_NM_VERTICES:
{
if(d->has_nm_vertices)
@ -1714,7 +1716,7 @@ QString Scene_surface_mesh_item::computeStats(int type)
case NB_EDGES:
return QString::number(num_halfedges(*d->smesh_) / 2);
case NB_DEGENERATED_FACES:
case NB_DEGENERATE_FACES:
{
if(is_triangle_mesh(*d->smesh_))
{
@ -1786,11 +1788,11 @@ QString Scene_surface_mesh_item::computeStats(int type)
return QString::number(minl);
case MAX_LENGTH:
return QString::number(maxl);
case MID_LENGTH:
case MED_LENGTH:
return QString::number(midl);
case MEAN_LENGTH:
return QString::number(meanl);
case NB_NULL_LENGTH:
case NB_DEGENERATE_EDGES:
return QString::number(d->number_of_null_length_edges);
case MIN_ANGLE:
@ -1799,7 +1801,7 @@ QString Scene_surface_mesh_item::computeStats(int type)
return QString::number(maxi);
case MEAN_ANGLE:
return QString::number(ave);
case HOLES:
case NB_HOLES:
return QString::number(nb_holes(d->smesh_));
case MIN_AREA:
@ -1837,25 +1839,29 @@ CGAL::Three::Scene_item::Header_data Scene_surface_mesh_item::header() const
CGAL::Three::Scene_item::Header_data data;
//categories
data.categories.append(std::pair<QString,int>(QString("Properties"),11));
data.categories.append(std::pair<QString,int>(QString("Properties"),9));
data.categories.append(std::pair<QString,int>(QString("Vertices"),2));
data.categories.append(std::pair<QString,int>(QString("Faces"),10));
data.categories.append(std::pair<QString,int>(QString("Edges"),6));
data.categories.append(std::pair<QString,int>(QString("Edges"),7));
data.categories.append(std::pair<QString,int>(QString("Angles"),3));
//titles
data.titles.append(QString("#Vertices"));
data.titles.append(QString("Has Non-manifold Vertices"));
data.titles.append(QString("#Connected Components"));
data.titles.append(QString("#Border Edges"));
data.titles.append(QString("#Connected Components of the Boundary"));
data.titles.append(QString("Genus"));
data.titles.append(QString("Pure Triangle"));
data.titles.append(QString("Pure Quad"));
data.titles.append(QString("#Degenerate Faces"));
data.titles.append(QString("Connected Components of the Boundary"));
data.titles.append(QString("Area"));
data.titles.append(QString("Volume"));
data.titles.append(QString("Self-Intersecting"));
data.titles.append(QString("Has Non-manifold Vertices"));
data.titles.append(QString("#Vertices"));
data.titles.append(QString("#Isolated Vertices"));
data.titles.append(QString("#Faces"));
data.titles.append(QString("#Degenerate Faces"));
data.titles.append(QString("Min Area"));
data.titles.append(QString("Max Area"));
data.titles.append(QString("Median Area"));
@ -1864,16 +1870,19 @@ CGAL::Three::Scene_item::Header_data Scene_surface_mesh_item::header() const
data.titles.append(QString("Min Aspect-Ratio"));
data.titles.append(QString("Max Aspect-Ratio"));
data.titles.append(QString("Mean Aspect-Ratio"));
data.titles.append(QString("Genus"));
data.titles.append(QString("#Edges"));
data.titles.append(QString("#Border Edges"));
data.titles.append(QString("#Degenerate Edges"));
data.titles.append(QString("Minimum Length"));
data.titles.append(QString("Maximum Length"));
data.titles.append(QString("Median Length"));
data.titles.append(QString("Mean Length"));
data.titles.append(QString("#Degenerate Edges"));
data.titles.append(QString("Minimum"));
data.titles.append(QString("Maximum"));
data.titles.append(QString("Average"));
return data;
}

View File

@ -104,20 +104,28 @@ public:
bool save(std::ostream& out) const;
bool save_obj(std::ostream& out) const;
bool load_obj(std::istream& in);
//statistics
enum STATS {
NB_VERTICES = 0,
HAS_NM_VERTICES,
NB_CONNECTED_COMPOS,
NB_BORDER_EDGES,
enum STATS
{
// Properties
NB_CONNECTED_COMPOS = 0,
NB_HOLES,
GENUS,
IS_PURE_TRIANGLE,
IS_PURE_QUAD,
NB_DEGENERATED_FACES,
HOLES,
AREA,
VOLUME,
SELFINTER,
HAS_NM_VERTICES,
// Vertices
NB_VERTICES,
NB_ISOLATED_VERTICES,
// Facets
NB_FACETS,
NB_DEGENERATE_FACES,
MIN_AREA,
MAX_AREA,
MED_AREA,
@ -126,13 +134,17 @@ public:
MIN_ASPECT_RATIO,
MAX_ASPECT_RATIO,
MEAN_ASPECT_RATIO,
GENUS,
// Edges
NB_EDGES,
NB_BORDER_EDGES,
NB_DEGENERATE_EDGES,
MIN_LENGTH,
MAX_LENGTH,
MID_LENGTH,
MED_LENGTH,
MEAN_LENGTH,
NB_NULL_LENGTH,
// Angles
MIN_ANGLE,
MAX_ANGLE,
MEAN_ANGLE