Merge pull request #2405 from maxGimeno/Subdivisions_iteration-GF

Polyhedron demo: Subdivisions_plugin
This commit is contained in:
Laurent Rineau 2017-09-08 17:42:00 +02:00
commit 73a8cdc898
1 changed files with 70 additions and 23 deletions

View File

@ -2,6 +2,7 @@
#include <QApplication>
#include <QMainWindow>
#include <QAction>
#include <QInputDialog>
#include <CGAL/Three/Polyhedron_demo_plugin_helper.h>
#include <CGAL/Three/Polyhedron_demo_plugin_interface.h>
@ -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<QAction*> _actions;
template<class FaceGraphItem>
void apply_loop(FaceGraphItem* item);
void apply_loop(FaceGraphItem* item, int nb_steps);
template<class FaceGraphItem>
void apply_catmullclark(FaceGraphItem* item);
void apply_catmullclark(FaceGraphItem* item, int nb_steps);
template<class FaceGraphItem>
void apply_sqrt3(FaceGraphItem* item);
void apply_sqrt3(FaceGraphItem* item, int nb_steps);
template<class FaceGraphItem>
void apply_doosabin(FaceGraphItem* item);
void apply_doosabin(FaceGraphItem* item, int nb_steps);
}; // end Polyhedron_demo_subdivision_methods_plugin
template<class FaceGraphItem>
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_surface_mesh_item*>(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<class FaceGraphItem>
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_surface_mesh_item*>(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<class FaceGraphItem>
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("Sqrt-3 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_surface_mesh_item*>(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<class FaceGraphItem>
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("Doo-Sabin 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_surface_mesh_item*>(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"