more on parameterization demo.

This commit is contained in:
Pierre Alliez 2008-08-14 03:37:29 +00:00
parent 0949438e32
commit 8f351ebd66
4 changed files with 83 additions and 6 deletions

View File

@ -48,7 +48,9 @@ protected slots:
void on_actionSetPolyhedronA_triggered(); void on_actionSetPolyhedronA_triggered();
void on_actionSetPolyhedronB_triggered(); void on_actionSetPolyhedronB_triggered();
void on_actionInsideOut_triggered(); void on_actionInsideOut_triggered();
void on_actionMVC_triggered(); void on_actionMVC_triggered();
void on_actionDCP_triggered();
// save // save
// TODO: save all, save current (do we store the current file name?) // TODO: save all, save current (do we store the current file name?)
@ -88,13 +90,20 @@ protected slots:
// remeshing, in MainWindow_remeshing.cpp // remeshing, in MainWindow_remeshing.cpp
void on_actionRemeshing_triggered(); void on_actionRemeshing_triggered();
protected: protected:
enum Boolean_operation { BOOLEAN_UNION, enum Boolean_operation { BOOLEAN_UNION,
BOOLEAN_INTERSECTION, BOOLEAN_INTERSECTION,
BOOLEAN_DIFFERENCE }; 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); void boolean_operation(const Boolean_operation operation);
// defined in MainWindow_parameterization.cpp
void parameterize(const Parameterization_method method);
void dragEnterEvent(QDragEnterEvent *event); void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event); void dropEvent(QDropEvent *event);
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);

View File

@ -188,6 +188,7 @@
<string>Parameterization</string> <string>Parameterization</string>
</property> </property>
<addaction name="actionMVC" /> <addaction name="actionMVC" />
<addaction name="on_actionDCP_triggered" />
</widget> </widget>
<addaction name="actionConvexHull" /> <addaction name="actionConvexHull" />
<addaction name="actionKernel" /> <addaction name="actionKernel" />
@ -535,6 +536,11 @@
<string>Mean value coordinates</string> <string>Mean value coordinates</string>
</property> </property>
</action> </action>
<action name="on_actionDCP_triggered" >
<property name="text" >
<string>Discrete conformal maps</string>
</property>
</action>
</widget> </widget>
<customwidgets> <customwidgets>
<customwidget> <customwidget>

View File

@ -7,10 +7,12 @@
#include <CGAL/Parameterization_polyhedron_adaptor_3.h> #include <CGAL/Parameterization_polyhedron_adaptor_3.h>
#include <CGAL/parameterize.h> #include <CGAL/parameterize.h>
#include <CGAL/Discrete_conformal_map_parameterizer_3.h>
#include <CGAL/Two_vertices_parameterizer_3.h>
#include <iostream> #include <iostream>
void MainWindow::on_actionMVC_triggered() void MainWindow::parameterize(const Parameterization_method method)
{ {
QApplication::setOverrideCursor(Qt::WaitCursor); QApplication::setOverrideCursor(Qt::WaitCursor);
@ -23,10 +25,66 @@ void MainWindow::on_actionMVC_triggered()
time.start(); time.start();
typedef CGAL::Parameterization_polyhedron_adaptor_3<Polyhedron> Adaptor; typedef CGAL::Parameterization_polyhedron_adaptor_3<Polyhedron> Adaptor;
Adaptor adaptor(*pMesh); Adaptor adaptor(*pMesh);
std::cerr << "Parameterize...";
typedef CGAL::Parameterizer_traits_3<Adaptor> Parameterizer; bool success;
Parameterizer::Error_code err = CGAL::parameterize(adaptor); switch(method)
std::cout << "ok (" << time.elapsed() << " ms)" << std::endl; {
case PARAM_MVC:
{
std::cerr << "Parameterize (MVC)...";
typedef CGAL::Mean_value_coordinates_parameterizer_3<Adaptor> 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<Adaptor,CGAL::Two_vertices_parameterizer_3<Adaptor> > 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); QApplication::setOverrideCursor(Qt::ArrowCursor);
} }
void MainWindow::on_actionMVC_triggered()
{
parameterize(PARAM_MVC);
}
void MainWindow::on_actionDCP_triggered()
{
parameterize(PARAM_DCP);
}

View File

@ -298,6 +298,9 @@ Scene::draw(bool with_names)
void void
Scene::draw(Polyhedron_entry& entry) Scene::draw(Polyhedron_entry& entry)
{ {
this->gl_render_facets(entry.polyhedron_ptr);
/*
if(!entry.display_list_built) if(!entry.display_list_built)
{ {
entry.display_list = ::glGenLists(1); entry.display_list = ::glGenLists(1);
@ -315,6 +318,7 @@ Scene::draw(Polyhedron_entry& entry)
} }
::glCallList(entry.display_list); ::glCallList(entry.display_list);
*/
} }
void Scene::gl_render_facets(Polyhedron_ptr ptr) void Scene::gl_render_facets(Polyhedron_ptr ptr)