Line 4... |
Line 4... |
4 |
#include <QMetaObject>
|
4 |
#include <QMetaObject>
|
5 |
#include <QFileDialog>
|
5 |
#include <QFileDialog>
|
6 |
|
6 |
|
7 |
SMScanner::SMScanner(QWidget *parent) :QMainWindow(parent), ui(new Ui::SMScanner),
|
7 |
SMScanner::SMScanner(QWidget *parent) :QMainWindow(parent), ui(new Ui::SMScanner),
|
8 |
calibrationReviewMode(false), captureReviewMode(false){
|
8 |
calibrationReviewMode(false), captureReviewMode(false){
|
9 |
ui->setupUi(this);
|
- |
|
10 |
|
9 |
|
11 |
// Register metatypes
|
10 |
// Register metatypes
|
12 |
qRegisterMetaType<cv::Mat>("cv::Mat");
|
11 |
qRegisterMetaType<cv::Mat>("cv::Mat");
|
13 |
qRegisterMetaType< std::vector<cv::Mat> >("std::vector<cv::Mat>");
|
12 |
qRegisterMetaType< std::vector<cv::Mat> >("std::vector<cv::Mat>");
|
14 |
qRegisterMetaType< std::vector<float> >("std::vector<float>");
|
13 |
qRegisterMetaType< std::vector<float> >("std::vector<float>");
|
15 |
qRegisterMetaType<SMCalibrationSet>("SMCalibrationSet");
|
14 |
qRegisterMetaType<SMCalibrationSet>("SMCalibrationSet");
|
16 |
qRegisterMetaType<SMCalibrationParameters>("SMCalibrationParameters");
|
15 |
qRegisterMetaType<SMCalibrationParameters>("SMCalibrationParameters");
|
17 |
qRegisterMetaTypeStreamOperators<SMCalibrationParameters>("SMCalibrationParameters");
|
16 |
qRegisterMetaTypeStreamOperators<SMCalibrationParameters>("SMCalibrationParameters");
|
18 |
qRegisterMetaType< std::vector<SMCalibrationSet> >("std::vector<SMCalibrationSet>");
|
17 |
qRegisterMetaType< std::vector<SMCalibrationSet> >("std::vector<SMCalibrationSet>");
|
19 |
qRegisterMetaType<SMFrameSequence>("SMFrameSequence");
|
18 |
qRegisterMetaType<SMFrameSequence>("SMFrameSequence");
|
- |
|
19 |
qRegisterMetaType< std::vector<SMFrameSequence> >("std::vector<SMFrameSequence>");
|
20 |
qRegisterMetaType<pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr>("pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr");
|
20 |
qRegisterMetaType<pcl::PointCloud<pcl::PointXYZRGB>::Ptr>("pcl::PointCloud<pcl::PointXYZRGB>::Ptr");
|
- |
|
21 |
qRegisterMetaType<SMPointCloud>("SMPointCloud");
|
- |
|
22 |
|
- |
|
23 |
// Setup ui (requires stream operators registered)
|
- |
|
24 |
ui->setupUi(this);
|
21 |
|
25 |
|
22 |
// Restore geometry
|
26 |
// Restore geometry
|
23 |
this->restoreGeometry(settings.value("geometry/mainwindow").toByteArray());
|
27 |
this->restoreGeometry(settings.value("geometry/mainwindow").toByteArray());
|
24 |
this->restoreState(settings.value("state/mainwindow").toByteArray());
|
28 |
this->restoreState(settings.value("state/mainwindow").toByteArray());
|
25 |
|
29 |
|
Line 406... |
Line 410... |
406 |
reconstructionWorkerThread->setObjectName("reconstructionWorkerThread");
|
410 |
reconstructionWorkerThread->setObjectName("reconstructionWorkerThread");
|
407 |
reconstructionWorker->moveToThread(reconstructionWorkerThread);
|
411 |
reconstructionWorker->moveToThread(reconstructionWorkerThread);
|
408 |
reconstructionWorkerThread->start();
|
412 |
reconstructionWorkerThread->start();
|
409 |
|
413 |
|
410 |
// Connections
|
414 |
// Connections
|
411 |
connect(reconstructionWorker, SIGNAL(newPointCloud(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr)), this, SLOT(onNewPointCloud(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr)));
|
415 |
connect(reconstructionWorker, SIGNAL(newPointCloud(SMPointCloud)), this, SLOT(onNewPointCloud(SMPointCloud)));
|
412 |
connect(reconstructionWorker, SIGNAL(done()), reconstructionWorkerThread, SLOT(quit()));
|
416 |
connect(reconstructionWorker, SIGNAL(done()), reconstructionWorkerThread, SLOT(quit()));
|
413 |
connect(reconstructionWorker, SIGNAL(done()), reconstructionWorker, SLOT(deleteLater()));
|
417 |
connect(reconstructionWorker, SIGNAL(done()), reconstructionWorker, SLOT(deleteLater()));
|
414 |
|
418 |
|
415 |
// Start reconstructing
|
419 |
// Start reconstructing
|
- |
|
420 |
QMetaObject::invokeMethod(reconstructionWorker, "setup");
|
416 |
QMetaObject::invokeMethod(reconstructionWorker, "reconstruct", Q_ARG(std::vector<SMFrameSequence>, captureData));
|
421 |
QMetaObject::invokeMethod(reconstructionWorker, "reconstructPointClouds", Q_ARG(std::vector<SMFrameSequence>, captureData));
|
417 |
|
422 |
|
418 |
}
|
423 |
}
|
419 |
|
424 |
|
420 |
void SMScanner::onNewPointCloud(pcl::PointCloud<pcl::PointXYZRGB>::ConstPtr pc){
|
425 |
void SMScanner::onNewPointCloud(SMPointCloud smCloud){
|
421 |
|
426 |
|
422 |
SMPointCloud smCloud;
|
- |
|
423 |
//smCloud.pointCloud = pc;
|
- |
|
424 |
pointCloudData.push_back(smCloud);
|
427 |
pointCloudData.push_back(smCloud);
|
425 |
|
428 |
|
- |
|
429 |
// Add identifier to list
|
- |
|
430 |
QListWidgetItem* item = new QListWidgetItem(QString("Point Cloud %1 -- %2 deg").arg(ui->pointCloudsListWidget->count()).arg(smCloud.rotationAngle), ui->pointCloudsListWidget);
|
- |
|
431 |
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
- |
|
432 |
item->setCheckState(Qt::Checked);
|
426 |
ui->pointCloudWidget->updatePointCloud(pc);
|
433 |
ui->pointCloudsListWidget->addItem(item);
|
- |
|
434 |
|
- |
|
435 |
ui->pointCloudWidget->addPointCloud(smCloud.pointCloud);
|
- |
|
436 |
}
|
- |
|
437 |
|
- |
|
438 |
void SMScanner::on_actionExport_Calibration_triggered(){
|
- |
|
439 |
|
- |
|
440 |
QString fileName = QFileDialog::getSaveFileName(this, "Export calibration parameters", QString(), "*.xml");
|
- |
|
441 |
QFileInfo info(fileName);
|
- |
|
442 |
QString type = info.suffix();
|
- |
|
443 |
if(type == ""){
|
- |
|
444 |
fileName.append(".xml");
|
- |
|
445 |
}
|
- |
|
446 |
|
- |
|
447 |
SMCalibrationParameters calibration = settings.value("calibration/parameters").value<SMCalibrationParameters>();
|
- |
|
448 |
calibration.exportToXML(fileName);
|
427 |
}
|
449 |
}
|