/* * CloudViewer.h * * Created on: 2013-10-13 * Author: Mathieu */ #ifndef CLOUDVIEWER_H_ #define CLOUDVIEWER_H_ #include "rtabmap/gui/RtabmapGuiExp.h" // DLL export/import defines #include #include #include #include #include #include "rtabmap/core/Transform.h" #include #include #include #include #include namespace pcl { namespace visualization { class PCLVisualizer; } } class QMenu; namespace rtabmap { class RTABMAPGUI_EXP CloudViewer : public QVTKWidget { Q_OBJECT public: CloudViewer(QWidget * parent = 0); virtual ~CloudViewer(); bool updateCloudPose( const std::string & id, const Transform & pose); //including mesh bool updateCloud( const std::string & id, const pcl::PointCloud::Ptr & cloud, const Transform & pose = Transform::getIdentity()); bool updateCloud( const std::string & id, const pcl::PointCloud::Ptr & cloud, const Transform & pose = Transform::getIdentity()); bool addOrUpdateCloud( const std::string & id, const pcl::PointCloud::Ptr & cloud, const Transform & pose = Transform::getIdentity()); bool addOrUpdateCloud( const std::string & id, const pcl::PointCloud::Ptr & cloud, const Transform & pose = Transform::getIdentity()); bool addCloud( const std::string & id, const pcl::PCLPointCloud2Ptr & binaryCloud, const Transform & pose, bool rgb); bool addCloud( const std::string & id, const pcl::PointCloud::Ptr & cloud, const Transform & pose = Transform::getIdentity()); bool addCloud( const std::string & id, const pcl::PointCloud::Ptr & cloud, const Transform & pose = Transform::getIdentity()); bool addCloudMesh( const std::string & id, const pcl::PointCloud::Ptr & cloud, const std::vector & polygons, const Transform & pose = Transform::getIdentity()); bool addCloudMesh( const std::string & id, const pcl::PolygonMesh::Ptr & mesh, const Transform & pose = Transform::getIdentity()); void updateCameraPosition( const Transform & pose); void setTrajectoryShown(bool shown); void setTrajectorySize(int value); void removeAllClouds(); //including meshes bool removeCloud(const std::string & id); //including mesh bool getPose(const std::string & id, Transform & pose); //including meshes bool getCloudVisibility(const std::string & id); const QMap & getAddedClouds() {return _addedClouds;} //including meshes void setCameraTargetLocked(); void setCameraTargetFollow(); public slots: void render(); void setBackgroundColor(const QColor & color); void setCloudVisibility(const std::string & id, bool isVisible); void setCloudOpacity(const std::string & id, double opacity = 1.0); void setCloudPointSize(const std::string & id, int size); protected: virtual void keyReleaseEvent(QKeyEvent * event); virtual void keyPressEvent(QKeyEvent * event); virtual void contextMenuEvent(QContextMenuEvent * event); virtual void handleAction(QAction * event); QMenu * menu() {return _menu;} private: void createMenu(); void mouseEventOccurred (const pcl::visualization::MouseEvent &event, void* viewer_void); private: pcl::visualization::PCLVisualizer * _visualizer; QAction * _aLockCamera; QAction * _aFollowCamera; QAction * _aResetCamera; QAction * _aLockViewZ; QAction * _aShowTrajectory; QAction * _aSetTrajectorySize; QAction * _aClearTrajectory; QAction * _aShowGrid; QAction * _aSetBackgroundColor; QMenu * _menu; pcl::PointCloud::Ptr _trajectory; unsigned int _maxTrajectorySize; QMap _addedClouds; // include cloud, scan, meshes Transform _lastPose; std::list _gridLines; QSet _keysPressed; }; } /* namespace rtabmap */ #endif /* CLOUDVIEWER_H_ */