diff --git a/Polyhedron/demo/Polyhedron/MainWindow.h b/Polyhedron/demo/Polyhedron/MainWindow.h index d2b3a27e48f..a6bdd6c9c86 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.h +++ b/Polyhedron/demo/Polyhedron/MainWindow.h @@ -48,7 +48,9 @@ protected slots: void on_actionSetPolyhedronA_triggered(); void on_actionSetPolyhedronB_triggered(); void on_actionInsideOut_triggered(); + void on_actionMVC_triggered(); + void on_actionDCP_triggered(); // save // TODO: save all, save current (do we store the current file name?) @@ -88,13 +90,20 @@ protected slots: // remeshing, in MainWindow_remeshing.cpp void on_actionRemeshing_triggered(); + + protected: enum Boolean_operation { BOOLEAN_UNION, BOOLEAN_INTERSECTION, BOOLEAN_DIFFERENCE }; - // define in MainWindow_boolean_operations.cpp + enum Parameterization_method { PARAM_MVC, + PARAM_DCP}; + // defined in MainWindow_boolean_operations.cpp void boolean_operation(const Boolean_operation operation); + // defined in MainWindow_parameterization.cpp + void parameterize(const Parameterization_method method); + void dragEnterEvent(QDragEnterEvent *event); void dropEvent(QDropEvent *event); void closeEvent(QCloseEvent *event); diff --git a/Polyhedron/demo/Polyhedron/MainWindow.ui b/Polyhedron/demo/Polyhedron/MainWindow.ui index 7efef3bfb50..697d5526fb0 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow.ui +++ b/Polyhedron/demo/Polyhedron/MainWindow.ui @@ -188,6 +188,7 @@ Parameterization + @@ -535,6 +536,11 @@ Mean value coordinates + + + Discrete conformal maps + + diff --git a/Polyhedron/demo/Polyhedron/MainWindow_parameterization.cpp b/Polyhedron/demo/Polyhedron/MainWindow_parameterization.cpp index af4ababf896..a0b14880bbb 100644 --- a/Polyhedron/demo/Polyhedron/MainWindow_parameterization.cpp +++ b/Polyhedron/demo/Polyhedron/MainWindow_parameterization.cpp @@ -7,10 +7,12 @@ #include #include +#include +#include #include -void MainWindow::on_actionMVC_triggered() +void MainWindow::parameterize(const Parameterization_method method) { QApplication::setOverrideCursor(Qt::WaitCursor); @@ -23,10 +25,66 @@ void MainWindow::on_actionMVC_triggered() time.start(); typedef CGAL::Parameterization_polyhedron_adaptor_3 Adaptor; Adaptor adaptor(*pMesh); - std::cerr << "Parameterize..."; - typedef CGAL::Parameterizer_traits_3 Parameterizer; - Parameterizer::Error_code err = CGAL::parameterize(adaptor); - std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; + + bool success; + switch(method) + { + case PARAM_MVC: + { + std::cerr << "Parameterize (MVC)..."; + typedef CGAL::Mean_value_coordinates_parameterizer_3 Parameterizer; + Parameterizer::Error_code err = CGAL::parameterize(adaptor,Parameterizer()); + success = err == Parameterizer::OK; + break; + } + case PARAM_DCP: + { + std::cerr << "Parameterize (DCP)..."; + typedef CGAL::Discrete_conformal_map_parameterizer_3 > Parameterizer; + Parameterizer::Error_code err = CGAL::parameterize(adaptor,Parameterizer()); + success = err == Parameterizer::OK; + } + } + + if(success) + std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; + else + { + std::cout << "failure" << std::endl; + QApplication::setOverrideCursor(Qt::ArrowCursor); + return; + } + + // add parameterized mesh + Polyhedron *pParameterization = new Polyhedron(*pMesh); + Polyhedron::Vertex_iterator it1, it2; + for(it1 = pMesh->vertices_begin(), + it2 = pParameterization->vertices_begin(); + it1 != pMesh->vertices_end(), + it2 != pParameterization->vertices_end(); + it1++, it2++) + { + // (u,v) pair is stored in any halfedge + FT u = adaptor.info(it1->halfedge())->uv().x(); + FT v = adaptor.info(it1->halfedge())->uv().y(); + it2->point() = Point(u-0.5,v-0.5,0.0); + } + + scene->addPolyhedron(pParameterization, + tr("%1 (parameterization)").arg(scene->polyhedronName(index)), + Qt::magenta, + scene->isPolyhedronActivated(index), + scene->polyhedronRenderingMode(index)); QApplication::setOverrideCursor(Qt::ArrowCursor); } + +void MainWindow::on_actionMVC_triggered() +{ + parameterize(PARAM_MVC); +} + +void MainWindow::on_actionDCP_triggered() +{ + parameterize(PARAM_DCP); +} diff --git a/Polyhedron/demo/Polyhedron/Scene.cpp b/Polyhedron/demo/Polyhedron/Scene.cpp index fb3c4791b39..9807461eebe 100644 --- a/Polyhedron/demo/Polyhedron/Scene.cpp +++ b/Polyhedron/demo/Polyhedron/Scene.cpp @@ -298,6 +298,9 @@ Scene::draw(bool with_names) void Scene::draw(Polyhedron_entry& entry) { + this->gl_render_facets(entry.polyhedron_ptr); + + /* if(!entry.display_list_built) { entry.display_list = ::glGenLists(1); @@ -315,6 +318,7 @@ Scene::draw(Polyhedron_entry& entry) } ::glCallList(entry.display_list); + */ } void Scene::gl_render_facets(Polyhedron_ptr ptr)