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)