Main MRPT website > C++ reference
MRPT logo

CPlanarLaserScan.h

Go to the documentation of this file.
00001 /* +---------------------------------------------------------------------------+
00002    |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |
00003    |                                                                           |
00004    |                   http://mrpt.sourceforge.net/                            |
00005    |                                                                           |
00006    |   Copyright (C) 2005-2011  University of Malaga                           |
00007    |                                                                           |
00008    |    This software was written by the Machine Perception and Intelligent    |
00009    |      Robotics Lab, University of Malaga (Spain).                          |
00010    |    Contact: Jose-Luis Blanco  <jlblanco@ctima.uma.es>                     |
00011    |                                                                           |
00012    |  This file is part of the MRPT project.                                   |
00013    |                                                                           |
00014    |     MRPT is free software: you can redistribute it and/or modify          |
00015    |     it under the terms of the GNU General Public License as published by  |
00016    |     the Free Software Foundation, either version 3 of the License, or     |
00017    |     (at your option) any later version.                                   |
00018    |                                                                           |
00019    |   MRPT is distributed in the hope that it will be useful,                 |
00020    |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |
00021    |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
00022    |     GNU General Public License for more details.                          |
00023    |                                                                           |
00024    |     You should have received a copy of the GNU General Public License     |
00025    |     along with MRPT.  If not, see <http://www.gnu.org/licenses/>.         |
00026    |                                                                           |
00027    +---------------------------------------------------------------------------+ */
00028 
00029 #ifndef opengl_CPlanarLaserScan_H
00030 #define opengl_CPlanarLaserScan_H
00031 
00032 #include <mrpt/opengl/CRenderizableDisplayList.h>
00033 
00034 #include <mrpt/slam/CMetricMap.h>
00035 #include <mrpt/slam/CObservation.h>
00036 #include <mrpt/slam/CObservation2DRangeScan.h>
00037 #include <mrpt/slam/CSimplePointsMap.h>
00038 
00039 
00040 namespace mrpt
00041 {
00042         namespace opengl
00043         {
00044                 class CPlanarLaserScan;
00045 
00046                 // This must be added to any CSerializable derived class:
00047                 DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE( CPlanarLaserScan, CRenderizableDisplayList, MAPS_IMPEXP )
00048 
00049                 /** This object renders a 2D laser scan by means of three elements: the points, the line along end-points and the 2D scanned surface.
00050                   *  You can change the public members :
00051                   *    - CPlanarLaserScan::m_enable_points
00052                   *    - CPlanarLaserScan::m_enable_line
00053                   *    - CPlanarLaserScan::m_enable_surface
00054                   *  To change the final result. More methods allow further customization of the 3D object.
00055                   *  The scan is passed to "CPlanarLaserScan::setScan"
00056                   *
00057                   *  \note The laser points are projected at the sensor pose as given in the "scan" object, so this CPlanarLaserScan object should be placed at the exact pose of the robot coordinates origin.
00058                   *
00059                   *  \sa mrpt::opengl::CPointCloud, opengl::COpenGLScene
00060                   */
00061                 class MAPS_IMPEXP CPlanarLaserScan : public CRenderizableDisplayList
00062                 {
00063                         DEFINE_SERIALIZABLE( CPlanarLaserScan )
00064                 protected:
00065                         mrpt::slam::CObservation2DRangeScan     m_scan;
00066                         mutable mrpt::slam::CSimplePointsMap            m_cache_points;
00067                         mutable bool    m_cache_valid;
00068 
00069 
00070             float       m_line_width;
00071             float       m_line_R,m_line_G,m_line_B,m_line_A;
00072 
00073             float       m_points_width;
00074             float       m_points_R,m_points_G,m_points_B,m_points_A;
00075 
00076             float       m_plane_R,m_plane_G,m_plane_B,m_plane_A;
00077 
00078                 public:
00079                         void clear();   //!<< Clear the scan
00080 
00081                         bool    m_enable_points;
00082                         bool    m_enable_line;
00083                         bool    m_enable_surface;
00084 
00085                         void setLineWidth(float w) { m_line_width=w; }
00086                         float getLineWidth() const { return  m_line_width;}
00087 
00088                         void sePointsWidth(float w) { m_points_width=w; }
00089 
00090                         void setLineColor(float R,float G, float B, float A=1.0f)
00091                         {
00092                                 m_line_R=R;
00093                                 m_line_G=G;
00094                                 m_line_B=B;
00095                                 m_line_A=A;
00096                         }
00097                         void setPointsColor(float R,float G, float B, float A=1.0f)
00098                         {
00099                                 m_points_R=R;
00100                                 m_points_G=G;
00101                                 m_points_B=B;
00102                                 m_points_A=A;
00103                         }
00104                         void setSurfaceColor(float R,float G, float B, float A=1.0f)
00105                         {
00106                                 m_plane_R=R;
00107                                 m_plane_G=G;
00108                                 m_plane_B=B;
00109                                 m_plane_A=A;
00110                         }
00111 
00112                         void setScan( const mrpt::slam::CObservation2DRangeScan &scan)
00113                         {
00114                                 CRenderizableDisplayList::notifyChange();
00115                                 m_cache_valid = false;
00116                                 m_scan = scan;
00117                         }
00118 
00119                         /** Render
00120                           */
00121                         void  render_dl() const;
00122 
00123                 private:
00124                         /** Constructor
00125                           */
00126                         CPlanarLaserScan( );
00127 
00128                         /** Private, virtual destructor: only can be deleted from smart pointers */
00129                         virtual ~CPlanarLaserScan() { }
00130                 };
00131 
00132         } // end namespace
00133 
00134 } // End of namespace
00135 
00136 
00137 #endif



Page generated by Doxygen 1.7.3 for MRPT 0.9.4 SVN: at Sat Mar 26 06:40:17 UTC 2011