Subversion Repositories seema-scanner

Rev

Rev 41 | Rev 43 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 41 Rev 42
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
}