From fe20e03afbbf32974d4762185e54d86c149f54e9 Mon Sep 17 00:00:00 2001 From: matlabbe Date: Fri, 14 Nov 2014 22:07:03 +0000 Subject: [PATCH] GUI: export clouds in binary mode by default git-svn-id: http://rtabmap.googlecode.com/svn/trunk/rtabmap@2007 f169173b-cf89-36c8-b27e-44dbe73f0c83 --- guilib/include/rtabmap/gui/MainWindow.h | 6 ++-- guilib/src/ExportCloudsDialog.cpp | 7 ++++ guilib/src/ExportCloudsDialog.h | 1 + guilib/src/MainWindow.cpp | 47 +++++++++++++++---------- guilib/src/ui/exportCloudsDialog.ui | 10 ++++++ 5 files changed, 49 insertions(+), 22 deletions(-) diff --git a/guilib/include/rtabmap/gui/MainWindow.h b/guilib/include/rtabmap/gui/MainWindow.h index e1e2ae88..4a5c39cd 100644 --- a/guilib/include/rtabmap/gui/MainWindow.h +++ b/guilib/include/rtabmap/gui/MainWindow.h @@ -232,9 +232,9 @@ private: bool getExportedScans(std::map::Ptr > & scans); bool getExportedClouds(std::map::Ptr> & clouds, std::map & meshes, bool toSave); - void saveClouds(const std::map::Ptr> & clouds); - void saveMeshes(const std::map & meshes); - void saveScans(const std::map::Ptr> & clouds); + void saveClouds(const std::map::Ptr> & clouds, bool binaryMode = true); + void saveMeshes(const std::map & meshes, bool binaryMode = true); + void saveScans(const std::map::Ptr> & clouds, bool binaryMode = true); private: Ui_mainWindow * _ui; diff --git a/guilib/src/ExportCloudsDialog.cpp b/guilib/src/ExportCloudsDialog.cpp index 79358a4e..01c1dafe 100644 --- a/guilib/src/ExportCloudsDialog.cpp +++ b/guilib/src/ExportCloudsDialog.cpp @@ -47,11 +47,13 @@ ExportCloudsDialog::~ExportCloudsDialog() void ExportCloudsDialog::setSaveButton() { _ui->buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Save); + _ui->checkBox_binary->setVisible(true); } void ExportCloudsDialog::setOkButton() { _ui->buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok); + _ui->checkBox_binary->setVisible(false); } bool ExportCloudsDialog::getAssemble() const @@ -84,6 +86,11 @@ double ExportCloudsDialog::getGenerateMaxDepth() const return _ui->doubleSpinBox_maxDepth->value(); } +bool ExportCloudsDialog::getBinaryFile() const +{ + return _ui->checkBox_binary->isChecked(); +} + bool ExportCloudsDialog::getMLS() const { return _ui->groupBox_mls->isChecked(); diff --git a/guilib/src/ExportCloudsDialog.h b/guilib/src/ExportCloudsDialog.h index aa2b2c0e..d22ab1b0 100644 --- a/guilib/src/ExportCloudsDialog.h +++ b/guilib/src/ExportCloudsDialog.h @@ -52,6 +52,7 @@ public: int getGenerateDecimation() const; double getGenerateVoxel() const; double getGenerateMaxDepth() const; + bool getBinaryFile() const; bool getMLS() const; double getMLSRadius() const; bool getMesh() const; diff --git a/guilib/src/MainWindow.cpp b/guilib/src/MainWindow.cpp index eb9d2d1e..3339b20b 100644 --- a/guilib/src/MainWindow.cpp +++ b/guilib/src/MainWindow.cpp @@ -3511,7 +3511,16 @@ void MainWindow::exportScans() { if(scans.size()) { - this->saveScans(scans); + QMessageBox::StandardButton b = QMessageBox::question(this, + tr("Binary file?"), + tr("Do you want to save in binary mode?"), + QMessageBox::No | QMessageBox::Yes, + QMessageBox::Yes); + + if(b == QMessageBox::No || b == QMessageBox::Yes) + { + this->saveScans(scans, b == QMessageBox::Yes); + } } _initProgressDialog->setValue(_initProgressDialog->maximumSteps()); } @@ -3657,11 +3666,11 @@ void MainWindow::exportClouds() { if(meshes.size()) { - saveMeshes(meshes); + saveMeshes(meshes, _exportDialog->getBinaryFile()); } else { - saveClouds(clouds); + saveClouds(clouds, _exportDialog->getBinaryFile()); } _initProgressDialog->setValue(_initProgressDialog->maximumSteps()); } @@ -3886,7 +3895,7 @@ void MainWindow::dataRecorder() //END ACTIONS -void MainWindow::saveClouds(const std::map::Ptr> & clouds) +void MainWindow::saveClouds(const std::map::Ptr> & clouds, bool binaryMode) { if(clouds.size() == 1) { @@ -3900,17 +3909,17 @@ void MainWindow::saveClouds(const std::mapsecond) == 0; + success = pcl::io::savePCDFile(path.toStdString(), *clouds.begin()->second, binaryMode) == 0; } else if(QFileInfo(path).suffix() == "ply") { - success = pcl::io::savePLYFile(path.toStdString(), *clouds.begin()->second) == 0; + success = pcl::io::savePLYFile(path.toStdString(), *clouds.begin()->second, binaryMode) == 0; } else if(QFileInfo(path).suffix() == "") { //use ply by default path += ".ply"; - success = pcl::io::savePCDFile(path.toStdString(), *clouds.begin()->second) == 0; + success = pcl::io::savePLYFile(path.toStdString(), *clouds.begin()->second, binaryMode) == 0; } else { @@ -3962,11 +3971,11 @@ void MainWindow::saveClouds(const std::map & meshes) +void MainWindow::saveMeshes(const std::map & meshes, bool binaryMode) { if(meshes.size() == 1) { @@ -4008,13 +4017,13 @@ void MainWindow::saveMeshes(const std::map & meshes) bool success =false; if(QFileInfo(path).suffix() == "ply") { - success = pcl::io::savePLYFile(path.toStdString(), *meshes.begin()->second) == 0; + success = pcl::io::savePLYFile(path.toStdString(), *meshes.begin()->second, binaryMode) == 0; } else if(QFileInfo(path).suffix() == "") { //default ply path += ".ply"; - success = pcl::io::savePLYFile(path.toStdString(), *meshes.begin()->second) == 0; + success = pcl::io::savePLYFile(path.toStdString(), *meshes.begin()->second, binaryMode) == 0; } else { @@ -4064,7 +4073,7 @@ void MainWindow::saveMeshes(const std::map & meshes) bool success =false; if(suffix == "ply") { - success = pcl::io::savePLYFile(pathFile.toStdString(), mesh) == 0; + success = pcl::io::savePLYFile(pathFile.toStdString(), mesh, binaryMode) == 0; } else { @@ -4093,7 +4102,7 @@ void MainWindow::saveMeshes(const std::map & meshes) } } -void MainWindow::saveScans(const std::map::Ptr> & scans) +void MainWindow::saveScans(const std::map::Ptr> & scans, bool binaryMode) { if(scans.size() == 1) { @@ -4107,17 +4116,17 @@ void MainWindow::saveScans(const std::map::P bool success =false; if(QFileInfo(path).suffix() == "pcd") { - success = pcl::io::savePCDFile(path.toStdString(), *scans.begin()->second) == 0; + success = pcl::io::savePCDFile(path.toStdString(), *scans.begin()->second, binaryMode) == 0; } else if(QFileInfo(path).suffix() == "ply") { - success = pcl::io::savePLYFile(path.toStdString(), *scans.begin()->second) == 0; + success = pcl::io::savePLYFile(path.toStdString(), *scans.begin()->second, binaryMode) == 0; } else if(QFileInfo(path).suffix() == "") { //use ply by default path += ".ply"; - success = pcl::io::savePCDFile(path.toStdString(), *scans.begin()->second) == 0; + success = pcl::io::savePLYFile(path.toStdString(), *scans.begin()->second, binaryMode) == 0; } else { @@ -4169,11 +4178,11 @@ void MainWindow::saveScans(const std::map::P bool success =false; if(suffix == "pcd") { - success = pcl::io::savePCDFile(pathFile.toStdString(), *transformedCloud) == 0; + success = pcl::io::savePCDFile(pathFile.toStdString(), *transformedCloud, binaryMode) == 0; } else if(suffix == "ply") { - success = pcl::io::savePLYFile(pathFile.toStdString(), *transformedCloud) == 0; + success = pcl::io::savePLYFile(pathFile.toStdString(), *transformedCloud, binaryMode) == 0; } else { diff --git a/guilib/src/ui/exportCloudsDialog.ui b/guilib/src/ui/exportCloudsDialog.ui index da834098..a4ecb386 100644 --- a/guilib/src/ui/exportCloudsDialog.ui +++ b/guilib/src/ui/exportCloudsDialog.ui @@ -148,6 +148,16 @@ + + + + Binary file + + + true + + +