From 14c65116b1a20cf48ef79f251eb21992555e1d62 Mon Sep 17 00:00:00 2001 From: Maxime Gimeno Date: Thu, 7 Sep 2017 16:37:45 +0200 Subject: [PATCH] Add a dialog to choose the number of iterations in subdivisions_plugin --- .../Subdivision_methods_plugin.cpp | 93 ++++++++++++++----- 1 file changed, 70 insertions(+), 23 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp index 2bbe184b1c4..b91494d2db2 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Plugins/Subdivision_methods/Subdivision_methods_plugin.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include @@ -30,6 +31,7 @@ public: Scene_interface* scene_interface, Messages_interface* m) { + this->mw = mw; messages = m; scene = scene_interface; QAction *actionLoop = new QAction("Loop", mw); @@ -64,25 +66,25 @@ private : Messages_interface* messages; QList _actions; template - void apply_loop(FaceGraphItem* item); + void apply_loop(FaceGraphItem* item, int nb_steps); template - void apply_catmullclark(FaceGraphItem* item); + void apply_catmullclark(FaceGraphItem* item, int nb_steps); template - void apply_sqrt3(FaceGraphItem* item); + void apply_sqrt3(FaceGraphItem* item, int nb_steps); template - void apply_doosabin(FaceGraphItem* item); + void apply_doosabin(FaceGraphItem* item, int nb_steps); }; // end Polyhedron_demo_subdivision_methods_plugin template -void Polyhedron_demo_subdivision_methods_plugin::apply_loop(FaceGraphItem* item) +void Polyhedron_demo_subdivision_methods_plugin::apply_loop(FaceGraphItem* item, int nb_steps) { typename FaceGraphItem::Face_graph* graph = item->face_graph(); QTime time; time.start(); messages->information("Loop subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::Loop_subdivision(*graph, 1); + CGAL::Subdivision_method_3::Loop_subdivision(*graph, nb_steps); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -102,14 +104,26 @@ void Polyhedron_demo_subdivision_methods_plugin::on_actionLoop_triggered() qobject_cast(scene->item(index)); if(!sm_item) return; - apply_loop(sm_item); + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_loop(sm_item, nb_steps); } else - apply_loop(item); + { + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_loop(item, nb_steps); + } } template -void Polyhedron_demo_subdivision_methods_plugin::apply_catmullclark(FaceGraphItem* item) +void Polyhedron_demo_subdivision_methods_plugin::apply_catmullclark(FaceGraphItem* item, int nb_steps) { typename FaceGraphItem::Face_graph* graph = item->face_graph(); if(!graph) return; @@ -117,7 +131,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_catmullclark(FaceGraphIte time.start(); messages->information("Catmull-Clark subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::CatmullClark_subdivision(*graph, 1); + CGAL::Subdivision_method_3::CatmullClark_subdivision(*graph, nb_steps); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -136,15 +150,26 @@ void Polyhedron_demo_subdivision_methods_plugin::on_actionCatmullClark_triggered qobject_cast(scene->item(index)); if(!sm_item) return; - apply_catmullclark(sm_item); + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_catmullclark(sm_item, nb_steps); + } + else{ + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_catmullclark(item, nb_steps); } - else - apply_catmullclark(item); } template -void Polyhedron_demo_subdivision_methods_plugin::apply_sqrt3(FaceGraphItem* item) +void Polyhedron_demo_subdivision_methods_plugin::apply_sqrt3(FaceGraphItem* item, int nb_steps) { typename FaceGraphItem::Face_graph* graph = item->face_graph(); if(!graph) return; @@ -152,7 +177,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_sqrt3(FaceGraphItem* item time.start(); messages->information("Catmull-Clark subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::Sqrt3_subdivision(*graph, 1); + CGAL::Subdivision_method_3::Sqrt3_subdivision(*graph, nb_steps); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -172,15 +197,26 @@ void Polyhedron_demo_subdivision_methods_plugin::on_actionSqrt3_triggered() qobject_cast(scene->item(index)); if(!sm_item) return; - apply_sqrt3(sm_item); + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_sqrt3(sm_item, nb_steps); + } + else{ + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_sqrt3(item, nb_steps); } - else - apply_sqrt3(item); } template -void Polyhedron_demo_subdivision_methods_plugin::apply_doosabin(FaceGraphItem* item) +void Polyhedron_demo_subdivision_methods_plugin::apply_doosabin(FaceGraphItem* item, int nb_steps) { typename FaceGraphItem::Face_graph* graph = item->face_graph(); if(!graph) return; @@ -188,7 +224,7 @@ void Polyhedron_demo_subdivision_methods_plugin::apply_doosabin(FaceGraphItem* i time.start(); messages->information("Catmull-Clark subdivision..."); QApplication::setOverrideCursor(Qt::WaitCursor); - CGAL::Subdivision_method_3::DooSabin_subdivision(*graph, 1); + CGAL::Subdivision_method_3::DooSabin_subdivision(*graph, nb_steps); messages->information(QString("ok (%1 ms)").arg(time.elapsed())); QApplication::restoreOverrideCursor(); item->invalidateOpenGLBuffers(); @@ -208,10 +244,21 @@ void Polyhedron_demo_subdivision_methods_plugin::on_actionDooSabin_triggered() qobject_cast(scene->item(index)); if(!sm_item) return; - apply_doosabin(sm_item); + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_doosabin(sm_item, nb_steps); + } + else{ + int nb_steps = QInputDialog::getInt(mw, + QString("Number of Iterations"), + QString("Choose number of iterations"), + 1, + 1); + apply_doosabin(item, nb_steps); } - else - apply_doosabin(item); } #include "Subdivision_methods_plugin.moc"