From 07efe75a709109a9ee97234e7f76c740797c8b04 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Fri, 30 Oct 2020 14:30:18 +0100 Subject: [PATCH] Add a plugin for polylines simplification --- .../Plugins/IO/Polylines_io_plugin.cpp | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp index cdfac0608e5..85d91a60341 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Polylines_io_plugin.cpp @@ -4,10 +4,13 @@ #include #include #include +#include + #include #include #include #include +#include using namespace CGAL::Three; class Polyhedron_demo_polylines_io_plugin : public QObject, @@ -40,8 +43,14 @@ public: actionSplit_polylines= new QAction(tr("Split Selected Polylines"), mainWindow); actionSplit_polylines->setProperty("subMenuName", "Operations on Polylines"); actionSplit_polylines->setObjectName("actionSplitPolylines"); + + actionSimplify_polylines = new QAction(tr("Simplify Selected Polyline"), mainWindow); + actionSimplify_polylines->setProperty("subMenuName", "Operations on Polylines"); + actionSimplify_polylines->setObjectName("actionSimplifyPolylines"); connect(actionSplit_polylines, &QAction::triggered, this, &Polyhedron_demo_polylines_io_plugin::split); connect(actionJoin_polylines, &QAction::triggered, this, &Polyhedron_demo_polylines_io_plugin::join); + connect(actionSimplify_polylines, &QAction::triggered, this, &Polyhedron_demo_polylines_io_plugin::simplify); + } QString name() const override{ return "polylines_io_plugin"; } @@ -52,6 +61,9 @@ public: bool canSave(const CGAL::Three::Scene_item*) override; bool save(QFileInfo fileinfo,QList&) override; bool applicable(QAction* a) const override{ + if( a == actionSimplify_polylines) + return qobject_cast(scene->item( + scene->mainSelectionIndex())); bool all_polylines_selected = true; Q_FOREACH(int index, scene->selectionIndices()) { @@ -73,7 +85,8 @@ public: QList actions() const override{ return QList()<(scene->item(scene->mainSelectionIndex())); + bool ok; + double err = QInputDialog::getDouble(mw, "Brechet Distance", "Enter the approximation error:", pow(0.01*item->diagonalBbox(),2),0,999,8,&ok); + if(!ok) + return; + for(Scene_polylines_item::Polylines_container::iterator + it = item->polylines.begin(); + it!= item->polylines.end(); + ++it) + { + Scene_polylines_item::Polyline out_range; + CGAL::Polygon_mesh_processing::experimental::simplify_polyline(*it, + out_range, + err); + it->clear(); + it->insert(it->begin(), out_range.begin(), out_range.end()); + } + item->invalidateOpenGLBuffers(); + item->redraw(); +} + void Polyhedron_demo_polylines_io_plugin::join() {