mirror of https://github.com/CGAL/cgal
112 lines
2.6 KiB
C++
112 lines
2.6 KiB
C++
|
|
#include "MainWindow.h"
|
|
|
|
MainWindow::MainWindow(QWidget* parent): CGAL::Qt::DemosMainWindow(parent)
|
|
{
|
|
setupUi(this);
|
|
this->viewer->setScene(&scene);
|
|
connectActions();
|
|
this->addAboutDemo(":/cgal/help/about_Alpha_shape_3.html");
|
|
this->addAboutCGAL();
|
|
|
|
this->addRecentFiles(this->menuFile, this->actionQuit);
|
|
connect(this, SIGNAL(openRecentFile(QString)),
|
|
this, SLOT(open(QString)));
|
|
}
|
|
|
|
|
|
void
|
|
MainWindow::connectActions()
|
|
{
|
|
QObject::connect(this->actionLoad_New_File, SIGNAL(triggered()),
|
|
this, SLOT(open_file()));
|
|
|
|
QObject::connect(this->alphaSlider, SIGNAL(valueChanged(int)),
|
|
this, SLOT(alphaChanged(int)));
|
|
|
|
QObject::connect(this->alphaBox, SIGNAL(valueChanged(int)),
|
|
this, SLOT(alphaChanged(int)));
|
|
|
|
QObject::connect(this->alphaSlider, SIGNAL(valueChanged(int)),
|
|
this->alphaBox, SLOT(setValue(int)));
|
|
|
|
QObject::connect(this->alphaBox, SIGNAL(valueChanged(int)),
|
|
this->alphaSlider, SLOT(setValue(int)));
|
|
|
|
QObject::connect(this, SIGNAL(sceneChanged()),
|
|
this->viewer, SLOT(sceneChanged()));
|
|
|
|
QObject::connect(this, SIGNAL(alphaChanged()),
|
|
this->viewer, SLOT(update()));
|
|
|
|
|
|
QObject::connect(this->actionQuit, SIGNAL(triggered()),
|
|
qApp, SLOT(quit()));
|
|
}
|
|
|
|
void
|
|
MainWindow::open_file()
|
|
{
|
|
|
|
QString fileName = QFileDialog::getOpenFileName(this,
|
|
tr("Open Points File"),
|
|
"./data",
|
|
tr("pts files (*.pts)"));
|
|
|
|
if(! fileName.isEmpty()){
|
|
open(fileName);
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
MainWindow::alphaChanged(int i)
|
|
{
|
|
if (scene.alpha_shape.number_of_alphas() > 0){
|
|
if(i < 100){
|
|
int n = (i * scene.alpha_shape.number_of_alphas())/ 100;
|
|
if(n == 0) n++;
|
|
scene.alpha_shape.set_alpha(scene.alpha_shape.get_nth_alpha(n));
|
|
} else {
|
|
Alpha_iterator alpha_end_it = scene.alpha_shape.alpha_end();
|
|
scene.alpha_shape.set_alpha((*(--alpha_end_it))+1);
|
|
}
|
|
} else {
|
|
scene.alpha_shape.set_alpha(0);
|
|
}
|
|
emit (alphaChanged());
|
|
}
|
|
|
|
void
|
|
MainWindow::open(const QString& fileName)
|
|
{
|
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
|
scene.alpha_shape.clear();
|
|
scene.points.clear();
|
|
std::ifstream ifs(qPrintable(fileName));
|
|
int n;
|
|
ifs >> n;
|
|
Point_3 p;
|
|
for(int i=0; i<n; i++){
|
|
ifs >> p;
|
|
scene.points.push_back(p);
|
|
}
|
|
timer.reset();
|
|
timer.start();
|
|
scene.alpha_shape.make_alpha_shape(scene.points.begin(), scene.points.end());
|
|
scene.alpha_shape.set_alpha(16);
|
|
timer.stop();
|
|
|
|
|
|
alphaSlider->setRange(0,100);
|
|
alphaSlider->setSliderPosition(50);
|
|
|
|
this->addToRecentFiles(fileName);
|
|
QApplication::restoreOverrideCursor();
|
|
emit (sceneChanged());
|
|
}
|
|
|
|
|
|
#include "MainWindow.moc"
|
|
|