<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>CPlanarLaserScan.h Source File</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> > <b>C++ reference</b> </div> <div align="right"> <a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a> </div> <!-- Generated by Doxygen 1.7.5 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Search'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <div class="left"> <form id="FSearchBox" action="search.php" method="get"> <img id="MSearchSelect" src="search/mag.png" alt=""/> <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)"/> </form> </div><div class="right"></div> </div> </li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div class="header"> <div class="headertitle"> <div class="title">CPlanarLaserScan.h</div> </div> </div> <div class="contents"> <a href="_c_planar_laser_scan_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span> <a name="l00002"></a>00002 <span class="comment"> | The Mobile Robot Programming Toolkit (MRPT) C++ library |</span> <a name="l00003"></a>00003 <span class="comment"> | |</span> <a name="l00004"></a>00004 <span class="comment"> | http://www.mrpt.org/ |</span> <a name="l00005"></a>00005 <span class="comment"> | |</span> <a name="l00006"></a>00006 <span class="comment"> | Copyright (C) 2005-2011 University of Malaga |</span> <a name="l00007"></a>00007 <span class="comment"> | |</span> <a name="l00008"></a>00008 <span class="comment"> | This software was written by the Machine Perception and Intelligent |</span> <a name="l00009"></a>00009 <span class="comment"> | Robotics Lab, University of Malaga (Spain). |</span> <a name="l00010"></a>00010 <span class="comment"> | Contact: Jose-Luis Blanco <jlblanco@ctima.uma.es> |</span> <a name="l00011"></a>00011 <span class="comment"> | |</span> <a name="l00012"></a>00012 <span class="comment"> | This file is part of the MRPT project. |</span> <a name="l00013"></a>00013 <span class="comment"> | |</span> <a name="l00014"></a>00014 <span class="comment"> | MRPT is free software: you can redistribute it and/or modify |</span> <a name="l00015"></a>00015 <span class="comment"> | it under the terms of the GNU General Public License as published by |</span> <a name="l00016"></a>00016 <span class="comment"> | the Free Software Foundation, either version 3 of the License, or |</span> <a name="l00017"></a>00017 <span class="comment"> | (at your option) any later version. |</span> <a name="l00018"></a>00018 <span class="comment"> | |</span> <a name="l00019"></a>00019 <span class="comment"> | MRPT is distributed in the hope that it will be useful, |</span> <a name="l00020"></a>00020 <span class="comment"> | but WITHOUT ANY WARRANTY; without even the implied warranty of |</span> <a name="l00021"></a>00021 <span class="comment"> | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |</span> <a name="l00022"></a>00022 <span class="comment"> | GNU General Public License for more details. |</span> <a name="l00023"></a>00023 <span class="comment"> | |</span> <a name="l00024"></a>00024 <span class="comment"> | You should have received a copy of the GNU General Public License |</span> <a name="l00025"></a>00025 <span class="comment"> | along with MRPT. If not, see <http://www.gnu.org/licenses/>. |</span> <a name="l00026"></a>00026 <span class="comment"> | |</span> <a name="l00027"></a>00027 <span class="comment"> +---------------------------------------------------------------------------+ */</span> <a name="l00028"></a>00028 <a name="l00029"></a>00029 <span class="preprocessor">#ifndef opengl_CPlanarLaserScan_H</span> <a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define opengl_CPlanarLaserScan_H</span> <a name="l00031"></a>00031 <span class="preprocessor"></span> <a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="_c_renderizable_display_list_8h.html">mrpt/opengl/CRenderizableDisplayList.h</a>></span> <a name="l00033"></a>00033 <a name="l00034"></a>00034 <span class="preprocessor">#include <<a class="code" href="_c_metric_map_8h.html">mrpt/slam/CMetricMap.h</a>></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="_c_observation_8h.html">mrpt/slam/CObservation.h</a>></span> <a name="l00036"></a>00036 <span class="preprocessor">#include <<a class="code" href="_c_observation2_d_range_scan_8h.html">mrpt/slam/CObservation2DRangeScan.h</a>></span> <a name="l00037"></a>00037 <span class="preprocessor">#include <<a class="code" href="_c_simple_points_map_8h.html">mrpt/slam/CSimplePointsMap.h</a>></span> <a name="l00038"></a>00038 <a name="l00039"></a>00039 <a name="l00040"></a>00040 <span class="keyword">namespace </span>mrpt <a name="l00041"></a>00041 {<span class="comment"></span> <a name="l00042"></a>00042 <span class="comment"> /** \ingroup mrpt_maps_grp */</span> <a name="l00043"></a>00043 <span class="keyword">namespace </span>opengl <a name="l00044"></a>00044 { <a name="l00045"></a>00045 <span class="keyword">class </span>CPlanarLaserScan; <a name="l00046"></a>00046 <a name="l00047"></a>00047 <span class="comment">// This must be added to any CSerializable derived class:</span> <a name="l00048"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_planar_laser_scan_ptr.html#a03223b1b862584e0952784c8246b3553">00048</a> <a class="code" href="_c_serializable_8h.html#a9ef523d787f6cb837a0585b790882588" title="This declaration must be inserted in all CSerializable classes definition, before the class declarati...">DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE</a>( <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html" title="This object renders a 2D laser scan by means of three elements: the points, the line along end-points...">CPlanarLaserScan</a>, <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html" title="A renderizable object suitable for rendering with OpenGL's display lists.">CRenderizableDisplayList</a>, <a class="code" href="maps_2include_2mrpt_2maps_2link__pragmas_8h.html#ad401479c152d92658375c646837e33ed">MAPS_IMPEXP</a> ) <a name="l00049"></a>00049 <a name="l00050"></a>00050 <span class="comment">/** This object renders a 2D laser scan by means of three elements: the points, the line along end-points and the 2D scanned surface.</span> <a name="l00051"></a>00051 <span class="comment"> *</span> <a name="l00052"></a>00052 <span class="comment"> * By default, all those three elements are drawn, but you can individually switch them on/off with:</span> <a name="l00053"></a>00053 <span class="comment"> * - CPlanarLaserScan::enablePoints()</span> <a name="l00054"></a>00054 <span class="comment"> * - CPlanarLaserScan::enableLine()</span> <a name="l00055"></a>00055 <span class="comment"> * - CPlanarLaserScan::enableSurface()</span> <a name="l00056"></a>00056 <span class="comment"> *</span> <a name="l00057"></a>00057 <span class="comment"> * To change the final result, more methods allow further customization of the 3D object (color of each element, etc.).</span> <a name="l00058"></a>00058 <span class="comment"> *</span> <a name="l00059"></a>00059 <span class="comment"> * The scan is passed or updated through CPlanarLaserScan::setScan()</span> <a name="l00060"></a>00060 <span class="comment"> *</span> <a name="l00061"></a>00061 <span class="comment"> * \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.</span> <a name="l00062"></a>00062 <span class="comment"> *</span> <a name="l00063"></a>00063 <span class="comment"> * \sa mrpt::opengl::CPointCloud, opengl::COpenGLScene</span> <a name="l00064"></a>00064 <span class="comment"> * \ingroup mrpt_maps_grp</span> <a name="l00065"></a>00065 <span class="comment"> */</span> <a name="l00066"></a>00066 class <a class="code" href="maps_2include_2mrpt_2maps_2link__pragmas_8h.html#ad401479c152d92658375c646837e33ed">MAPS_IMPEXP</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html" title="This object renders a 2D laser scan by means of three elements: the points, the line along end-points...">CPlanarLaserScan</a> : public <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html" title="A renderizable object suitable for rendering with OpenGL's display lists.">CRenderizableDisplayList</a> <a name="l00067"></a>00067 { <a name="l00068"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a5310ea6cfe6c7fc063bc2a09415b5a96">00068</a> <a class="code" href="_c_serializable_8h.html#a72ab55bf7ae009c89b75715cfa21e84d" title="This declaration must be inserted in all CSerializable classes definition, within the class declarati...">DEFINE_SERIALIZABLE</a>( <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html" title="This object renders a 2D laser scan by means of three elements: the points, the line along end-points...">CPlanarLaserScan</a> ) <a name="l00069"></a>00069 protected: <a name="l00070"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a7908fbc6f58cb55262b4fb00a6dc8ae3">00070</a> mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_observation2_d_range_scan.html" title="A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...">CObservation2DRangeScan</a> m_scan; <a name="l00071"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#aa7051021a51ee06dfead4bb2216f1f93">00071</a> mutable mrpt::slam::<a class="code" href="classmrpt_1_1slam_1_1_c_simple_points_map.html" title="A cloud of points in 2D or 3D, which can be built from a sequence of laser scans.">CSimplePointsMap</a> m_cache_points; <a name="l00072"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a8677f4d6a444d8d0e57d0b7338b5d0f6">00072</a> mutable <span class="keywordtype">bool</span> m_cache_valid; <a name="l00073"></a>00073 <a name="l00074"></a>00074 <a name="l00075"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#abfe81fcec9bf3f04e868dcdb1ad91d2c">00075</a> <span class="keywordtype">float</span> m_line_width; <a name="l00076"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a9b03ae860fb494a2d9e7b70f7a7750b4">00076</a> <span class="keywordtype">float</span> m_line_R,m_line_G,m_line_B,m_line_A; <a name="l00077"></a>00077 <a name="l00078"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#ae0dd428d05ce219aa41c661c5d124b35">00078</a> <span class="keywordtype">float</span> m_points_width; <a name="l00079"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#ad7b1ad80c4450f21d4ddbb34b0d5afd8">00079</a> <span class="keywordtype">float</span> m_points_R,m_points_G,m_points_B,m_points_A; <a name="l00080"></a>00080 <a name="l00081"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a69828cf5a70f3c106da00099189cb298">00081</a> <span class="keywordtype">float</span> m_plane_R,m_plane_G,m_plane_B,m_plane_A; <a name="l00082"></a>00082 <a name="l00083"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#ab727a5b75d0a1318faf4ea6daa5ee7f5">00083</a> <span class="keywordtype">bool</span> m_enable_points; <a name="l00084"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#aafef53c51c218b318027e1ca44dec2ea">00084</a> <span class="keywordtype">bool</span> m_enable_line; <a name="l00085"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a7745385ecdae95372fa63bc6ca8daeec">00085</a> <span class="keywordtype">bool</span> m_enable_surface; <a name="l00086"></a>00086 <a name="l00087"></a>00087 public: <a name="l00088"></a>00088 <span class="keywordtype">void</span> clear(); <span class="comment">//!<< Clear the scan</span> <a name="l00089"></a>00089 <span class="comment"></span><span class="comment"></span> <a name="l00090"></a>00090 <span class="comment"> /** Show or hides the scanned points \sa sePointsWidth, setPointsColor*/</span> <a name="l00091"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a37ee60590621f4c679820d6f4b99f27f">00091</a> inline <span class="keywordtype">void</span> enablePoints(<span class="keywordtype">bool</span> enable=true) { m_enable_points=enable; <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html#a77f8b97d7f4937b3f0777b76bc0ddf7a" title="Must be called to notify that the object has changed (so, the display list must be updated)...">CRenderizableDisplayList::notifyChange</a>(); } <a name="l00092"></a>00092 <span class="comment"></span> <a name="l00093"></a>00093 <span class="comment"> /** Show or hides lines along all scanned points \sa setLineWidth, setLineColor*/</span> <a name="l00094"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a286a63b687daeb37caacf9257cbd9e03">00094</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a286a63b687daeb37caacf9257cbd9e03" title="Show or hides lines along all scanned points.">enableLine</a>(<span class="keywordtype">bool</span> enable=<span class="keyword">true</span>) { m_enable_line=enable; <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html#a77f8b97d7f4937b3f0777b76bc0ddf7a" title="Must be called to notify that the object has changed (so, the display list must be updated)...">CRenderizableDisplayList::notifyChange</a>(); } <a name="l00095"></a>00095 <span class="comment"></span> <a name="l00096"></a>00096 <span class="comment"> /** Show or hides the scanned area as a 2D surface \sa setSurfaceColor */</span> <a name="l00097"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#ada770120cd56e2392b351ea9866e43bf">00097</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#ada770120cd56e2392b351ea9866e43bf" title="Show or hides the scanned area as a 2D surface.">enableSurface</a>(<span class="keywordtype">bool</span> enable=<span class="keyword">true</span>) { m_enable_surface=enable; <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html#a77f8b97d7f4937b3f0777b76bc0ddf7a" title="Must be called to notify that the object has changed (so, the display list must be updated)...">CRenderizableDisplayList::notifyChange</a>(); } <a name="l00098"></a>00098 <a name="l00099"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#aea0ca385a4a6ae2bf000ec8528e3e7d2">00099</a> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#aea0ca385a4a6ae2bf000ec8528e3e7d2">setLineWidth</a>(<span class="keywordtype">float</span> w) { m_line_width=w; } <a name="l00100"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a20c74451b596f9dac5ad629f084e2ba7">00100</a> <span class="keywordtype">float</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a20c74451b596f9dac5ad629f084e2ba7">getLineWidth</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_line_width;} <a name="l00101"></a>00101 <a name="l00102"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#afa7938aaca3101004847cf0eb65a28ea">00102</a> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#afa7938aaca3101004847cf0eb65a28ea">sePointsWidth</a>(<span class="keywordtype">float</span> w) { m_points_width=w; } <a name="l00103"></a>00103 <a name="l00104"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a706c8a03daf00df8e9bffc4c31909285">00104</a> <span class="keywordtype">void</span> setLineColor(<span class="keywordtype">float</span> R,<span class="keywordtype">float</span> G, <span class="keywordtype">float</span> B, <span class="keywordtype">float</span> A=1.0f) <a name="l00105"></a>00105 { <a name="l00106"></a>00106 m_line_R=R; <a name="l00107"></a>00107 m_line_G=G; <a name="l00108"></a>00108 m_line_B=B; <a name="l00109"></a>00109 m_line_A=A; <a name="l00110"></a>00110 } <a name="l00111"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a4c56ea06ed5f824b11802ae3c8d8a7fd">00111</a> <span class="keywordtype">void</span> setPointsColor(<span class="keywordtype">float</span> R,<span class="keywordtype">float</span> G, <span class="keywordtype">float</span> B, <span class="keywordtype">float</span> A=1.0f) <a name="l00112"></a>00112 { <a name="l00113"></a>00113 m_points_R=R; <a name="l00114"></a>00114 m_points_G=G; <a name="l00115"></a>00115 m_points_B=B; <a name="l00116"></a>00116 m_points_A=A; <a name="l00117"></a>00117 } <a name="l00118"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#ac4906d1808405b8abeeca46212a1b5e6">00118</a> <span class="keywordtype">void</span> setSurfaceColor(<span class="keywordtype">float</span> R,<span class="keywordtype">float</span> G, <span class="keywordtype">float</span> B, <span class="keywordtype">float</span> A=1.0f) <a name="l00119"></a>00119 { <a name="l00120"></a>00120 m_plane_R=R; <a name="l00121"></a>00121 m_plane_G=G; <a name="l00122"></a>00122 m_plane_B=B; <a name="l00123"></a>00123 m_plane_A=A; <a name="l00124"></a>00124 } <a name="l00125"></a>00125 <a name="l00126"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a696e923c7c17c167bab5363e05d743c6">00126</a> <span class="keywordtype">void</span> setScan( <span class="keyword">const</span> <a class="code" href="classmrpt_1_1slam_1_1_c_observation2_d_range_scan.html" title="A "CObservation"-derived class that represents a 2D range scan measurement (typically from a laser sc...">mrpt::slam::CObservation2DRangeScan</a> &scan) <a name="l00127"></a>00127 { <a name="l00128"></a>00128 <a class="code" href="classmrpt_1_1opengl_1_1_c_renderizable_display_list.html#a77f8b97d7f4937b3f0777b76bc0ddf7a" title="Must be called to notify that the object has changed (so, the display list must be updated)...">CRenderizableDisplayList::notifyChange</a>(); <a name="l00129"></a>00129 m_cache_valid = <span class="keyword">false</span>; <a name="l00130"></a>00130 m_scan = scan; <a name="l00131"></a>00131 } <a name="l00132"></a>00132 <span class="comment"></span> <a name="l00133"></a>00133 <span class="comment"> /** Render</span> <a name="l00134"></a>00134 <span class="comment"> */</span> <a name="l00135"></a>00135 <span class="keywordtype">void</span> render_dl() <span class="keyword">const</span>; <a name="l00136"></a>00136 <a name="l00137"></a>00137 <span class="keyword">private</span>:<span class="comment"></span> <a name="l00138"></a>00138 <span class="comment"> /** Constructor</span> <a name="l00139"></a>00139 <span class="comment"> */</span> <a name="l00140"></a>00140 <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html" title="This object renders a 2D laser scan by means of three elements: the points, the line along end-points...">CPlanarLaserScan</a>( ); <a name="l00141"></a>00141 <span class="comment"></span> <a name="l00142"></a>00142 <span class="comment"> /** Private, virtual destructor: only can be deleted from smart pointers */</span> <a name="l00143"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a017532252ac0abc2c83181a092e26be5">00143</a> <span class="keyword">virtual</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_planar_laser_scan.html#a017532252ac0abc2c83181a092e26be5" title="Private, virtual destructor: only can be deleted from smart pointers.">~CPlanarLaserScan</a>() { } <a name="l00144"></a>00144 }; <a name="l00145"></a>00145 <a name="l00146"></a>00146 } <span class="comment">// end namespace</span> <a name="l00147"></a>00147 <a name="l00148"></a>00148 } <span class="comment">// End of namespace</span> <a name="l00149"></a>00149 <a name="l00150"></a>00150 <a name="l00151"></a>00151 <span class="preprocessor">#endif</span> </pre></div></div> </div> <br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150"> </td></tr> </table> </body></html>