From af7fa2ac51f906fc726452b5a8b51baf1286f019 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 10 Mar 2015 10:44:57 +0100 Subject: [PATCH 1/2] Add LSCM as parametrization method --- Polyhedron/demo/Polyhedron/MainWindow.ui | 12 +++++++++--- ...olyhedron_demo_parameterization_plugin.cpp | 19 +++++++++++++++++-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index 1e183f30a21..581632e84ed 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -37,7 +37,7 @@ 0 0 978 - 21 + 26 @@ -94,6 +94,7 @@ + @@ -294,8 +295,8 @@ 0 0 - 545 - 178 + 534 + 174 @@ -646,6 +647,11 @@ &Preferences + + + Least square conformal maps + + diff --git a/Polyhedron/demo/Polyhedron/Polyhedron_demo_parameterization_plugin.cpp b/Polyhedron/demo/Polyhedron/Polyhedron_demo_parameterization_plugin.cpp index 8b3d53e2718..880c0e57019 100644 --- a/Polyhedron/demo/Polyhedron/Polyhedron_demo_parameterization_plugin.cpp +++ b/Polyhedron/demo/Polyhedron/Polyhedron_demo_parameterization_plugin.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -34,7 +35,8 @@ public: // used by Polyhedron_demo_plugin_helper QStringList actionsNames() const { return QStringList() << "actionMVC" - << "actionDCP"; + << "actionDCP" + << "actionLSC"; } bool applicable(QAction*) const { @@ -44,9 +46,10 @@ public: public slots: void on_actionMVC_triggered(); void on_actionDCP_triggered(); + void on_actionLSC_triggered(); protected: - enum Parameterization_method { PARAM_MVC, PARAM_DCP }; + enum Parameterization_method { PARAM_MVC, PARAM_DCP, PARAM_LSC }; void parameterize(Parameterization_method method); }; // end Polyhedron_demo_parameterization_plugin @@ -90,6 +93,13 @@ void Polyhedron_demo_parameterization_plugin::parameterize(const Parameterizatio typedef CGAL::Discrete_conformal_map_parameterizer_3 Parameterizer; Parameterizer::Error_code err = CGAL::parameterize(adaptor,Parameterizer()); success = err == Parameterizer::OK; + } + case PARAM_LSC: + { + std::cout << "Parameterize (LSC)..."; + typedef CGAL::LSCM_parameterizer_3 Parameterizer; + Parameterizer::Error_code err = CGAL::parameterize(adaptor,Parameterizer()); + success = err == Parameterizer::OK; } } @@ -145,6 +155,11 @@ void Polyhedron_demo_parameterization_plugin::on_actionDCP_triggered() parameterize(PARAM_DCP); } +void Polyhedron_demo_parameterization_plugin::on_actionLSC_triggered() +{ + std::cerr << "LSC..."; + parameterize(PARAM_LSC); +} Q_EXPORT_PLUGIN2(Polyhedron_demo_parameterization_plugin, Polyhedron_demo_parameterization_plugin) #include "Polyhedron_demo_parameterization_plugin.moc" From 18d3dda0a6efa00f76101b84876a283403b799d8 Mon Sep 17 00:00:00 2001 From: Andreas Fabri Date: Tue, 10 Mar 2015 10:48:22 +0100 Subject: [PATCH 2/2] Use a faster solver in the example --- .../Eigen_parameterization.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/Eigen_parameterization.cpp b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/Eigen_parameterization.cpp index 7c97b3f8823..0d0300fbee9 100644 --- a/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/Eigen_parameterization.cpp +++ b/Surface_mesh_parameterization/examples/Surface_mesh_parameterization/Eigen_parameterization.cpp @@ -3,7 +3,7 @@ #include #include #include - +#include #include #include @@ -17,7 +17,7 @@ typedef CGAL::Simple_cartesian Kernel; typedef CGAL::Polyhedron_3 Polyhedron; - +typedef CGAL::Timer Timer; // ---------------------------------------------------------------------------- // main() @@ -65,7 +65,8 @@ int main(int argc, char * argv[]) typedef CGAL::Parameterization_polyhedron_adaptor_3 Parameterization_polyhedron_adaptor; - + Timer t; + t.start(); Parameterization_polyhedron_adaptor mesh_adaptor(mesh); //*************************************** @@ -77,16 +78,17 @@ int main(int argc, char * argv[]) typedef CGAL::Circular_border_arc_length_parameterizer_3 Border_parameterizer; // Eigen solver - typedef CGAL::Eigen_solver_traits<> Solver; + typedef CGAL::Eigen_solver_traits::EigenType, Eigen::IncompleteLUT< double > > > Solver; // Floater Mean Value Coordinates parameterization // (circular border) with Eigen solver typedef CGAL::Mean_value_coordinates_parameterizer_3 + Solver> Parameterizer; Parameterizer::Error_code err = CGAL::parameterize(mesh_adaptor, Parameterizer()); + t.stop(); switch(err) { case Parameterizer::OK: // Success @@ -119,6 +121,6 @@ int main(int argc, char * argv[]) double v = mesh_adaptor.info(pVertex->halfedge())->uv().y(); std::cout << "(u,v) = (" << u << "," << v << ")" << std::endl; } - + std::cerr << t.time() << "sec." << std::endl; return EXIT_SUCCESS; }