0.14.3: exposed all gui widgets to public API. CloudViewer: fixed camera orientation reset

This commit is contained in:
matlabbe
2017-10-20 12:09:34 +02:00
parent b3149a2b55
commit e40a7d6681
47 changed files with 863 additions and 943 deletions

View File

@@ -1,53 +1,55 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ABOUTDIALOG_H_
#define ABOUTDIALOG_H_
#include <QDialog>
#include <QtCore/QUrl>
class Ui_aboutDialog;
namespace rtabmap {
class AboutDialog : public QDialog
{
Q_OBJECT
public:
AboutDialog(QWidget * parent = 0);
virtual ~AboutDialog();
private:
Ui_aboutDialog * _ui;
};
}
#endif /* ABOUTDIALOG_H_ */
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RTABMAP_ABOUTDIALOG_H_
#define RTABMAP_ABOUTDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QtCore/QUrl>
class Ui_aboutDialog;
namespace rtabmap {
class RTABMAPGUI_EXP AboutDialog : public QDialog
{
Q_OBJECT
public:
AboutDialog(QWidget * parent = 0);
virtual ~AboutDialog();
private:
Ui_aboutDialog * _ui;
};
}
#endif /* ABOUTDIALOG_H_ */

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CALIBRATIONDIALOG_H_
#define CALIBRATIONDIALOG_H_
#ifndef RTABMAP_CALIBRATIONDIALOG_H_
#define RTABMAP_CALIBRATIONDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CAMERAVIEWER_H_
#define CAMERAVIEWER_H_
#ifndef RTABMAP_CAMERAVIEWER_H_
#define RTABMAP_CAMERAVIEWER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CLOUDVIEWER_H_
#define CLOUDVIEWER_H_
#ifndef RTABMAP_CLOUDVIEWER_H_
#define RTABMAP_CLOUDVIEWER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CONSOLEWIDGET_H_
#define CONSOLEWIDGET_H_
#ifndef RTABMAP_CONSOLEWIDGET_H_
#define RTABMAP_CONSOLEWIDGET_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -1,66 +1,68 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef CREATESIMPLECALIBRATIONDIALOG_H_
#define CREATESIMPLECALIBRATIONDIALOG_H_
#include <QDialog>
#include <QSettings>
class Ui_createSimpleCalibrationDialog;
namespace rtabmap {
class CreateSimpleCalibrationDialog : public QDialog
{
Q_OBJECT
public:
CreateSimpleCalibrationDialog(
const QString & savingFolder = ".",
const QString & cameraName = "",
QWidget * parent = 0);
virtual ~CreateSimpleCalibrationDialog();
void setCameraInfoDir(const QString & folder) {savingFolder_ = folder;}
const QString & cameraName() const {return cameraName_;}
private slots:
void updateStereoView();
void updateSaveStatus();
void saveCalibration();
private:
Ui_createSimpleCalibrationDialog * ui_;
QString savingFolder_;
QString cameraName_;
};
}
#endif /* CREATESIMPLECALIBRATIONDIALOG_H_ */
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RTABMAP_CREATESIMPLECALIBRATIONDIALOG_H_
#define RTABMAP_CREATESIMPLECALIBRATIONDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QSettings>
class Ui_createSimpleCalibrationDialog;
namespace rtabmap {
class RTABMAPGUI_EXP CreateSimpleCalibrationDialog : public QDialog
{
Q_OBJECT
public:
CreateSimpleCalibrationDialog(
const QString & savingFolder = ".",
const QString & cameraName = "",
QWidget * parent = 0);
virtual ~CreateSimpleCalibrationDialog();
void setCameraInfoDir(const QString & folder) {savingFolder_ = folder;}
const QString & cameraName() const {return cameraName_;}
private slots:
void updateStereoView();
void updateSaveStatus();
void saveCalibration();
private:
Ui_createSimpleCalibrationDialog * ui_;
QString savingFolder_;
QString cameraName_;
};
}
#endif /* CREATESIMPLECALIBRATIONDIALOG_H_ */

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef DATARECORDER_H_
#define DATARECORDER_H_
#ifndef RTABMAP_DATARECORDER_H_
#define RTABMAP_DATARECORDER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef DATABASEVIEWER_H_
#define DATABASEVIEWER_H_
#ifndef RTABMAP_DATABASEVIEWER_H_
#define RTABMAP_DATABASEVIEWER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GUILIB_SRC_DEPTHCALIBRATIONDIALOG_H_
#define GUILIB_SRC_DEPTHCALIBRATIONDIALOG_H_
#ifndef RTABMAP_DEPTHCALIBRATIONDIALOG_H_
#define RTABMAP_DEPTHCALIBRATIONDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QMap>
@@ -44,7 +46,7 @@ namespace rtabmap {
class ProgressDialog;
class DepthCalibrationDialog : public QDialog
class RTABMAPGUI_EXP DepthCalibrationDialog : public QDialog
{
Q_OBJECT

View File

@@ -25,8 +25,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef EDITDEPTHAREA_H
#define EDITDEPTHAREA_H
#ifndef RTABMAP_EDITDEPTHAREA_H
#define RTABMAP_EDITDEPTHAREA_H
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QColor>
#include <QImage>
@@ -39,7 +41,7 @@ class QAction;
namespace rtabmap {
class EditDepthArea : public QWidget
class RTABMAPGUI_EXP EditDepthArea : public QWidget
{
Q_OBJECT

View File

@@ -1,71 +1,73 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef EXPORTBUNDLERDIALOG_H_
#define EXPORTBUNDLERDIALOG_H_
#include <QDialog>
#include <QSettings>
class Ui_ExportBundlerDialog;
namespace rtabmap {
class ExportBundlerDialog : public QDialog
{
Q_OBJECT
public:
ExportBundlerDialog(QWidget * parent = 0);
virtual ~ExportBundlerDialog();
void saveSettings(QSettings & settings, const QString & group = "") const;
void loadSettings(QSettings & settings, const QString & group = "");
void setWorkingDirectory(const QString & path);
QString outputPath() const;
double maxLinearSpeed() const;
double maxAngularSpeed() const;
double laplacianThreshold() const;
signals:
void configChanged();
private slots:
void getPath();
void restoreDefaults();
private:
Ui_ExportBundlerDialog * _ui;
};
}
#endif /* EXPORTBUNDLERDIALOG_H_ */
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RTABMAP_EXPORTBUNDLERDIALOG_H_
#define RTABMAP_EXPORTBUNDLERDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QSettings>
class Ui_ExportBundlerDialog;
namespace rtabmap {
class RTABMAPGUI_EXP ExportBundlerDialog : public QDialog
{
Q_OBJECT
public:
ExportBundlerDialog(QWidget * parent = 0);
virtual ~ExportBundlerDialog();
void saveSettings(QSettings & settings, const QString & group = "") const;
void loadSettings(QSettings & settings, const QString & group = "");
void setWorkingDirectory(const QString & path);
QString outputPath() const;
double maxLinearSpeed() const;
double maxAngularSpeed() const;
double laplacianThreshold() const;
signals:
void configChanged();
private slots:
void getPath();
void restoreDefaults();
private:
Ui_ExportBundlerDialog * _ui;
};
}
#endif /* EXPORTBUNDLERDIALOG_H_ */

View File

@@ -1,139 +1,141 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef EXPORTCLOUDSDIALOG_H_
#define EXPORTCLOUDSDIALOG_H_
#include <QDialog>
#include <QMap>
#include <QtCore/QSettings>
#include <rtabmap/core/Signature.h>
#include <rtabmap/core/Parameters.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <pcl/TextureMesh.h>
#include <pcl/pcl_base.h>
class Ui_ExportCloudsDialog;
class QAbstractButton;
namespace rtabmap {
class ProgressDialog;
class GainCompensator;
class DBDriver;
class ExportCloudsDialog : public QDialog
{
Q_OBJECT
public:
ExportCloudsDialog(QWidget *parent = 0);
virtual ~ExportCloudsDialog();
void saveSettings(QSettings & settings, const QString & group = "") const;
void loadSettings(QSettings & settings, const QString & group = "");
void setDBDriver(const DBDriver * dbDriver) {_dbDriver = dbDriver;}
void exportClouds(
const std::map<int, Transform> & poses,
const std::multimap<int, Link> & links,
const std::map<int, int> & mapIds,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const QString & workingDirectory,
const ParametersMap & parameters);
void viewClouds(
const std::map<int, Transform> & poses,
const std::multimap<int, Link> & links,
const std::map<int, int> & mapIds,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const QString & workingDirectory,
const ParametersMap & parameters);
static bool removeDirRecursively(const QString & dirName);
signals:
void configChanged();
public slots:
void restoreDefaults();
private slots:
void updateReconstructionFlavor();
void selectDistortionModel();
void updateMLSGrpVisibility();
void cancel();
private:
std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr, pcl::IndicesPtr> > getClouds(
const std::map<int, Transform> & poses,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const ParametersMap & parameters,
bool & has2dScans) const;
bool getExportedClouds(
const std::map<int, Transform> & poses,
const std::multimap<int, Link> & links,
const std::map<int, int> & mapIds,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const QString & workingDirectory,
const ParametersMap & parameters,
std::map<int, pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr> & clouds,
std::map<int, pcl::PolygonMesh::Ptr> & meshes,
std::map<int, pcl::TextureMesh::Ptr> & textureMeshes,
std::vector<std::map<int, pcl::PointXY> > & textureVertexToPixels);
void saveClouds(const QString & workingDirectory, const std::map<int, Transform> & poses, const std::map<int, pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr> & clouds, bool binaryMode = true);
void saveMeshes(const QString & workingDirectory, const std::map<int, Transform> & poses, const std::map<int, pcl::PolygonMesh::Ptr> & meshes, bool binaryMode = true);
void saveTextureMeshes(const QString & workingDirectory, const std::map<int, Transform> & poses, std::map<int, pcl::TextureMesh::Ptr> & textureMeshes, const QMap<int, Signature> & cachedSignatures, const std::vector<std::map<int, pcl::PointXY> > & textureVertexToPixels);
void setSaveButton();
void setOkButton();
private:
Ui_ExportCloudsDialog * _ui;
ProgressDialog * _progressDialog;
QString _workingDirectory;
bool _canceled;
GainCompensator * _compensator;
const DBDriver * _dbDriver;
};
}
#endif /* EXPORTCLOUDSDIALOG_H_ */
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RTABMAP_EXPORTCLOUDSDIALOG_H_
#define RTABMAP_EXPORTCLOUDSDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QMap>
#include <QtCore/QSettings>
#include <rtabmap/core/Signature.h>
#include <rtabmap/core/Parameters.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <pcl/TextureMesh.h>
#include <pcl/pcl_base.h>
class Ui_ExportCloudsDialog;
class QAbstractButton;
namespace rtabmap {
class ProgressDialog;
class GainCompensator;
class DBDriver;
class RTABMAPGUI_EXP ExportCloudsDialog : public QDialog
{
Q_OBJECT
public:
ExportCloudsDialog(QWidget *parent = 0);
virtual ~ExportCloudsDialog();
void saveSettings(QSettings & settings, const QString & group = "") const;
void loadSettings(QSettings & settings, const QString & group = "");
void setDBDriver(const DBDriver * dbDriver) {_dbDriver = dbDriver;}
void exportClouds(
const std::map<int, Transform> & poses,
const std::multimap<int, Link> & links,
const std::map<int, int> & mapIds,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const QString & workingDirectory,
const ParametersMap & parameters);
void viewClouds(
const std::map<int, Transform> & poses,
const std::multimap<int, Link> & links,
const std::map<int, int> & mapIds,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const QString & workingDirectory,
const ParametersMap & parameters);
static bool removeDirRecursively(const QString & dirName);
signals:
void configChanged();
public slots:
void restoreDefaults();
private slots:
void updateReconstructionFlavor();
void selectDistortionModel();
void updateMLSGrpVisibility();
void cancel();
private:
std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr, pcl::IndicesPtr> > getClouds(
const std::map<int, Transform> & poses,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const ParametersMap & parameters,
bool & has2dScans) const;
bool getExportedClouds(
const std::map<int, Transform> & poses,
const std::multimap<int, Link> & links,
const std::map<int, int> & mapIds,
const QMap<int, Signature> & cachedSignatures,
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds,
const std::map<int, cv::Mat> & cachedScans,
const QString & workingDirectory,
const ParametersMap & parameters,
std::map<int, pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr> & clouds,
std::map<int, pcl::PolygonMesh::Ptr> & meshes,
std::map<int, pcl::TextureMesh::Ptr> & textureMeshes,
std::vector<std::map<int, pcl::PointXY> > & textureVertexToPixels);
void saveClouds(const QString & workingDirectory, const std::map<int, Transform> & poses, const std::map<int, pcl::PointCloud<pcl::PointXYZRGBNormal>::Ptr> & clouds, bool binaryMode = true);
void saveMeshes(const QString & workingDirectory, const std::map<int, Transform> & poses, const std::map<int, pcl::PolygonMesh::Ptr> & meshes, bool binaryMode = true);
void saveTextureMeshes(const QString & workingDirectory, const std::map<int, Transform> & poses, std::map<int, pcl::TextureMesh::Ptr> & textureMeshes, const QMap<int, Signature> & cachedSignatures, const std::vector<std::map<int, pcl::PointXY> > & textureVertexToPixels);
void setSaveButton();
void setOkButton();
private:
Ui_ExportCloudsDialog * _ui;
ProgressDialog * _progressDialog;
QString _workingDirectory;
bool _canceled;
GainCompensator * _compensator;
const DBDriver * _dbDriver;
};
}
#endif /* EXPORTCLOUDSDIALOG_H_ */

View File

@@ -1,73 +1,75 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef EXPORTDIALOG_H_
#define EXPORTDIALOG_H_
#include <QDialog>
#include <QSettings>
class Ui_ExportDialog;
namespace rtabmap {
class ExportDialog : public QDialog
{
Q_OBJECT
public:
ExportDialog(QWidget * parent = 0);
virtual ~ExportDialog();
void saveSettings(QSettings & settings, const QString & group) const;
void loadSettings(QSettings & settings, const QString & group);
QString outputPath() const;
int framesIgnored() const;
double targetFramerate() const;
int sessionExported() const;
bool isRgbExported() const;
bool isDepthExported() const;
bool isDepth2dExported() const;
bool isOdomExported() const;
bool isUserDataExported() const;
signals:
void configChanged();
private slots:
void getPath();
void restoreDefaults();
private:
Ui_ExportDialog * _ui;
};
}
#endif /* EXPORTDIALOG_H_ */
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RTABMAP_EXPORTDIALOG_H_
#define RTABMAP_EXPORTDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QSettings>
class Ui_ExportDialog;
namespace rtabmap {
class RTABMAPGUI_EXP ExportDialog : public QDialog
{
Q_OBJECT
public:
ExportDialog(QWidget * parent = 0);
virtual ~ExportDialog();
void saveSettings(QSettings & settings, const QString & group) const;
void loadSettings(QSettings & settings, const QString & group);
QString outputPath() const;
int framesIgnored() const;
double targetFramerate() const;
int sessionExported() const;
bool isRgbExported() const;
bool isDepthExported() const;
bool isDepth2dExported() const;
bool isOdomExported() const;
bool isUserDataExported() const;
signals:
void configChanged();
private slots:
void getPath();
void restoreDefaults();
private:
Ui_ExportDialog * _ui;
};
}
#endif /* EXPORTDIALOG_H_ */

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GRAPHVIEWER_H_
#define GRAPHVIEWER_H_
#ifndef RTABMAP_GRAPHVIEWER_H_
#define RTABMAP_GRAPHVIEWER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef IMAGEVIEW_H_
#define IMAGEVIEW_H_
#ifndef RTABMAP_IMAGEVIEW_H_
#define RTABMAP_IMAGEVIEW_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
@@ -63,6 +63,7 @@ public:
int getAlpha() const {return _alpha;}
bool isGraphicsViewMode() const;
bool isGraphicsViewScaled() const;
const QColor & getDefaultBackgroundColor() const;
const QColor & getBackgroundColor() const;
float viewScale() const;
@@ -73,6 +74,7 @@ public:
void setLinesShown(bool shown);
void setGraphicsViewMode(bool on);
void setGraphicsViewScaled(bool scaled);
void setDefaultBackgroundColor(const QColor & color);
void setBackgroundColor(const QColor & color);
void setFeatures(const std::multimap<int, cv::KeyPoint> & refWords, const cv::Mat & depth = cv::Mat(), const QColor & color = Qt::yellow);
@@ -112,6 +114,7 @@ private:
private:
QString _savedFileName;
int _alpha;
QColor _defaultBgColor;
QMenu * _menu;
QAction * _showImage;

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef KEYPOINTITEM_H_
#define KEYPOINTITEM_H_
#ifndef RTABMAP_KEYPOINTITEM_H_
#define RTABMAP_KEYPOINTITEM_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef LOOPCLOSUREVIEWER_H_
#define LOOPCLOSUREVIEWER_H_
#ifndef RTABMAP_LOOPCLOSUREVIEWER_H_
#define RTABMAP_LOOPCLOSUREVIEWER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef MAINWINDOW_H_
#define MAINWINDOW_H_
#ifndef RTABMAP_MAINWINDOW_H_
#define RTABMAP_MAINWINDOW_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
@@ -96,7 +96,7 @@ public:
* @param prefDialog If NULL, a default dialog is created. This
* dialog is automatically destroyed with the MainWindow.
*/
MainWindow(PreferencesDialog * prefDialog = 0, QWidget * parent = 0);
MainWindow(PreferencesDialog * prefDialog = 0, QWidget * parent = 0, bool showSplashScreen = true);
virtual ~MainWindow();
QString getWorkingDirectory() const;
@@ -106,8 +106,10 @@ public:
bool isProcessingStatistics() const {return _processingStatistics;}
bool isProcessingOdometry() const {return _processingOdometry;}
bool isDatabaseUpdated() const { return _databaseUpdated; }
public slots:
void processStats(const rtabmap::Statistics & stat);
virtual void processStats(const rtabmap::Statistics & stat);
void updateCacheFromDatabase(const QString & path);
void openDatabase(const QString & path);
void updateParameters(const rtabmap::ParametersMap & parameters);
@@ -121,19 +123,31 @@ protected:
virtual void keyPressEvent(QKeyEvent *event);
virtual bool eventFilter(QObject *obj, QEvent *event);
private slots:
void changeState(MainWindow::State state);
protected slots:
virtual void changeState(MainWindow::State state);
virtual void newDatabase();
virtual void openDatabase();
virtual bool closeDatabase();
virtual void startDetection();
virtual void pauseDetection();
virtual void stopDetection();
virtual void saveConfigGUI();
virtual void downloadAllClouds();
virtual void downloadPoseGraph();
virtual void clearTheCache();
virtual void openHelp();
virtual void openPreferences();
virtual void openPreferencesSource();
virtual void setDefaultViews();
virtual void resetOdometry();
virtual void triggerNewMap();
virtual void deleteMemory();
protected slots:
void beep();
void cancelProgress();
void configGUIModified();
void saveConfigGUI();
void newDatabase();
void openDatabase();
bool closeDatabase();
void editDatabase();
void startDetection();
void pauseDetection();
void stopDetection();
void notifyNoMoreImages();
void printLoopClosureIds();
void generateGraphDOT();
@@ -146,7 +160,6 @@ private slots:
void exportOctomap();
void postProcessing();
void depthCalibration();
void deleteMemory();
void openWorkingDirectory();
void updateEditMenu();
void selectStream();
@@ -169,14 +182,7 @@ private slots:
void cancelGoal();
void label();
void updateCacheFromDatabase();
void downloadAllClouds();
void downloadPoseGraph();
void anchorCloudsToGroundTruth();
void clearTheCache();
void openHelp();
void openPreferences();
void openPreferencesSource();
void setDefaultViews();
void selectScreenCaptureFormat(bool checked);
void takeScreenshot();
void updateElapsedTime();
@@ -207,8 +213,6 @@ private slots:
void exportClouds();
void exportBundlerFormat();
void viewClouds();
void resetOdometry();
void triggerNewMap();
void dataRecorder();
void dataRecorderDestroyed();
void updateNodeVisibility(int, bool);
@@ -256,6 +260,33 @@ private:
void exportPoses(int format);
QString captureScreen(bool cacheInRAM = false);
protected:
Ui_mainWindow * ui() { return _ui; }
const State & state() const { return _state; }
const QMap<int, Signature> & cachedSignatures() const { return _cachedSignatures;}
const std::map<int, Transform> & currentPosesMap() const { return _currentPosesMap; } // <nodeId, pose>
const std::map<int, Transform> & currentGTPosesMap() const { return _currentGTPosesMap; } // <nodeId, pose>
const std::multimap<int, Link> & currentLinksMap() const { return _currentLinksMap; } // <nodeFromId, link>
const std::map<int, int> & currentMapIds() const { return _currentMapIds; } // <nodeId, mapId>
const std::map<int, std::string> & currentLabels() const { return _currentLabels; } // <nodeId, label>
const std::map<int, std::pair<pcl::PointCloud<pcl::PointXYZRGB>::Ptr, pcl::IndicesPtr> > & cachedClouds() const { return _cachedClouds; }
const std::map<int, cv::Mat> & createdScans() const { return _createdScans; }
const std::map<int, pcl::PointCloud<pcl::PointXYZRGB>::Ptr> & createdFeatures() const { return _createdFeatures; }
const rtabmap::OccupancyGrid * occupancyGrid() const { return _occupancyGrid; }
const rtabmap::OctoMap * octomap() const { return _octomap; }
rtabmap::ProgressDialog * progressDialog() { return _progressDialog; }
rtabmap::CloudViewer * cloudViewer() const { return _cloudViewer; }
rtabmap::LoopClosureViewer * loopClosureViewer() const { return _loopClosureViewer; }
void setCloudViewer(rtabmap::CloudViewer * cloudViewer);
void setLoopClosureViewer(rtabmap::LoopClosureViewer * loopClosureViewer);
void setNewDatabasePathOutput(const QString & newDatabasePathOutput) {_newDatabasePathOutput = newDatabasePathOutput;}
const QString & newDatabasePathOutput() const { return _newDatabasePathOutput; }
private:
Ui_mainWindow * _ui;
@@ -320,7 +351,7 @@ private:
PdfPlotCurve * _likelihoodCurve;
PdfPlotCurve * _rawLikelihoodCurve;
ProgressDialog * _initProgressDialog;
ProgressDialog * _progressDialog;
CloudViewer * _cloudViewer;
LoopClosureViewer * _loopClosureViewer;
@@ -341,4 +372,4 @@ private:
}
#endif /* MainWindow_H_ */
#endif /* RTABMAP_MainWindow_H_ */

View File

@@ -25,8 +25,10 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef MAPVISIBILITYWIDGET_H_
#define MAPVISIBILITYWIDGET_H_
#ifndef RTABMAP_MAPVISIBILITYWIDGET_H_
#define RTABMAP_MAPVISIBILITYWIDGET_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QWidget>
#include <rtabmap/core/Transform.h>
@@ -34,7 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace rtabmap {
class MapVisibilityWidget : public QWidget {
class RTABMAPGUI_EXP MapVisibilityWidget : public QWidget {
Q_OBJECT;
public:
MapVisibilityWidget(QWidget * parent = 0);

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef ODOMETRYVIEWER_H_
#define ODOMETRYVIEWER_H_
#ifndef RTABMAP_ODOMETRYVIEWER_H_
#define RTABMAP_ODOMETRYVIEWER_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -29,8 +29,10 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// Original version from Find-Object: https://github.com/introlab/find-object
//
#ifndef PARAMETERSTOOLBOX_H_
#define PARAMETERSTOOLBOX_H_
#ifndef RTABMAP_PARAMETERSTOOLBOX_H_
#define RTABMAP_PARAMETERSTOOLBOX_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <rtabmap/core/Parameters.h>
#include <QWidget>
@@ -42,7 +44,7 @@ class QComboBox;
namespace rtabmap {
class ParametersToolBox: public QWidget
class RTABMAPGUI_EXP ParametersToolBox: public QWidget
{
Q_OBJECT

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef PDFPLOT_H_
#define PDFPLOT_H_
#ifndef RTABMAP_PDFPLOT_H_
#define RTABMAP_PDFPLOT_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -1,94 +1,96 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef POSTPROCESSINGDIALOG_H_
#define POSTPROCESSINGDIALOG_H_
#include <QDialog>
#include <QtCore/QSettings>
#include <rtabmap/core/Optimizer.h>
class Ui_PostProcessingDialog;
class QAbstractButton;
namespace rtabmap {
class PostProcessingDialog : public QDialog
{
Q_OBJECT
public:
PostProcessingDialog(QWidget * parent = 0);
virtual ~PostProcessingDialog();
void saveSettings(QSettings & settings, const QString & group = "") const;
void loadSettings(QSettings & settings, const QString & group = "");
//getters
bool isDetectMoreLoopClosures() const;
double clusterRadius() const;
double clusterAngle() const;
int iterations() const;
bool isRefineNeighborLinks() const;
bool isRefineLoopClosureLinks() const;
bool isSBA() const;
int sbaIterations() const;
double sbaVariance() const;
Optimizer::Type sbaType() const;
//setters
void setDetectMoreLoopClosures(bool on);
void setClusterRadius(double radius);
void setClusterAngle(double angle);
void setIterations(int iterations);
void setRefineNeighborLinks(bool on);
void setRefineLoopClosureLinks(bool on);
void setSBA(bool on);
void setSBAIterations(int iterations);
void setSBAVariance(double variance);
void setSBAType(Optimizer::Type type);
signals:
void configChanged();
public slots:
void restoreDefaults();
private slots:
void updateVisibility();
void updateButtonBox();
private:
Ui_PostProcessingDialog * _ui;
};
}
#endif /* POSTPROCESSINGDIALOG_H_ */
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the Universite de Sherbrooke nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RTABMAP_POSTPROCESSINGDIALOG_H_
#define RTABMAP_POSTPROCESSINGDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines
#include <QDialog>
#include <QtCore/QSettings>
#include <rtabmap/core/Optimizer.h>
class Ui_PostProcessingDialog;
class QAbstractButton;
namespace rtabmap {
class RTABMAPGUI_EXP PostProcessingDialog : public QDialog
{
Q_OBJECT
public:
PostProcessingDialog(QWidget * parent = 0);
virtual ~PostProcessingDialog();
void saveSettings(QSettings & settings, const QString & group = "") const;
void loadSettings(QSettings & settings, const QString & group = "");
//getters
bool isDetectMoreLoopClosures() const;
double clusterRadius() const;
double clusterAngle() const;
int iterations() const;
bool isRefineNeighborLinks() const;
bool isRefineLoopClosureLinks() const;
bool isSBA() const;
int sbaIterations() const;
double sbaVariance() const;
Optimizer::Type sbaType() const;
//setters
void setDetectMoreLoopClosures(bool on);
void setClusterRadius(double radius);
void setClusterAngle(double angle);
void setIterations(int iterations);
void setRefineNeighborLinks(bool on);
void setRefineLoopClosureLinks(bool on);
void setSBA(bool on);
void setSBAIterations(int iterations);
void setSBAVariance(double variance);
void setSBAType(Optimizer::Type type);
signals:
void configChanged();
public slots:
void restoreDefaults();
private slots:
void updateVisibility();
void updateButtonBox();
private:
Ui_PostProcessingDialog * _ui;
};
}
#endif /* POSTPROCESSINGDIALOG_H_ */

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef PREFERENCESDIALOG_H_
#define PREFERENCESDIALOG_H_
#ifndef RTABMAP_PREFERENCESDIALOG_H_
#define RTABMAP_PREFERENCESDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef PROGRESSDIALOG_H_
#define PROGRESSDIALOG_H_
#ifndef RTABMAP_PROGRESSDIALOG_H_
#define RTABMAP_PROGRESSDIALOG_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef RECOVERYSTATE_H_
#define RECOVERYSTATE_H_
#ifndef RTABMAP_RECOVERYSTATE_H_
#define RTABMAP_RECOVERYSTATE_H_
#include "rtabmap/gui/ProgressDialog.h"
#include "rtabmap/core/ProgressState.h"

View File

@@ -25,8 +25,8 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef STATSTOOLBOX_H_
#define STATSTOOLBOX_H_
#ifndef RTABMAP_STATSTOOLBOX_H_
#define RTABMAP_STATSTOOLBOX_H_
#include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines

View File

@@ -26,8 +26,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef GUILIB_SRC_TEXTURINGSTATE_H_
#define GUILIB_SRC_TEXTURINGSTATE_H_
#ifndef RTABMAP_TEXTURINGSTATE_H_
#define RTABMAP_TEXTURINGSTATE_H_
#include "rtabmap/gui/ProgressDialog.h"
#include "rtabmap/core/ProgressState.h"

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "AboutDialog.h"
#include "rtabmap/gui/AboutDialog.h"
#include "rtabmap/core/Parameters.h"
#include "rtabmap/core/CameraRGBD.h"
#include "rtabmap/core/CameraStereo.h"

View File

@@ -5,7 +5,7 @@ SET(headers_ui
../include/${PROJECT_PREFIX}/gui/MainWindow.h
../include/${PROJECT_PREFIX}/gui/PreferencesDialog.h
../include/${PROJECT_PREFIX}/gui/DatabaseViewer.h
./AboutDialog.h
../include/${PROJECT_PREFIX}/gui/AboutDialog.h
../include/${PROJECT_PREFIX}/gui/ConsoleWidget.h
../include/${PROJECT_PREFIX}/gui/ImageView.h
../include/${PROJECT_PREFIX}/gui/PdfPlot.h
@@ -19,19 +19,19 @@ SET(headers_ui
../include/${PROJECT_PREFIX}/gui/DataRecorder.h
../include/${PROJECT_PREFIX}/gui/CameraViewer.h
../include/${PROJECT_PREFIX}/gui/CalibrationDialog.h
./ExportDialog.h
./PostProcessingDialog.h
./ExportCloudsDialog.h
./ExportBundlerDialog.h
./MapVisibilityWidget.h
../include/${PROJECT_PREFIX}/gui/ExportDialog.h
../include/${PROJECT_PREFIX}/gui/PostProcessingDialog.h
../include/${PROJECT_PREFIX}/gui/ExportCloudsDialog.h
../include/${PROJECT_PREFIX}/gui/ExportBundlerDialog.h
../include/${PROJECT_PREFIX}/gui/MapVisibilityWidget.h
../include/${PROJECT_PREFIX}/gui/GraphViewer.h
./CreateSimpleCalibrationDialog.h
./ParametersToolBox.h
./DepthCalibrationDialog.h
../include/${PROJECT_PREFIX}/gui/CreateSimpleCalibrationDialog.h
../include/${PROJECT_PREFIX}/gui/ParametersToolBox.h
../include/${PROJECT_PREFIX}/gui/DepthCalibrationDialog.h
./3rdParty/QMultiComboBox.h
./TexturingState.h
./RecoveryState.h
./EditDepthArea.h
../include/${PROJECT_PREFIX}/gui/TexturingState.h
../include/${PROJECT_PREFIX}/gui/RecoveryState.h
../include/${PROJECT_PREFIX}/gui/EditDepthArea.h
)
SET(uis

View File

@@ -1638,17 +1638,18 @@ void CloudViewer::resetCamera()
if((_aFollowCamera->isChecked() || _aLockCamera->isChecked()) && !_lastPose.isNull())
{
// reset relative to last current pose
cv::Point3f pt = util3d::transformPoint(cv::Point3f(_lastPose.x(), _lastPose.y(), _lastPose.z()), _lastPose.rotation()*Transform(-1, 0, 0));
if(_aLockViewZ->isChecked())
{
_visualizer->setCameraPosition(
_lastPose.x()-1, _lastPose.y(), _lastPose.z(),
pt.x, pt.y, pt.z,
_lastPose.x(), _lastPose.y(), _lastPose.z(),
0, 0, 1);
}
else
{
_visualizer->setCameraPosition(
_lastPose.x()-1, _lastPose.y(), _lastPose.z(),
pt.x, pt.y, pt.z,
_lastPose.x(), _lastPose.y(), _lastPose.z(),
_lastPose.r31(), _lastPose.r32(), _lastPose.r33());
}

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "CreateSimpleCalibrationDialog.h"
#include "rtabmap/gui/CreateSimpleCalibrationDialog.h"
#include "ui_createSimpleCalibrationDialog.h"
#include "rtabmap/core/CameraModel.h"

View File

@@ -71,14 +71,14 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/core/GeodeticCoords.h"
#include "rtabmap/core/Recovery.h"
#include "rtabmap/gui/DataRecorder.h"
#include "ExportCloudsDialog.h"
#include "EditDepthArea.h"
#include "rtabmap/gui/ExportCloudsDialog.h"
#include "rtabmap/gui/EditDepthArea.h"
#include "rtabmap/core/SensorData.h"
#include "rtabmap/core/GainCompensator.h"
#include "ExportDialog.h"
#include "rtabmap/gui/ExportDialog.h"
#include "rtabmap/gui/ProgressDialog.h"
#include "ParametersToolBox.h"
#include "RecoveryState.h"
#include "rtabmap/gui/ParametersToolBox.h"
#include "rtabmap/gui/RecoveryState.h"
#include <pcl/io/pcd_io.h>
#include <pcl/io/ply_io.h>
#include <pcl/filters/voxel_grid.h>
@@ -1436,7 +1436,7 @@ void DatabaseViewer::updateIds()
std::multimap<int, Link> links;
dbDriver_->getAllLinks(links, true);
UDEBUG("%d total links loaded", (int)links.size());
double totalOdom = 0.0;
Transform previousPose;
int sessions = ids_.size()?1:0;

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <DepthCalibrationDialog.h>
#include <rtabmap/gui/DepthCalibrationDialog.h>
#include "ui_depthCalibrationDialog.h"
#include "rtabmap/gui/ProgressDialog.h"

View File

@@ -32,7 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <QAction>
#include <QInputDialog>
#include "EditDepthArea.h"
#include "rtabmap/gui/EditDepthArea.h"
#include <rtabmap/utilite/ULogger.h>
#include <rtabmap/utilite/UCv2Qt.h>

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "ExportBundlerDialog.h"
#include "rtabmap/gui/ExportBundlerDialog.h"
#include "ui_exportBundlerDialog.h"
#include <QFileDialog>

View File

@@ -25,11 +25,11 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "ExportCloudsDialog.h"
#include "rtabmap/gui/ExportCloudsDialog.h"
#include "ui_exportCloudsDialog.h"
#include "rtabmap/gui/CloudViewer.h"
#include "TexturingState.h"
#include "rtabmap/gui/TexturingState.h"
#include "rtabmap/utilite/ULogger.h"
#include "rtabmap/utilite/UConversion.h"
#include "rtabmap/utilite/UThread.h"

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "ExportDialog.h"
#include "rtabmap/gui/ExportDialog.h"
#include "ui_exportDialog.h"
#include <QFileDialog>

View File

@@ -148,6 +148,7 @@ ImageView::ImageView(QWidget * parent) :
QWidget(parent),
_savedFileName((QDir::homePath()+ "/") + "picture" + ".png"),
_alpha(50),
_defaultBgColor(Qt::black),
_imageItem(0),
_imageDepthItem(0)
{
@@ -202,6 +203,7 @@ void ImageView::saveSettings(QSettings & settings, const QString & group) const
settings.setValue("features_shown", this->isFeaturesShown());
settings.setValue("lines_shown", this->isLinesShown());
settings.setValue("alpha", this->getAlpha());
settings.setValue("bg_color", this->getDefaultBackgroundColor());
settings.setValue("graphics_view", this->isGraphicsViewMode());
settings.setValue("graphics_view_scale", this->isGraphicsViewScaled());
if(!group.isEmpty())
@@ -221,6 +223,7 @@ void ImageView::loadSettings(QSettings & settings, const QString & group)
this->setFeaturesShown(settings.value("features_shown", this->isFeaturesShown()).toBool());
this->setLinesShown(settings.value("lines_shown", this->isLinesShown()).toBool());
this->setAlpha(settings.value("alpha", this->getAlpha()).toInt());
this->setDefaultBackgroundColor(settings.value("bg_color", this->getDefaultBackgroundColor()).value<QColor>());
this->setGraphicsViewMode(settings.value("graphics_view", this->isGraphicsViewMode()).toBool());
this->setGraphicsViewScaled(settings.value("graphics_view_scale", this->isGraphicsViewScaled()).toBool());
if(!group.isEmpty())
@@ -259,6 +262,11 @@ bool ImageView::isGraphicsViewScaled() const
return _graphicsViewScaled->isChecked();
}
const QColor & ImageView::getDefaultBackgroundColor() const
{
return _defaultBgColor;
}
const QColor & ImageView::getBackgroundColor() const
{
return _graphicsView->backgroundBrush().color();
@@ -416,6 +424,12 @@ void ImageView::setGraphicsViewScaled(bool scaled)
}
}
void ImageView::setDefaultBackgroundColor(const QColor & color)
{
_defaultBgColor = color;
setBackgroundColor(color);
}
void ImageView::setBackgroundColor(const QColor & color)
{
_graphicsView->setBackgroundBrush(QBrush(color));

View File

@@ -53,6 +53,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/gui/ProgressDialog.h"
#include "rtabmap/gui/CloudViewer.h"
#include "rtabmap/gui/LoopClosureViewer.h"
#include "rtabmap/gui/ExportCloudsDialog.h"
#include "rtabmap/gui/ExportBundlerDialog.h"
#include "rtabmap/gui/AboutDialog.h"
#include "rtabmap/gui/PostProcessingDialog.h"
#include "rtabmap/gui/DepthCalibrationDialog.h"
#include "rtabmap/gui/RecoveryState.h"
#include <rtabmap/utilite/UStl.h>
#include <rtabmap/utilite/ULogger.h>
@@ -62,13 +68,6 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/utilite/UPlot.h"
#include "rtabmap/utilite/UCv2Qt.h"
#include "ExportCloudsDialog.h"
#include "ExportBundlerDialog.h"
#include "AboutDialog.h"
#include "PostProcessingDialog.h"
#include "DepthCalibrationDialog.h"
#include "RecoveryState.h"
#include <QtGui/QCloseEvent>
#include <QtGui/QPixmap>
#include <QtCore/QDir>
@@ -130,7 +129,7 @@ inline static void initGuiResource() { Q_INIT_RESOURCE(GuiLib); }
namespace rtabmap {
MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent, bool showSplashScreen) :
QMainWindow(parent),
_ui(0),
_state(kIdle),
@@ -177,11 +176,15 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
initGuiResource();
QPixmap pixmap(":images/RTAB-Map.png");
QSplashScreen splash(pixmap);
splash.show();
splash.showMessage(tr("Loading..."));
QApplication::processEvents();
QSplashScreen * splash = 0;
if (showSplashScreen)
{
QPixmap pixmap(":images/RTAB-Map.png");
splash = new QSplashScreen(pixmap);
splash->show();
splash->showMessage(tr("Loading..."));
QApplication::processEvents();
}
// Create dialogs
_aboutDialog = new AboutDialog(this);
@@ -265,9 +268,9 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
_logEventTime->start();
//Graphics scenes
_ui->imageView_source->setBackgroundColor(Qt::black);
_ui->imageView_loopClosure->setBackgroundColor(Qt::black);
_ui->imageView_odometry->setBackgroundColor(Qt::black);
_ui->imageView_source->setBackgroundColor(_ui->imageView_source->getDefaultBackgroundColor());
_ui->imageView_loopClosure->setBackgroundColor(_ui->imageView_loopClosure->getDefaultBackgroundColor());
_ui->imageView_odometry->setBackgroundColor(_ui->imageView_odometry->getDefaultBackgroundColor());
_ui->imageView_odometry->setAlpha(200);
_preferencesDialog->loadWidgetState(_ui->imageView_source);
_preferencesDialog->loadWidgetState(_ui->imageView_loopClosure);
@@ -290,9 +293,9 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
_ui->rawLikelihoodPlot->addCurve(_rawLikelihoodCurve, false);
_ui->rawLikelihoodPlot->showLegend(false);
_initProgressDialog = new ProgressDialog(this);
_initProgressDialog->setMinimumWidth(800);
connect(_initProgressDialog, SIGNAL(canceled()), this, SLOT(cancelProgress()));
_progressDialog = new ProgressDialog(this);
_progressDialog->setMinimumWidth(800);
connect(_progressDialog, SIGNAL(canceled()), this, SLOT(cancelProgress()));
connect(_ui->widget_mapVisibility, SIGNAL(visibilityChanged(int, bool)), this, SLOT(updateNodeVisibility(int, bool)));
@@ -326,7 +329,7 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
_ui->toolBar_2->setWindowTitle(tr("Control toolbar"));
QAction * a = _ui->menuShow_view->addAction("Progress dialog");
a->setCheckable(false);
connect(a, SIGNAL(triggered(bool)), _initProgressDialog, SLOT(show()));
connect(a, SIGNAL(triggered(bool)), _progressDialog, SLOT(show()));
QAction * statusBarAction = _ui->menuShow_view->addAction("Status bar");
statusBarAction->setCheckable(true);
statusBarAction->setChecked(statusBarShown);
@@ -618,7 +621,11 @@ MainWindow::MainWindow(PreferencesDialog * prefDialog, QWidget * parent) :
_loopClosureViewer->setDecimation(_preferencesDialog->getCloudDecimation(0));
_loopClosureViewer->setMaxDepth(_preferencesDialog->getCloudMaxDepth(0));
splash.close();
if (splash)
{
splash->close();
delete splash;
}
this->setFocus();
@@ -650,6 +657,30 @@ void MainWindow::setupMainLayout(bool vertical)
}
}
void MainWindow::setCloudViewer(rtabmap::CloudViewer * cloudViewer)
{
UASSERT(cloudViewer);
delete _cloudViewer;
_cloudViewer = cloudViewer;
_cloudViewer->setParent(_ui->layout_cloudViewer);
_cloudViewer->setObjectName("widget_cloudViewer");
_ui->layout_cloudViewer->layout()->addWidget(_cloudViewer);
_cloudViewer->setBackfaceCulling(true, false);
_preferencesDialog->loadWidgetState(_cloudViewer);
connect(_cloudViewer, SIGNAL(configChanged()), this, SLOT(configGUIModified()));
}
void MainWindow::setLoopClosureViewer(rtabmap::LoopClosureViewer * loopClosureViewer)
{
UASSERT(loopClosureViewer);
delete _loopClosureViewer;
_loopClosureViewer = loopClosureViewer;
_loopClosureViewer->setParent(_ui->layout_loopClosureViewer);
_loopClosureViewer->setObjectName("widget_loopClosureViewer");
_ui->layout_loopClosureViewer->layout()->addWidget(_loopClosureViewer);
}
void MainWindow::closeEvent(QCloseEvent* event)
{
// Try to close all children
@@ -950,7 +981,7 @@ void MainWindow::processOdometry(const rtabmap::OdometryEvent & odom, bool dataI
UDEBUG("odom ok");
lostStateChanged = _cloudViewer->getBackgroundColor() == Qt::darkRed;
_cloudViewer->setBackgroundColor(_cloudViewer->getDefaultBackgroundColor());
_ui->imageView_odometry->setBackgroundColor(Qt::black);
_ui->imageView_odometry->setBackgroundColor(_ui->imageView_odometry->getDefaultBackgroundColor());
}
if(!pose.isNull() && (_ui->dockWidget_cloudViewer->isVisible() || _ui->graphicsView_graphView->isVisible()))
@@ -1501,8 +1532,8 @@ void MainWindow::processStats(const rtabmap::Statistics & stat)
_ui->imageView_source->clear();
_ui->imageView_loopClosure->clear();
_ui->imageView_source->setBackgroundColor(Qt::black);
_ui->imageView_loopClosure->setBackgroundColor(Qt::black);
_ui->imageView_source->setBackgroundColor(_ui->imageView_source->getDefaultBackgroundColor());
_ui->imageView_loopClosure->setBackgroundColor(_ui->imageView_loopClosure->getDefaultBackgroundColor());
_ui->label_matchId->clear();
}
@@ -1970,7 +2001,7 @@ void MainWindow::updateMapCloud(
if(verboseProgress)
{
_initProgressDialog->appendText(tr("Map update: %1 nodes shown of %2 (cloud filtering is on)").arg(poses.size()).arg(posesIn.size()));
_progressDialog->appendText(tr("Map update: %1 nodes shown of %2 (cloud filtering is on)").arg(poses.size()).arg(posesIn.size()));
QApplication::processEvents();
}
}
@@ -2181,8 +2212,8 @@ void MainWindow::updateMapCloud(
if(verboseProgress)
{
_initProgressDialog->appendText(tr("Updated cloud %1 (%2/%3)").arg(iter->first).arg(i).arg(poses.size()));
_initProgressDialog->incrementStep();
_progressDialog->appendText(tr("Updated cloud %1 (%2/%3)").arg(iter->first).arg(i).arg(poses.size()));
_progressDialog->incrementStep();
if(poses.size() < 200 || i % 100 == 0)
{
QApplication::processEvents();
@@ -3441,13 +3472,13 @@ void MainWindow::processRtabmapEventInit(int status, const QString & info)
{
if((RtabmapEventInit::Status)status == RtabmapEventInit::kInitializing)
{
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_progressDialog->resetProgress();
_progressDialog->show();
this->changeState(MainWindow::kInitializing);
}
else if((RtabmapEventInit::Status)status == RtabmapEventInit::kInitialized)
{
_initProgressDialog->setValue(_initProgressDialog->maximumSteps());
_progressDialog->setValue(_progressDialog->maximumSteps());
this->changeState(MainWindow::kInitialized);
if(!_openedDatabasePath.isEmpty())
@@ -3457,8 +3488,8 @@ void MainWindow::processRtabmapEventInit(int status, const QString & info)
}
else if((RtabmapEventInit::Status)status == RtabmapEventInit::kClosing)
{
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_progressDialog->resetProgress();
_progressDialog->show();
if(_state!=kApplicationClosing)
{
this->changeState(MainWindow::kClosing);
@@ -3466,7 +3497,7 @@ void MainWindow::processRtabmapEventInit(int status, const QString & info)
}
else if((RtabmapEventInit::Status)status == RtabmapEventInit::kClosed)
{
_initProgressDialog->setValue(_initProgressDialog->maximumSteps());
_progressDialog->setValue(_progressDialog->maximumSteps());
if(_databaseUpdated)
{
@@ -3544,46 +3575,46 @@ void MainWindow::processRtabmapEventInit(int status, const QString & info)
}
else
{
_initProgressDialog->incrementStep();
_progressDialog->incrementStep();
QString msg(info);
if((RtabmapEventInit::Status)status == RtabmapEventInit::kError)
{
_openedDatabasePath.clear();
_newDatabasePath.clear();
_newDatabasePathOutput.clear();
_initProgressDialog->setAutoClose(false);
_progressDialog->setAutoClose(false);
msg.prepend(tr("[ERROR] "));
_initProgressDialog->appendText(msg);
_progressDialog->appendText(msg);
this->changeState(MainWindow::kIdle);
}
else
{
_initProgressDialog->appendText(msg);
_progressDialog->appendText(msg);
}
}
}
void MainWindow::processRtabmapEvent3DMap(const rtabmap::RtabmapEvent3DMap & event)
{
_initProgressDialog->appendText("Downloading the map... done.");
_initProgressDialog->incrementStep();
_progressDialog->appendText("Downloading the map... done.");
_progressDialog->incrementStep();
if(event.getCode())
{
UERROR("Map received with code error %d!", event.getCode());
_initProgressDialog->appendText(uFormat("[ERROR] Map received with code error %d!", event.getCode()).c_str());
_initProgressDialog->setAutoClose(false);
_progressDialog->appendText(uFormat("[ERROR] Map received with code error %d!", event.getCode()).c_str());
_progressDialog->setAutoClose(false);
}
else
{
_processingDownloadedMap = true;
UINFO("Received map!");
_initProgressDialog->appendText(tr(" poses = %1").arg(event.getPoses().size()));
_initProgressDialog->appendText(tr(" constraints = %1").arg(event.getConstraints().size()));
_progressDialog->appendText(tr(" poses = %1").arg(event.getPoses().size()));
_progressDialog->appendText(tr(" constraints = %1").arg(event.getConstraints().size()));
_initProgressDialog->setMaximumSteps(int(event.getSignatures().size()+event.getPoses().size()+1));
_initProgressDialog->appendText(QString("Inserting data in the cache (%1 signatures downloaded)...").arg(event.getSignatures().size()));
_progressDialog->setMaximumSteps(int(event.getSignatures().size()+event.getPoses().size()+1));
_progressDialog->appendText(QString("Inserting data in the cache (%1 signatures downloaded)...").arg(event.getSignatures().size()));
QApplication::processEvents();
int addedSignatures = 0;
@@ -3610,34 +3641,34 @@ void MainWindow::processRtabmapEvent3DMap(const rtabmap::RtabmapEvent3DMap & eve
_cachedMemoryUsage += iter->second.sensorData().getMemoryUsed();
++addedSignatures;
}
_initProgressDialog->incrementStep();
_progressDialog->incrementStep();
QApplication::processEvents();
}
_initProgressDialog->appendText(tr("Inserted %1 new signatures.").arg(addedSignatures));
_initProgressDialog->incrementStep();
_progressDialog->appendText(tr("Inserted %1 new signatures.").arg(addedSignatures));
_progressDialog->incrementStep();
QApplication::processEvents();
_initProgressDialog->appendText("Inserting data in the cache... done.");
_progressDialog->appendText("Inserting data in the cache... done.");
if(event.getPoses().size())
{
_initProgressDialog->appendText("Updating the 3D map cloud...");
_initProgressDialog->incrementStep();
_initProgressDialog->setCancelButtonVisible(true);
_progressDialog->appendText("Updating the 3D map cloud...");
_progressDialog->incrementStep();
_progressDialog->setCancelButtonVisible(true);
_progressCanceled = false;
QApplication::processEvents();
std::map<int, Transform> poses = event.getPoses();
alignPosesToGroundTruth(poses, groundTruth);
this->updateMapCloud(poses, event.getConstraints(), mapIds, labels, groundTruth, true);
_initProgressDialog->appendText("Updating the 3D map cloud... done.");
_progressDialog->appendText("Updating the 3D map cloud... done.");
}
else
{
_initProgressDialog->appendText("No poses received! The map cloud cannot be updated...");
_progressDialog->appendText("No poses received! The map cloud cannot be updated...");
UINFO("Map received is empty! Cannot update the map cloud...");
}
_initProgressDialog->appendText(tr("%1 locations are updated to/inserted in the cache.").arg(event.getPoses().size()));
_progressDialog->appendText(tr("%1 locations are updated to/inserted in the cache.").arg(event.getPoses().size()));
if(!_preferencesDialog->isImagesKept())
{
@@ -3652,8 +3683,8 @@ void MainWindow::processRtabmapEvent3DMap(const rtabmap::RtabmapEvent3DMap & eve
}
_processingDownloadedMap = false;
}
_initProgressDialog->setValue(_initProgressDialog->maximumSteps());
_initProgressDialog->setCancelButtonVisible(false);
_progressDialog->setValue(_progressDialog->maximumSteps());
_progressDialog->setCancelButtonVisible(false);
_progressCanceled = false;
}
@@ -4158,7 +4189,7 @@ void MainWindow::beep()
void MainWindow::cancelProgress()
{
_progressCanceled = true;
_initProgressDialog->appendText(tr("Canceled!"));
_progressDialog->appendText(tr("Canceled!"));
}
void MainWindow::configGUIModified()
@@ -5094,11 +5125,11 @@ void MainWindow::postProcessing()
return;
}
_initProgressDialog->resetProgress();
_initProgressDialog->clear();
_initProgressDialog->show();
_initProgressDialog->appendText("Post-processing beginning!");
_initProgressDialog->setCancelButtonVisible(true);
_progressDialog->resetProgress();
_progressDialog->clear();
_progressDialog->show();
_progressDialog->appendText("Post-processing beginning!");
_progressDialog->setCancelButtonVisible(true);
_progressCanceled = false;
int totalSteps = 0;
@@ -5114,8 +5145,8 @@ void MainWindow::postProcessing()
{
totalSteps+=1;
}
_initProgressDialog->setMaximumSteps(totalSteps);
_initProgressDialog->show();
_progressDialog->setMaximumSteps(totalSteps);
_progressDialog->show();
ParametersMap parameters = _preferencesDialog->getAllParameters();
Optimizer * optimizer = Optimizer::create(parameters);
@@ -5138,7 +5169,7 @@ void MainWindow::postProcessing()
UASSERT(detectLoopClosureIterations>0);
for(int n=0; n<detectLoopClosureIterations && !_progressCanceled; ++n)
{
_initProgressDialog->appendText(tr("Looking for more loop closures, clustering poses... (iteration=%1/%2, radius=%3 m angle=%4 degrees)")
_progressDialog->appendText(tr("Looking for more loop closures, clustering poses... (iteration=%1/%2, radius=%3 m angle=%4 degrees)")
.arg(n+1).arg(detectLoopClosureIterations).arg(clusterRadius).arg(clusterAngle));
std::multimap<int, int> clusters = graph::radiusPosesClustering(
@@ -5146,8 +5177,8 @@ void MainWindow::postProcessing()
clusterRadius,
clusterAngle*CV_PI/180.0);
_initProgressDialog->setMaximumSteps(_initProgressDialog->maximumSteps()+(int)clusters.size());
_initProgressDialog->appendText(tr("Looking for more loop closures, clustering poses... found %1 clusters.").arg(clusters.size()));
_progressDialog->setMaximumSteps(_progressDialog->maximumSteps()+(int)clusters.size());
_progressDialog->appendText(tr("Looking for more loop closures, clustering poses... found %1 clusters.").arg(clusters.size()));
QApplication::processEvents();
int i=0;
@@ -5353,7 +5384,7 @@ void MainWindow::postProcessing()
if(!msg.empty())
{
UWARN("%s", msg.c_str());
_initProgressDialog->appendText(tr("%1").arg(msg.c_str()));
_progressDialog->appendText(tr("%1").arg(msg.c_str()));
QApplication::processEvents();
updateConstraint = false;
}
@@ -5367,7 +5398,7 @@ void MainWindow::postProcessing()
_currentLinksMap.insert(std::make_pair(from, Link(from, to, Link::kUserClosure, transform, info.covariance.inv())));
++loopClosuresAdded;
_initProgressDialog->appendText(tr("Detected loop closure %1->%2! (%3/%4)").arg(from).arg(to).arg(i+1).arg(clusters.size()));
_progressDialog->appendText(tr("Detected loop closure %1->%2! (%3/%4)").arg(from).arg(to).arg(i+1).arg(clusters.size()));
}
}
}
@@ -5375,9 +5406,9 @@ void MainWindow::postProcessing()
}
}
QApplication::processEvents();
_initProgressDialog->incrementStep();
_progressDialog->incrementStep();
}
_initProgressDialog->appendText(tr("Iteration %1/%2: Detected %3 loop closures!").arg(n+1).arg(detectLoopClosureIterations).arg(addedLinks.size()/2));
_progressDialog->appendText(tr("Iteration %1/%2: Detected %3 loop closures!").arg(n+1).arg(detectLoopClosureIterations).arg(addedLinks.size()/2));
if(addedLinks.size() == 0)
{
break;
@@ -5385,7 +5416,7 @@ void MainWindow::postProcessing()
if(n+1 < detectLoopClosureIterations)
{
_initProgressDialog->appendText(tr("Optimizing graph with new links (%1 nodes, %2 constraints)...")
_progressDialog->appendText(tr("Optimizing graph with new links (%1 nodes, %2 constraints)...")
.arg(odomPoses.size()).arg(_currentLinksMap.size()));
QApplication::processEvents();
@@ -5401,11 +5432,11 @@ void MainWindow::postProcessing()
linksOut);
optimizedPoses = optimizer->optimize(fromId, posesOut, linksOut);
_currentPosesMap = optimizedPoses;
_initProgressDialog->appendText(tr("Optimizing graph with new links... done!"));
_progressDialog->appendText(tr("Optimizing graph with new links... done!"));
}
}
UINFO("Added %d loop closures.", loopClosuresAdded);
_initProgressDialog->appendText(tr("Total new loop closures detected=%1").arg(loopClosuresAdded));
_progressDialog->appendText(tr("Total new loop closures detected=%1").arg(loopClosuresAdded));
}
if(!_progressCanceled && (refineNeighborLinks || refineLoopClosureLinks))
@@ -5413,10 +5444,10 @@ void MainWindow::postProcessing()
UDEBUG("");
if(refineLoopClosureLinks)
{
_initProgressDialog->setMaximumSteps(_initProgressDialog->maximumSteps()+loopClosuresAdded);
_progressDialog->setMaximumSteps(_progressDialog->maximumSteps()+loopClosuresAdded);
}
// TODO: support ICP from laser scans?
_initProgressDialog->appendText(tr("Refining links..."));
_progressDialog->appendText(tr("Refining links..."));
QApplication::processEvents();
RegistrationIcp regIcp(parameters);
@@ -5432,8 +5463,8 @@ void MainWindow::postProcessing()
int from = iter->second.from();
int to = iter->second.to();
_initProgressDialog->appendText(tr("Refining link %1->%2 (%3/%4)").arg(from).arg(to).arg(i+1).arg(_currentLinksMap.size()));
_initProgressDialog->incrementStep();
_progressDialog->appendText(tr("Refining link %1->%2 (%3/%4)").arg(from).arg(to).arg(i+1).arg(_currentLinksMap.size()));
_progressDialog->incrementStep();
QApplication::processEvents();
if(!_cachedSignatures.contains(from))
@@ -5467,7 +5498,7 @@ void MainWindow::postProcessing()
else
{
QString str = tr("Cannot refine link %1->%2 (%3").arg(from).arg(to).arg(info.rejectedMsg.c_str());
_initProgressDialog->appendText(str, Qt::darkYellow);
_progressDialog->appendText(str, Qt::darkYellow);
UWARN("%s", str.toStdString().c_str());
warn = true;
}
@@ -5484,17 +5515,17 @@ void MainWindow::postProcessing()
str = tr("Cannot refine link %1->%2 (scans empty!)").arg(from).arg(to);
}
_initProgressDialog->appendText(str, Qt::darkYellow);
_progressDialog->appendText(str, Qt::darkYellow);
UWARN("%s", str.toStdString().c_str());
warn = true;
}
}
}
}
_initProgressDialog->appendText(tr("Refining links...done!"));
_progressDialog->appendText(tr("Refining links...done!"));
}
_initProgressDialog->appendText(tr("Optimizing graph with updated links (%1 nodes, %2 constraints)...")
_progressDialog->appendText(tr("Optimizing graph with updated links (%1 nodes, %2 constraints)...")
.arg(odomPoses.size()).arg(_currentLinksMap.size()));
int fromId = optimizeFromGraphEnd?odomPoses.rbegin()->first:odomPoses.begin()->first;
@@ -5508,13 +5539,13 @@ void MainWindow::postProcessing()
posesOut,
linksOut);
optimizedPoses = optimizer->optimize(fromId, posesOut, linksOut);
_initProgressDialog->appendText(tr("Optimizing graph with updated links... done!"));
_initProgressDialog->incrementStep();
_progressDialog->appendText(tr("Optimizing graph with updated links... done!"));
_progressDialog->incrementStep();
if(!_progressCanceled && sba)
{
UASSERT(Optimizer::isAvailable(sbaType));
_initProgressDialog->appendText(tr("SBA (%1 nodes, %2 constraints, %3 iterations)...")
_progressDialog->appendText(tr("SBA (%1 nodes, %2 constraints, %3 iterations)...")
.arg(optimizedPoses.size()).arg(linksOut.size()).arg(sbaIterations));
QApplication::processEvents();
uSleep(100);
@@ -5529,17 +5560,17 @@ void MainWindow::postProcessing()
if(newPoses.size())
{
optimizedPoses = newPoses;
_initProgressDialog->appendText(tr("SBA... done!"));
_progressDialog->appendText(tr("SBA... done!"));
}
else
{
_initProgressDialog->appendText(tr("SBA... failed!"));
_initProgressDialog->setAutoClose(false);
_progressDialog->appendText(tr("SBA... failed!"));
_progressDialog->setAutoClose(false);
}
_initProgressDialog->incrementStep();
_progressDialog->incrementStep();
}
_initProgressDialog->appendText(tr("Updating map..."));
_progressDialog->appendText(tr("Updating map..."));
alignPosesToGroundTruth(optimizedPoses, _currentGTPosesMap);
this->updateMapCloud(
optimizedPoses,
@@ -5548,16 +5579,16 @@ void MainWindow::postProcessing()
std::map<int, std::string>(_currentLabels),
std::map<int, Transform>(_currentGTPosesMap),
false);
_initProgressDialog->appendText(tr("Updating map... done!"));
_progressDialog->appendText(tr("Updating map... done!"));
if(warn)
{
_initProgressDialog->setAutoClose(false);
_progressDialog->setAutoClose(false);
}
_initProgressDialog->setValue(_initProgressDialog->maximumSteps());
_initProgressDialog->appendText("Post-processing finished!");
_initProgressDialog->setCancelButtonVisible(false);
_progressDialog->setValue(_progressDialog->maximumSteps());
_progressDialog->appendText("Post-processing finished!");
_progressDialog->setCancelButtonVisible(false);
_progressCanceled = false;
delete optimizer;
@@ -5816,9 +5847,9 @@ void MainWindow::updateCacheFromDatabase(const QString & path)
if(driver->openConnection(path.toStdString()))
{
UINFO("Update cache...");
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_initProgressDialog->appendText(tr("Downloading the map from \"%1\" (without poses and links)...")
_progressDialog->resetProgress();
_progressDialog->show();
_progressDialog->appendText(tr("Downloading the map from \"%1\" (without poses and links)...")
.arg(path));
std::set<int> ids;
@@ -5879,9 +5910,9 @@ void MainWindow::downloadAllClouds()
}
UINFO("Download clouds...");
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_initProgressDialog->appendText(tr("Downloading the map (global=%1 ,optimized=%2)...")
_progressDialog->resetProgress();
_progressDialog->show();
_progressDialog->appendText(tr("Downloading the map (global=%1 ,optimized=%2)...")
.arg(global?"true":"false").arg(optimized?"true":"false"));
this->post(new RtabmapEventCmd(RtabmapEventCmd::kCmdPublish3DMap, global, optimized, false));
}
@@ -5923,9 +5954,9 @@ void MainWindow::downloadPoseGraph()
}
UINFO("Download the graph...");
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_initProgressDialog->appendText(tr("Downloading the graph (global=%1 ,optimized=%2)...")
_progressDialog->resetProgress();
_progressDialog->show();
_progressDialog->appendText(tr("Downloading the graph (global=%1 ,optimized=%2)...")
.arg(global?"true":"false").arg(optimized?"true":"false"));
this->post(new RtabmapEventCmd(RtabmapEventCmd::kCmdPublish3DMap, global, optimized, true));
@@ -5993,9 +6024,9 @@ void MainWindow::clearTheCache()
_ui->imageView_source->clear();
_ui->imageView_loopClosure->clear();
_ui->imageView_odometry->clear();
_ui->imageView_source->setBackgroundColor(Qt::black);
_ui->imageView_loopClosure->setBackgroundColor(Qt::black);
_ui->imageView_odometry->setBackgroundColor(Qt::black);
_ui->imageView_source->setBackgroundColor(_ui->imageView_source->getDefaultBackgroundColor());
_ui->imageView_loopClosure->setBackgroundColor(_ui->imageView_loopClosure->getDefaultBackgroundColor());
_ui->imageView_odometry->setBackgroundColor(_ui->imageView_odometry->getDefaultBackgroundColor());
#ifdef RTABMAP_OCTOMAP
// re-create one if the resolution has changed
UASSERT(_octomap != 0);
@@ -6169,20 +6200,20 @@ void MainWindow::selectScreenCaptureFormat(bool checked)
}
targetDir += QDir::separator();
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_initProgressDialog->setMaximumSteps(_autoScreenCaptureCachedImages.size());
_progressDialog->resetProgress();
_progressDialog->show();
_progressDialog->setMaximumSteps(_autoScreenCaptureCachedImages.size());
int i=0;
for(QMap<QString, QByteArray>::iterator iter=_autoScreenCaptureCachedImages.begin(); iter!=_autoScreenCaptureCachedImages.end(); ++iter)
{
QPixmap figure;
figure.loadFromData(iter.value(), "PNG");
figure.save(targetDir + iter.key(), "PNG");
_initProgressDialog->appendText(tr("Saved image \"%1\" (%2/%3).").arg(targetDir + iter.key()).arg(++i).arg(_autoScreenCaptureCachedImages.size()));
_initProgressDialog->incrementStep();
_progressDialog->appendText(tr("Saved image \"%1\" (%2/%3).").arg(targetDir + iter.key()).arg(++i).arg(_autoScreenCaptureCachedImages.size()));
_progressDialog->incrementStep();
}
_autoScreenCaptureCachedImages.clear();
_initProgressDialog->setValue(_initProgressDialog->maximumSteps());
_progressDialog->setValue(_progressDialog->maximumSteps());
}
}
@@ -6563,9 +6594,9 @@ void MainWindow::exportImages()
tr("Data in the cache don't seem to have images (tested node %1). Calibration file will not be saved. Try refreshing the cache (with clouds).").arg(poses.rbegin()->first));
}
_initProgressDialog->resetProgress();
_initProgressDialog->show();
_initProgressDialog->setMaximumSteps(_cachedSignatures.size());
_progressDialog->resetProgress();
_progressDialog->show();
_progressDialog->setMaximumSteps(_cachedSignatures.size());
unsigned int saved = 0;
for(std::map<int, Transform>::iterator iter=poses.begin(); iter!=poses.end(); ++iter)
@@ -6602,22 +6633,22 @@ void MainWindow::exportImages()
warn = true;
}
saved += warn?0:1;
_initProgressDialog->appendText(info, !warn?Qt::black:Qt::darkYellow);
_initProgressDialog->incrementStep();
_progressDialog->appendText(info, !warn?Qt::black:Qt::darkYellow);
_progressDialog->incrementStep();
QApplication::processEvents();
}
if(saved!=poses.size())
{
_initProgressDialog->setAutoClose(false);
_initProgressDialog->appendText(tr("%1 images of %2 saved to \"%3\".").arg(saved).arg(poses.size()).arg(path));
_progressDialog->setAutoClose(false);
_progressDialog->appendText(tr("%1 images of %2 saved to \"%3\".").arg(saved).arg(poses.size()).arg(path));
}
else
{
_initProgressDialog->appendText(tr("%1 images saved to \"%2\".").arg(saved).arg(path));
_progressDialog->appendText(tr("%1 images saved to \"%2\".").arg(saved).arg(path));
}
_initProgressDialog->setValue(_initProgressDialog->maximumSteps());
_progressDialog->setValue(_progressDialog->maximumSteps());
}
}

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "MapVisibilityWidget.h"
#include "rtabmap/gui/MapVisibilityWidget.h"
#include <QCheckBox>
#include <QVBoxLayout>

View File

@@ -32,7 +32,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <rtabmap/core/Parameters.h>
#include <rtabmap/core/Optimizer.h>
#include "ParametersToolBox.h"
#include "rtabmap/gui/ParametersToolBox.h"
#include <QComboBox>
#include <QDoubleSpinBox>
#include <QLineEdit>

View File

@@ -25,7 +25,7 @@ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "PostProcessingDialog.h"
#include "rtabmap/gui/PostProcessingDialog.h"
#include "ui_postProcessingDialog.h"
#include <QPushButton>

View File

@@ -68,11 +68,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap/gui/CloudViewer.h"
#include "rtabmap/gui/ImageView.h"
#include "rtabmap/gui/GraphViewer.h"
#include "ExportCloudsDialog.h"
#include "ExportBundlerDialog.h"
#include "PostProcessingDialog.h"
#include "CreateSimpleCalibrationDialog.h"
#include "DepthCalibrationDialog.h"
#include "rtabmap/gui/ExportCloudsDialog.h"
#include "rtabmap/gui/ExportBundlerDialog.h"
#include "rtabmap/gui/PostProcessingDialog.h"
#include "rtabmap/gui/CreateSimpleCalibrationDialog.h"
#include "rtabmap/gui/DepthCalibrationDialog.h"
#include <rtabmap/utilite/ULogger.h>
#include <rtabmap/utilite/UConversion.h>

View File

@@ -21,16 +21,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -61,8 +52,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>388</width>
<height>242</height>
<width>438</width>
<height>202</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout" columnstretch="0,1">
@@ -253,8 +244,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>387</width>
<height>242</height>
<width>437</width>
<height>202</height>
</rect>
</property>
<layout class="QGridLayout" name="gridLayout_2" columnstretch="0,1">
@@ -434,16 +425,7 @@
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>12</number>
</property>
<property name="rightMargin">
<number>12</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>12</number>
</property>
<item>
@@ -499,16 +481,7 @@
</item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>12</number>
</property>
<property name="topMargin">
<number>12</number>
</property>
<property name="rightMargin">
<number>12</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>12</number>
</property>
<item>
@@ -579,7 +552,7 @@
<x>0</x>
<y>0</y>
<width>1547</width>
<height>25</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -1070,16 +1043,7 @@
</attribute>
<widget class="QWidget" name="dockWidgetContents_3">
<layout class="QVBoxLayout" name="verticalLayout_10">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -1133,8 +1097,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>340</width>
<height>186</height>
<width>274</width>
<height>192</height>
</rect>
</property>
<attribute name="label">
@@ -1269,8 +1233,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>282</width>
<height>626</height>
<width>206</width>
<height>520</height>
</rect>
</property>
<attribute name="label">
@@ -1632,8 +1596,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>205</width>
<height>117</height>
<width>152</width>
<height>96</height>
</rect>
</property>
<attribute name="label">
@@ -1732,8 +1696,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>185</width>
<height>487</height>
<width>138</width>
<height>381</height>
</rect>
</property>
<attribute name="label">
@@ -1835,16 +1799,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -1957,16 +1912,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -2097,16 +2043,7 @@
</attribute>
<widget class="QWidget" name="dockWidgetContents_7">
<layout class="QVBoxLayout" name="verticalLayout_13">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -2124,16 +2061,7 @@
</attribute>
<widget class="QWidget" name="dockWidgetContents_5">
<layout class="QVBoxLayout" name="verticalLayout_7">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -2178,16 +2106,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -2436,7 +2355,7 @@
<customwidget>
<class>rtabmap::ParametersToolBox</class>
<extends>QWidget</extends>
<header>ParametersToolBox.h</header>
<header>../include/rtabmap/gui/ParametersToolBox.h</header>
<container>1</container>
</customwidget>
</customwidgets>

View File

@@ -27,7 +27,7 @@
<x>0</x>
<y>0</y>
<width>1012</width>
<height>25</height>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuFile">
@@ -319,16 +319,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -366,16 +357,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -618,16 +600,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -648,16 +621,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -678,16 +642,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -708,16 +663,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
</layout>
@@ -735,16 +681,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
</layout>
@@ -765,16 +702,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -795,16 +723,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -828,16 +747,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -907,16 +817,7 @@
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<property name="margin">
<number>0</number>
</property>
<item>
@@ -1485,7 +1386,7 @@
<customwidget>
<class>rtabmap::MapVisibilityWidget</class>
<extends>QWidget</extends>
<header>MapVisibilityWidget.h</header>
<header>../include/rtabmap/gui/MapVisibilityWidget.h</header>
<container>1</container>
</customwidget>
<customwidget>