<!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>COpenGLViewport.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">COpenGLViewport.h</div> </div> </div> <div class="contents"> <a href="_c_open_g_l_viewport_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 <span class="preprocessor">#ifndef opengl_COpenGLViewport_H</span> <a name="l00029"></a>00029 <span class="preprocessor"></span><span class="preprocessor">#define opengl_COpenGLViewport_H</span> <a name="l00030"></a>00030 <span class="preprocessor"></span> <a name="l00031"></a>00031 <span class="preprocessor">#include <<a class="code" href="_c_serializable_8h.html">mrpt/utils/CSerializable.h</a>></span> <a name="l00032"></a>00032 <span class="preprocessor">#include <<a class="code" href="safe__pointers_8h.html">mrpt/utils/safe_pointers.h</a>></span> <a name="l00033"></a>00033 <span class="preprocessor">#include <<a class="code" href="_c_image_8h.html">mrpt/utils/CImage.h</a>></span> <a name="l00034"></a>00034 <span class="preprocessor">#include <<a class="code" href="_c_camera_8h.html">mrpt/opengl/CCamera.h</a>></span> <a name="l00035"></a>00035 <span class="preprocessor">#include <<a class="code" href="_c_set_of_objects_8h.html">mrpt/opengl/CSetOfObjects.h</a>></span> <a name="l00036"></a>00036 <span class="preprocessor">#include <<a class="code" href="lightweight__geom__data_8h.html">mrpt/math/lightweight_geom_data.h</a>></span> <a name="l00037"></a>00037 <span class="preprocessor">#include <<a class="code" href="_c_observable_8h.html">mrpt/utils/CObservable.h</a>></span> <a name="l00038"></a>00038 <a name="l00039"></a>00039 <span class="keyword">namespace </span>mrpt <a name="l00040"></a>00040 { <a name="l00041"></a>00041 <span class="keyword">namespace </span>utils { <span class="keyword">class </span>CStringList; <span class="keyword">class </span>CImage; } <a name="l00042"></a>00042 <a name="l00043"></a>00043 <span class="keyword">namespace </span>opengl <a name="l00044"></a>00044 { <a name="l00045"></a>00045 <span class="keyword">using namespace </span>mrpt::math; <a name="l00046"></a>00046 <a name="l00047"></a>00047 <span class="keyword">class </span>COpenGLScene; <a name="l00048"></a>00048 <span class="keyword">class </span>CRenderizable; <a name="l00049"></a>00049 <a name="l00050"></a>00050 <span class="comment">// This must be added to any CSerializable derived class:</span> <a name="l00051"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_ptr.html#acfe955e4a07c847bd4aae3caead759e0">00051</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_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a>, <a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">mrpt::utils::CSerializable</a>, <a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> ) <a name="l00052"></a>00052 <a name="l00053"></a>00053 <span class="comment">/** A viewport within a COpenGLScene, containing a set of OpenGL objects to render.</span> <a name="l00054"></a>00054 <span class="comment"> * This class has protected constuctor, thus it cannot be created by users. Use COpenGLScene::createViewport instead.</span> <a name="l00055"></a>00055 <span class="comment"> * A viewport has these "operation modes":</span> <a name="l00056"></a>00056 <span class="comment"> * - Normal (default): It renders the contained objects.</span> <a name="l00057"></a>00057 <span class="comment"> * - Cloned: It clones the objects from another viewport. See \a setCloneView()</span> <a name="l00058"></a>00058 <span class="comment"> * - Image mode: It renders an image (e.g. from a video stream) efficiently using a textued quad. See \a setImageView().</span> <a name="l00059"></a>00059 <span class="comment"> *</span> <a name="l00060"></a>00060 <span class="comment"> * In any case, the viewport can be resized to only fit a part of the entire parent viewport.</span> <a name="l00061"></a>00061 <span class="comment"> * There will be always at least one viewport in a COpenGLScene named "main".</span> <a name="l00062"></a>00062 <span class="comment"> *</span> <a name="l00063"></a>00063 <span class="comment"> * This class can be observed (see mrpt::utils::CObserver) for the following events (see mrpt::utils::mrptEvent):</span> <a name="l00064"></a>00064 <span class="comment"> * - mrpt::opengl::mrptEventGLPreRender</span> <a name="l00065"></a>00065 <span class="comment"> * - mrpt::opengl::mrptEventGLPostRender</span> <a name="l00066"></a>00066 <span class="comment"> *</span> <a name="l00067"></a>00067 <span class="comment"> * Refer to mrpt::opengl::COpenGLScene for further details.</span> <a name="l00068"></a>00068 <span class="comment"> * \ingroup mrpt_opengl_grp</span> <a name="l00069"></a>00069 <span class="comment"> */</span> <a name="l00070"></a>00070 class <a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a> : <a name="l00071"></a>00071 public mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_serializable.html" title="The virtual base class which provides a unified interface for all persistent objects in MRPT...">CSerializable</a>, <a name="l00072"></a>00072 public mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_observable.html" title="Inherit from this class for those objects capable of being observed by a CObserver class...">CObservable</a> <a name="l00073"></a>00073 { <a name="l00074"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a9f0838ce9ac6d98c1cd12e8f0bdadc64">00074</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_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a> ) <a name="l00075"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a40f91403e749cdbaee589054869c67a1">00075</a> friend class <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_scene.html" title="This class allows the user to create, load, save, and render 3D scenes using OpenGL primitives...">COpenGLScene</a>; <a name="l00076"></a>00076 public: <a name="l00077"></a>00077 <span class="comment">// -------------------------------------------------------------------</span><span class="comment"></span> <a name="l00078"></a>00078 <span class="comment"> /** @name Set the viewport "modes"</span> <a name="l00079"></a>00079 <span class="comment"> @{ */</span> <a name="l00080"></a>00080 <span class="comment"></span> <a name="l00081"></a>00081 <span class="comment"> /** Set this viewport as a clone of some other viewport, given its name - as a side effect, current list of internal OpenGL objects is cleared.</span> <a name="l00082"></a>00082 <span class="comment"> * By default, only the objects are cloned, not the camera. See</span> <a name="l00083"></a>00083 <span class="comment"> * \sa resetCloneView</span> <a name="l00084"></a>00084 <span class="comment"> */</span> <a name="l00085"></a>00085 <span class="keywordtype">void</span> setCloneView( const std::<span class="keywordtype">string</span> &clonedViewport ); <a name="l00086"></a>00086 <span class="comment"></span> <a name="l00087"></a>00087 <span class="comment"> /** Set this viewport into "image view"-mode, where an image is efficiently drawn (fitting the viewport area) using an OpenGL textured quad.</span> <a name="l00088"></a>00088 <span class="comment"> * Call this method with the new image to update the displayed image (but recall to first lock the parent openglscene's critical section, then do the update, then release the lock, and then issue a window repaint).</span> <a name="l00089"></a>00089 <span class="comment"> * Internally, the texture is drawn using a mrpt::opengl::CTexturedPlane</span> <a name="l00090"></a>00090 <span class="comment"> * The viewport can be reverted to behave like a normal viewport by calling setNormalMode()</span> <a name="l00091"></a>00091 <span class="comment"> * \sa setImageView_fast</span> <a name="l00092"></a>00092 <span class="comment"> */</span> <a name="l00093"></a>00093 <span class="keywordtype">void</span> setImageView(const mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &img); <a name="l00094"></a>00094 <span class="comment"></span> <a name="l00095"></a>00095 <span class="comment"> /** Just like \a setImageView but moves the internal image memory instead of making a copy, so it's faster but empties the input image.</span> <a name="l00096"></a>00096 <span class="comment"> * \sa setImageView</span> <a name="l00097"></a>00097 <span class="comment"> */</span> <a name="l00098"></a>00098 <span class="keywordtype">void</span> setImageView_fast(mrpt::utils::<a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">CImage</a> &img); <a name="l00099"></a>00099 <span class="comment"></span> <a name="l00100"></a>00100 <span class="comment"> /** Reset the viewport to normal mode: rendering its own objects.</span> <a name="l00101"></a>00101 <span class="comment"> * \sa setCloneView, setNormalMode</span> <a name="l00102"></a>00102 <span class="comment"> */</span> <a name="l00103"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a2021b321ae6952bfcd56f47ddd238ad5">00103</a> inline <span class="keywordtype">void</span> resetCloneView() { setNormalMode(); } <a name="l00104"></a>00104 <span class="comment"></span> <a name="l00105"></a>00105 <span class="comment"> /** If set to true, and setCloneView() has been called, this viewport will be rendered using the camera of the cloned viewport.</span> <a name="l00106"></a>00106 <span class="comment"> */</span> <a name="l00107"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#acecb6dbb82e7ed3da38188693b8f9c84">00107</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#acecb6dbb82e7ed3da38188693b8f9c84" title="If set to true, and setCloneView() has been called, this viewport will be rendered using the camera o...">setCloneCamera</a>(<span class="keywordtype">bool</span> enable) { m_isClonedCamera = enable; } <a name="l00108"></a>00108 <span class="comment"></span> <a name="l00109"></a>00109 <span class="comment"> /** Resets the viewport to a normal 3D viewport \sa setCloneView, setImageView */</span> <a name="l00110"></a>00110 <span class="keywordtype">void</span> setNormalMode(); <a name="l00111"></a>00111 <span class="comment"></span> <a name="l00112"></a>00112 <span class="comment"> /** @} */</span> <span class="comment">// end of Set the "viewport mode"</span> <a name="l00113"></a>00113 <span class="comment">// ------------------------------------------------------</span> <a name="l00114"></a>00114 <a name="l00115"></a>00115 <a name="l00116"></a>00116 <span class="comment">// -------------------------------------------------------------------</span><span class="comment"></span> <a name="l00117"></a>00117 <span class="comment"> /** @name Change or read viewport properties (except "viewport modes")</span> <a name="l00118"></a>00118 <span class="comment"> @{ */</span> <a name="l00119"></a>00119 <span class="comment"></span> <a name="l00120"></a>00120 <span class="comment"> /** Returns the name of the viewport */</span> <a name="l00121"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a220cf0c281ce13a6a8fb4069aeb5b876">00121</a> <span class="keyword">inline</span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a220cf0c281ce13a6a8fb4069aeb5b876" title="Returns the name of the viewport.">getName</a>() { <span class="keywordflow">return</span> m_name; } <a name="l00122"></a>00122 <span class="comment"></span> <a name="l00123"></a>00123 <span class="comment"> /** Change the viewport position and dimension on the rendering window.</span> <a name="l00124"></a>00124 <span class="comment"> * X & Y coordinates here can have two interpretations:</span> <a name="l00125"></a>00125 <span class="comment"> * - If in the range [0,1], they are factors with respect to the actual window sizes (i.e. width=1 means the entire width of the rendering window).</span> <a name="l00126"></a>00126 <span class="comment"> * - If >1, they are interpreted as pixels.</span> <a name="l00127"></a>00127 <span class="comment"> *</span> <a name="l00128"></a>00128 <span class="comment"> * width & height can be interpreted as:</span> <a name="l00129"></a>00129 <span class="comment"> * - If >1, they are the size of the viewport in that dimension, in pixels.</span> <a name="l00130"></a>00130 <span class="comment"> * - If in [0,1], they are the size of the viewport in that dimension, in a factor of the width/height.</span> <a name="l00131"></a>00131 <span class="comment"> * - If in [-1,0[, the size is computed such as the right/top border ends up in the given coordinate, interpreted as a factor (e.g. -1: up to the end of the viewport, -0.5: up to the middle of it).</span> <a name="l00132"></a>00132 <span class="comment"> * - If <-1 the size is computed such as the right/top border ends up in the given absolute coordinate (e.g. -200: up to the row/column 200px).</span> <a name="l00133"></a>00133 <span class="comment"> *</span> <a name="l00134"></a>00134 <span class="comment"> * \note (x,y) specify the lower left corner of the viewport rectangle.</span> <a name="l00135"></a>00135 <span class="comment"> * \sa getViewportPosition</span> <a name="l00136"></a>00136 <span class="comment"> */</span> <a name="l00137"></a>00137 <span class="keywordtype">void</span> setViewportPosition( <a name="l00138"></a>00138 <span class="keyword">const</span> <span class="keywordtype">double</span> x, <a name="l00139"></a>00139 <span class="keyword">const</span> <span class="keywordtype">double</span> <a class="code" href="namespace_eigen_1_1internal.html#a3d7a581aeb951248dc6fe114e9e05f07">y</a>, <a name="l00140"></a>00140 <span class="keyword">const</span> <span class="keywordtype">double</span> width, <a name="l00141"></a>00141 <span class="keyword">const</span> <span class="keywordtype">double</span> height ); <a name="l00142"></a>00142 <span class="comment"></span> <a name="l00143"></a>00143 <span class="comment"> /** Get the current viewport position and dimension on the rendering window.</span> <a name="l00144"></a>00144 <span class="comment"> * X & Y coordinates here can have two interpretations:</span> <a name="l00145"></a>00145 <span class="comment"> * - If in the range [0,1], they are factors with respect to the actual window sizes (i.e. width=1 means the entire width of the rendering window).</span> <a name="l00146"></a>00146 <span class="comment"> * - If >1, they are interpreted as pixels.</span> <a name="l00147"></a>00147 <span class="comment"> * \note (x,y) specify the lower left corner of the viewport rectangle.</span> <a name="l00148"></a>00148 <span class="comment"> * \sa setViewportPosition</span> <a name="l00149"></a>00149 <span class="comment"> */</span> <a name="l00150"></a>00150 <span class="keywordtype">void</span> getViewportPosition( <a name="l00151"></a>00151 <span class="keywordtype">double</span> &x, <a name="l00152"></a>00152 <span class="keywordtype">double</span> &<a class="code" href="namespace_eigen_1_1internal.html#a3d7a581aeb951248dc6fe114e9e05f07">y</a>, <a name="l00153"></a>00153 <span class="keywordtype">double</span> &width, <a name="l00154"></a>00154 <span class="keywordtype">double</span> &height ); <a name="l00155"></a>00155 <span class="comment"></span> <a name="l00156"></a>00156 <span class="comment"> /** Set the min/max clip depth distances of the rendering frustum (default: 0.1 - 10000)</span> <a name="l00157"></a>00157 <span class="comment"> * \sa getViewportClipDistances</span> <a name="l00158"></a>00158 <span class="comment"> */</span> <a name="l00159"></a>00159 <span class="keywordtype">void</span> setViewportClipDistances(<span class="keyword">const</span> <span class="keywordtype">double</span> clip_min, <span class="keyword">const</span> <span class="keywordtype">double</span> clip_max); <a name="l00160"></a>00160 <span class="comment"></span> <a name="l00161"></a>00161 <span class="comment"> /** Get the current min/max clip depth distances of the rendering frustum (default: 0.1 - 10000)</span> <a name="l00162"></a>00162 <span class="comment"> * \sa setViewportClipDistances</span> <a name="l00163"></a>00163 <span class="comment"> */</span> <a name="l00164"></a>00164 <span class="keywordtype">void</span> getViewportClipDistances(<span class="keywordtype">double</span> &clip_min, <span class="keywordtype">double</span> &clip_max) <span class="keyword">const</span>; <a name="l00165"></a>00165 <span class="comment"></span> <a name="l00166"></a>00166 <span class="comment"> /** Set the border size ("frame") of the viewport (default=0).</span> <a name="l00167"></a>00167 <span class="comment"> */</span> <a name="l00168"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aeeb8f8db767be78fb2379264cbd69914">00168</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aeeb8f8db767be78fb2379264cbd69914" title="Set the border size ("frame") of the viewport (default=0).">setBorderSize</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lineWidth ) { m_borderWidth = lineWidth; } <a name="l00169"></a>00169 <span class="comment"></span> <a name="l00170"></a>00170 <span class="comment"> /** Return whether the viewport will be rendered transparent over previous viewports.</span> <a name="l00171"></a>00171 <span class="comment"> */</span> <a name="l00172"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a330fbba78ff3c11477b8ce60223d76ba">00172</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a330fbba78ff3c11477b8ce60223d76ba" title="Return whether the viewport will be rendered transparent over previous viewports.">isTransparent</a>() { <span class="keywordflow">return</span> m_isTransparent; } <a name="l00173"></a>00173 <span class="comment"></span> <a name="l00174"></a>00174 <span class="comment"> /** Set the transparency, that is, whether the viewport will be rendered transparent over previous viewports (default=false).</span> <a name="l00175"></a>00175 <span class="comment"> */</span> <a name="l00176"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a6473e9e64f16ca87a26922459edd5f6b">00176</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a6473e9e64f16ca87a26922459edd5f6b" title="Set the transparency, that is, whether the viewport will be rendered transparent over previous viewpo...">setTransparent</a>( <span class="keywordtype">bool</span> trans ) { m_isTransparent=trans; } <a name="l00177"></a>00177 <span class="comment"></span> <a name="l00178"></a>00178 <span class="comment"> /** Set a background color different from that of the parent GUI window */</span> <a name="l00179"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aef4bc5835204734cfb74ad943610814d">00179</a> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aef4bc5835204734cfb74ad943610814d" title="Set a background color different from that of the parent GUI window.">setCustomBackgroundColor</a>( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1utils_1_1_t_colorf.html" title="A RGB color - floats in the range [0,1].">TColorf</a> &color ) { m_custom_backgb_color = <span class="keyword">true</span>; m_background_color = color; } <a name="l00180"></a>00180 <a name="l00181"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aee6cd66d9374dc739c4d1b29dc0a6829">00181</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aee6cd66d9374dc739c4d1b29dc0a6829">hasCustomBackgroundColor</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_custom_backgb_color; } <a name="l00182"></a>00182 <a name="l00183"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a428206f076d6a6933f8e2a907a487691">00183</a> <span class="keyword">inline</span> <a class="code" href="structmrpt_1_1utils_1_1_t_colorf.html" title="A RGB color - floats in the range [0,1].">TColorf</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a428206f076d6a6933f8e2a907a487691">getCustomBackgroundColor</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_background_color; } <a name="l00184"></a>00184 <span class="comment"></span> <a name="l00185"></a>00185 <span class="comment"> /** Compute the 3D ray corresponding to a given pixel; this can be used to allow the user to pick and select 3D objects by clicking onto the 2D image.</span> <a name="l00186"></a>00186 <span class="comment"> * \param x_coord Horizontal coordinate with the usual meaning (0:left of the viewport, W-1: right border).</span> <a name="l00187"></a>00187 <span class="comment"> * \param y_coord Horizontal coordinate with the usual meaning (0:top of the viewport, H-1: right border).</span> <a name="l00188"></a>00188 <span class="comment"> * \param out_cameraPose If not NULL, will have the camera 3D pose as a mrpt::poses::CPose3D. See also</span> <a name="l00189"></a>00189 <span class="comment"> * \note (x,y) refer to VIEWPORT coordinates. Take into account this when viewports do not extend to the whole window size.</span> <a name="l00190"></a>00190 <span class="comment"> * \note x and y are double instead of integers to allow sub-pixel precision.</span> <a name="l00191"></a>00191 <span class="comment"> * \sa getCurrentCameraPose</span> <a name="l00192"></a>00192 <span class="comment"> */</span> <a name="l00193"></a>00193 <span class="keywordtype">void</span> get3DRayForPixelCoord( <span class="keyword">const</span> <span class="keywordtype">double</span> x_coord, <span class="keyword">const</span> <span class="keywordtype">double</span> y_coord, <a class="code" href="structmrpt_1_1math_1_1_t_line3_d.html" title="3D line, represented by a base point and a director vector.">mrpt::math::TLine3D</a> &out_ray, <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d.html" title="A class used to store a 3D pose (a 3D translation + a rotation in 3D).">mrpt::poses::CPose3D</a> *out_cameraPose=NULL ) <span class="keyword">const</span>; <a name="l00194"></a>00194 <span class="comment"></span> <a name="l00195"></a>00195 <span class="comment"> /** @} */</span> <span class="comment">// end of Change or read viewport properties</span> <a name="l00196"></a>00196 <span class="comment">// ------------------------------------------------------</span> <a name="l00197"></a>00197 <a name="l00198"></a>00198 <a name="l00199"></a>00199 <span class="comment">// -------------------------------------------------------------------</span><span class="comment"></span> <a name="l00200"></a>00200 <span class="comment"> /** @name Contained objects set/get/search</span> <a name="l00201"></a>00201 <span class="comment"> @{ */</span> <a name="l00202"></a>00202 <a name="l00203"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af2dc8f8851c33bb1ebe42e32b671c7d1">00203</a> <span class="keyword">typedef</span> <a class="code" href="classstd_1_1deque.html">CListOpenGLObjects</a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af2dc8f8851c33bb1ebe42e32b671c7d1">::const_iterator</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af2dc8f8851c33bb1ebe42e32b671c7d1">const_iterator</a>; <a name="l00204"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a25a54cc9b9a95cfee030c848cbc8b21d">00204</a> <span class="keyword">typedef</span> <a class="code" href="classstd_1_1deque.html">CListOpenGLObjects</a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a25a54cc9b9a95cfee030c848cbc8b21d">::iterator</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a25a54cc9b9a95cfee030c848cbc8b21d">iterator</a>; <a name="l00205"></a>00205 <a name="l00206"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a0193d336143739362f2dc2b01d7cf123">00206</a> <span class="keyword">inline</span> const_iterator <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a0193d336143739362f2dc2b01d7cf123">begin</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_objects.begin(); } <a name="l00207"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#acd190e1e6640e53e7972871d1769e108">00207</a> <span class="keyword">inline</span> const_iterator <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#acd190e1e6640e53e7972871d1769e108">end</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_objects.end(); } <a name="l00208"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ae41924855de855b45d6d53da3b89cd9d">00208</a> <span class="keyword">inline</span> iterator <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ae41924855de855b45d6d53da3b89cd9d">begin</a>() { <span class="keywordflow">return</span> m_objects.begin(); } <a name="l00209"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a32ba4e2889430cb519629f24e577d404">00209</a> <span class="keyword">inline</span> iterator <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a32ba4e2889430cb519629f24e577d404">end</a>() { <span class="keywordflow">return</span> m_objects.end(); } <a name="l00210"></a>00210 <span class="comment"></span> <a name="l00211"></a>00211 <span class="comment"> /** Delete all internal obejcts</span> <a name="l00212"></a>00212 <span class="comment"> * \sa insert */</span> <a name="l00213"></a>00213 <span class="keywordtype">void</span> clear(); <a name="l00214"></a>00214 <span class="comment"></span> <a name="l00215"></a>00215 <span class="comment"> /** Insert a new object into the list.</span> <a name="l00216"></a>00216 <span class="comment"> * The object MUST NOT be deleted, it will be deleted automatically by this object when not required anymore.</span> <a name="l00217"></a>00217 <span class="comment"> */</span> <a name="l00218"></a>00218 <span class="keywordtype">void</span> insert( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_renderizable_ptr.html">CRenderizablePtr</a> &newObject ); <a name="l00219"></a>00219 <span class="comment"></span> <a name="l00220"></a>00220 <span class="comment"> /** Compute the current 3D camera pose.</span> <a name="l00221"></a>00221 <span class="comment"> * \sa get3DRayForPixelCoord</span> <a name="l00222"></a>00222 <span class="comment"> */</span> <a name="l00223"></a>00223 <span class="keywordtype">void</span> getCurrentCameraPose( <a class="code" href="classmrpt_1_1poses_1_1_c_pose3_d.html" title="A class used to store a 3D pose (a 3D translation + a rotation in 3D).">mrpt::poses::CPose3D</a> &out_cameraPose ) <span class="keyword">const</span>; <a name="l00224"></a>00224 <span class="comment"></span> <a name="l00225"></a>00225 <span class="comment"> /** Returns the first object with a given name, or NULL if not found.</span> <a name="l00226"></a>00226 <span class="comment"> */</span> <a name="l00227"></a>00227 <a class="code" href="structmrpt_1_1opengl_1_1_c_renderizable_ptr.html">CRenderizablePtr</a> getByName( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &str ); <a name="l00228"></a>00228 <span class="comment"></span> <a name="l00229"></a>00229 <span class="comment"> /** Returns the i'th object of a given class (or of a descendant class), or NULL (an empty smart pointer) if not found.</span> <a name="l00230"></a>00230 <span class="comment"> * Example:</span> <a name="l00231"></a>00231 <span class="comment"> * \code</span> <a name="l00232"></a>00232 <span class="comment"> CSpherePtr obs = view.getByClass<CSphere>();</span> <a name="l00233"></a>00233 <span class="comment"> * \endcode</span> <a name="l00234"></a>00234 <span class="comment"> * By default (ith=0), the first observation is returned.</span> <a name="l00235"></a>00235 <span class="comment"> */</span> <a name="l00236"></a>00236 <span class="keyword">template</span> <<span class="keyword">typename</span> T> <a name="l00237"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ad0057a06f6c7c56a495b7b65b5ba194e">00237</a> <span class="keyword">typename</span> T<a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_ptr.html">::SmartPtr</a> getByClass( <span class="keyword">const</span> <span class="keywordtype">size_t</span> &ith = 0 )<span class="keyword"> const</span> <a name="l00238"></a>00238 <span class="keyword"> </span>{ <a name="l00239"></a>00239 <a class="code" href="mrpt__macros_8h.html#a45b840af519f33816311acdbb28d7c10">MRPT_START</a> <a name="l00240"></a>00240 <span class="keywordtype">size_t</span> foundCount = 0; <a name="l00241"></a>00241 <span class="keyword">const</span> mrpt<a class="code" href="structmrpt_1_1utils_1_1_t_runtime_class_id.html" title="A structure that holds runtime class type information.">::utils::TRuntimeClassId</a>* class_ID = T::classinfo; <a name="l00242"></a>00242 <span class="keywordflow">for</span> (<a class="code" href="eigen__plugins_8h.html#a8dbda719917732693c56cee228465ed9">CListOpenGLObjects::const_iterator</a> it = m_objects.begin();it!=m_objects.end();++it) <a name="l00243"></a>00243 <span class="keywordflow">if</span> ( (*it).present() && (*it)->GetRuntimeClass()->derivedFrom( class_ID ) ) <a name="l00244"></a>00244 <span class="keywordflow">if</span> (foundCount++ == ith) <a name="l00245"></a>00245 <span class="keywordflow">return</span> <span class="keyword">typename</span> T::SmartPtr(*it); <a name="l00246"></a>00246 <a name="l00247"></a>00247 <span class="comment">// If not found directly, search recursively:</span> <a name="l00248"></a>00248 <span class="keywordflow">for</span> (<a class="code" href="eigen__plugins_8h.html#a8dbda719917732693c56cee228465ed9">CListOpenGLObjects::const_iterator</a> it=m_objects.begin();it!=m_objects.end();++it) <a name="l00249"></a>00249 { <a name="l00250"></a>00250 <span class="keywordflow">if</span> ( (*it).present() && (*it)->GetRuntimeClass() == <a class="code" href="_c_object_8h.html#a50425f043b81147fed5f71d2e26ca337" title="Access to runtime class ID for a defined class name.">CLASS_ID_NAMESPACE</a>(<a class="code" href="classmrpt_1_1opengl_1_1_c_set_of_objects.html" title="A set of object, which are referenced to the coordinates framework established in this object...">CSetOfObjects</a>,mrpt::opengl)) <a name="l00251"></a>00251 { <a name="l00252"></a>00252 <span class="keyword">typename</span> T<a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_ptr.html">::SmartPtr</a> o = <a class="code" href="structmrpt_1_1opengl_1_1_c_set_of_objects_ptr.html">CSetOfObjectsPtr</a>(*it)->getByClass<T>(ith); <a name="l00253"></a>00253 <span class="keywordflow">if</span> (o.present()) <span class="keywordflow">return</span> o; <a name="l00254"></a>00254 } <a name="l00255"></a>00255 } <a name="l00256"></a>00256 <span class="keywordflow">return</span> <span class="keyword">typename</span> T::SmartPtr(); <span class="comment">// Not found: return empty smart pointer</span> <a name="l00257"></a>00257 <a class="code" href="mrpt__macros_8h.html#a88a917260793b56abd83ad2a0d849eb1">MRPT_END</a> <a name="l00258"></a>00258 } <a name="l00259"></a>00259 <span class="comment"></span> <a name="l00260"></a>00260 <span class="comment"> /** Removes the given object from the scene (it also deletes the object to free its memory).</span> <a name="l00261"></a>00261 <span class="comment"> */</span> <a name="l00262"></a>00262 <span class="keywordtype">void</span> removeObject( <span class="keyword">const</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_renderizable_ptr.html">CRenderizablePtr</a> & obj ); <a name="l00263"></a>00263 <span class="comment"></span> <a name="l00264"></a>00264 <span class="comment"> /** Number of objects contained. */</span> <a name="l00265"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a4f25a0682e31437e68681b66eb8fbd41">00265</a> <span class="keyword">inline</span> <span class="keywordtype">size_t</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a4f25a0682e31437e68681b66eb8fbd41" title="Number of objects contained.">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_objects.size(); } <a name="l00266"></a>00266 <a name="l00267"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a0c396effc67a95c457c639cafeeddceb">00267</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a0c396effc67a95c457c639cafeeddceb">empty</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_objects.empty(); } <a name="l00268"></a>00268 <a name="l00269"></a>00269 <a name="l00270"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af611f16ecfe432c6d5f47e7109c4c32f">00270</a> opengl<a class="code" href="classmrpt_1_1opengl_1_1_c_camera.html" title="A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...">::CCamera</a>& <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af611f16ecfe432c6d5f47e7109c4c32f" title="Get a reference to the camera associated with this viewport.">getCamera</a>() { <span class="keywordflow">return</span> m_camera;} <span class="comment">//!< Get a reference to the camera associated with this viewport.</span> <a name="l00271"></a>00271 <span class="comment"></span> <a name="l00272"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a04dea86da31a3acac09bce695e3b03b6">00272</a> <span class="keyword">const</span> opengl<a class="code" href="classmrpt_1_1opengl_1_1_c_camera.html" title="A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...">::CCamera</a> & <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a04dea86da31a3acac09bce695e3b03b6" title="Get a reference to the camera associated with this viewport.">getCamera</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_camera;} <span class="comment">//!< Get a reference to the camera associated with this viewport.</span> <a name="l00273"></a>00273 <span class="comment"></span><span class="comment"></span> <a name="l00274"></a>00274 <span class="comment"> /** @} */</span> <span class="comment">// end of Contained objects set/get/search</span> <a name="l00275"></a>00275 <span class="comment">// ------------------------------------------------------</span> <a name="l00276"></a>00276 <a name="l00277"></a>00277 <a name="l00278"></a>00278 <span class="keyword">virtual</span> ~<a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a>(); <span class="comment">//!< Destructor: clears all objects.</span> <a name="l00279"></a>00279 <span class="comment"></span> <a name="l00280"></a>00280 <a name="l00281"></a>00281 <span class="keyword">protected</span>:<span class="comment"></span> <a name="l00282"></a>00282 <span class="comment"> /** Constructor, invoked from COpenGLScene only.</span> <a name="l00283"></a>00283 <span class="comment"> */</span> <a name="l00284"></a>00284 <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a>( <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_scene.html" title="This class allows the user to create, load, save, and render 3D scenes using OpenGL primitives...">COpenGLScene</a> *parent=NULL, <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &name=<a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a>(<span class="stringliteral">""</span>) ); <a name="l00285"></a>00285 <span class="comment"></span> <a name="l00286"></a>00286 <span class="comment"> /** Initializes all textures in the scene (See opengl::CTexturedPlane::loadTextureInOpenGL)</span> <a name="l00287"></a>00287 <span class="comment"> */</span> <a name="l00288"></a>00288 <span class="keywordtype">void</span> initializeAllTextures(); <a name="l00289"></a>00289 <span class="comment"></span> <a name="l00290"></a>00290 <span class="comment"> /** Retrieves a list of all objects in text form.</span> <a name="l00291"></a>00291 <span class="comment"> */</span> <a name="l00292"></a>00292 <span class="keywordtype">void</span> dumpListOfObjects( <a class="code" href="classmrpt_1_1utils_1_1_c_string_list.html" title="A class for storing a list of text lines.">utils::CStringList</a> &lst ); <a name="l00293"></a>00293 <span class="comment"></span> <a name="l00294"></a>00294 <span class="comment"> /** Render the objects in this viewport (called from COpenGLScene only) */</span> <a name="l00295"></a>00295 <span class="keywordtype">void</span> render( <span class="keyword">const</span> <span class="keywordtype">int</span> render_width, <span class="keyword">const</span> <span class="keywordtype">int</span> render_height ) <span class="keyword">const</span>; <a name="l00296"></a>00296 <span class="comment"></span> <a name="l00297"></a>00297 <span class="comment"> /** The camera associated to the viewport */</span> <a name="l00298"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aba9f98dbdb5b590b549b0d9125cf2e9d">00298</a> opengl<a class="code" href="classmrpt_1_1opengl_1_1_c_camera.html" title="A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...">::CCamera</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#aba9f98dbdb5b590b549b0d9125cf2e9d" title="The camera associated to the viewport.">m_camera</a>; <a name="l00299"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a91e204f5d7dcc375c060ba4e9ac47e6f">00299</a> utils<a class="code" href="structmrpt_1_1utils_1_1safe__ptr.html">::safe_ptr<COpenGLScene></a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a91e204f5d7dcc375c060ba4e9ac47e6f" title="The scene that contains this viewport.">m_parent</a>; <span class="comment">//!< The scene that contains this viewport.</span> <a name="l00300"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ad49c3218eb577667fa1668d206c294ab">00300</a> <span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ad49c3218eb577667fa1668d206c294ab" title="Set by setCloneView.">m_isCloned</a>; <span class="comment">//!< Set by setCloneView</span> <a name="l00301"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a6cf3666e05514f37b020f0a1c86182e5">00301</a> <span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a6cf3666e05514f37b020f0a1c86182e5" title="Set by setCloneCamera.">m_isClonedCamera</a>; <span class="comment">//!< Set by setCloneCamera</span> <a name="l00302"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a13e49b10c885c924681e75fbd760d872">00302</a> <span class="comment"></span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a13e49b10c885c924681e75fbd760d872" title="Only if m_isCloned=true.">m_clonedViewport</a>; <span class="comment">//!< Only if m_isCloned=true</span> <a name="l00303"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#addc0e74b06c726f41111ed29b24f73fa">00303</a> <span class="comment"></span> std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#addc0e74b06c726f41111ed29b24f73fa" title="The viewport's name.">m_name</a>; <span class="comment">//!< The viewport's name</span> <a name="l00304"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a87696a7fe72faa6d72c91bd0fcc87424">00304</a> <span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a87696a7fe72faa6d72c91bd0fcc87424" title="Whether to clear color buffer.">m_isTransparent</a>; <span class="comment">//!< Whether to clear color buffer.</span> <a name="l00305"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a73ba4d5e25ada3393e9353c70b89bd4b">00305</a> <span class="comment"></span> uint32_t <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a73ba4d5e25ada3393e9353c70b89bd4b" title="Default=0, the border around the viewport.">m_borderWidth</a>; <span class="comment">//!< Default=0, the border around the viewport.</span> <a name="l00306"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a94b263014752cc73a5abccf9e1efae6c">00306</a> <span class="comment"></span> <span class="keywordtype">double</span> m_view_x, <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a94b263014752cc73a5abccf9e1efae6c">m_view_y</a>,m_view_width,m_view_height; <span class="comment">//!< The viewport position [0,1]</span> <a name="l00307"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#adc378a92a75237daf112001086254a99">00307</a> <span class="comment"></span> <span class="keywordtype">double</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#adc378a92a75237daf112001086254a99">m_clip_min</a>,m_clip_max; <span class="comment">//!< The min/max clip depth distances (default: 0.1 - 10000)</span> <a name="l00308"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a6ef4427191f5906f8ac8220655d9e366">00308</a> <span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a6ef4427191f5906f8ac8220655d9e366">m_custom_backgb_color</a>; <a name="l00309"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af17d3e4d7868cc613d87fac2a0b9849b">00309</a> <a class="code" href="structmrpt_1_1utils_1_1_t_colorf.html" title="A RGB color - floats in the range [0,1].">TColorf</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#af17d3e4d7868cc613d87fac2a0b9849b" title="used only if m_custom_backgb_color">m_background_color</a>; <span class="comment">//!< used only if m_custom_backgb_color</span> <a name="l00310"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a9e99d45ce632f06a20cd60b3c20af4f8">00310</a> <span class="comment"></span> <span class="keywordtype">bool</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a9e99d45ce632f06a20cd60b3c20af4f8" title="Set by setImageView.">m_isImageView</a>; <span class="comment">//!< Set by setImageView</span> <a name="l00311"></a>00311 <span class="comment"></span> <span class="comment">//CRenderizablePtr m_imageview_quad ; //!< A mrpt::opengl::CTexturedPlane used after setImageView() is called</span> <a name="l00312"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ac1e33c780adb424840e27dc1391a43e4">00312</a> mrpt<a class="code" href="structmrpt_1_1utils_1_1_c_image_ptr.html">::utils::CImagePtr</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#ac1e33c780adb424840e27dc1391a43e4" title="The image to display, after calling setImageView() ">m_imageview_img</a>; <span class="comment">//!< The image to display, after calling \a setImageView()</span> <a name="l00313"></a>00313 <span class="comment"></span> <a name="l00314"></a>00314 <span class="keyword">struct </span><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html">TLastProjectiveMatrixInfo</a> <a name="l00315"></a>00315 { <a name="l00316"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a0fd230b75cdc8fb0bbefb5c9ced985fc">00316</a> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html">TLastProjectiveMatrixInfo</a>() : is_projective(true),<a class="code" href="eigen__plugins_8h.html#a099661ff1d800e1a14acac4857fef23a" title="Make the matrix an identity matrix.">eye</a>(0,0,0),pointing(0,0,0),up(0,0,0), FOV(30), viewport_width(640), viewport_height(480), azimuth(0), elev(0), zoom(1) <a name="l00317"></a>00317 {} <a name="l00318"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a48f7196e9828c011e1c3fdc98a52bf61">00318</a> <span class="keywordtype">bool</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a48f7196e9828c011e1c3fdc98a52bf61">is_projective</a>; <span class="comment">// true: projective, false: ortho</span> <a name="l00319"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#aa7f6dcb3e0960f295f86dd7943098309">00319</a> <a class="code" href="structmrpt_1_1math_1_1_t_point3_d.html" title="Lightweight 3D point.">TPoint3D</a> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#aa7f6dcb3e0960f295f86dd7943098309" title="The camera is here.">eye</a>; <span class="comment">//!< The camera is here.</span> <a name="l00320"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a2058cc4997589b38f7ecebeaa1aa4369">00320</a> <span class="comment"></span> <a class="code" href="structmrpt_1_1math_1_1_t_point3_d.html" title="Lightweight 3D point.">TPoint3D</a> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a2058cc4997589b38f7ecebeaa1aa4369" title="The camera points to here.">pointing</a>; <span class="comment">//!< The camera points to here</span> <a name="l00321"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a6c9fb3aba92b6ef51a63d144c76ea2ea">00321</a> <span class="comment"></span> <a class="code" href="structmrpt_1_1math_1_1_t_point3_d.html" title="Lightweight 3D point.">TPoint3D</a> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a6c9fb3aba92b6ef51a63d144c76ea2ea" title="Up vector of the camera.">up</a>; <span class="comment">//!< Up vector of the camera.</span> <a name="l00322"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a3d0d5483dfc5e4e1731653b06162d198">00322</a> <span class="comment"></span> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a3d0d5483dfc5e4e1731653b06162d198" title="FOV in degrees.">FOV</a>; <span class="comment">//!< FOV in degrees.</span> <a name="l00323"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#af3cb8d2798658d026fa45ee6075a61ec">00323</a> <span class="comment"></span> <span class="keywordtype">size_t</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#af3cb8d2798658d026fa45ee6075a61ec">viewport_width</a>, viewport_height; <span class="comment">//!< In pixels. This may be smaller than the total render window.</span> <a name="l00324"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#ad1403b1bfa9c710f8021de2b496549c4">00324</a> <span class="comment"></span> <span class="keywordtype">float</span> azimuth, <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#ad1403b1bfa9c710f8021de2b496549c4" title="Camera elev & azimuth, in radians.">elev</a>; <span class="comment">//!< Camera elev & azimuth, in radians.</span> <a name="l00325"></a><a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a357657af3aa4b0d1abaaccc14262adda">00325</a> <span class="comment"></span> <span class="keywordtype">float</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html#a357657af3aa4b0d1abaaccc14262adda">zoom</a>; <a name="l00326"></a>00326 }; <a name="l00327"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#adb2e3b9a3ae4e7edeb7b8db05eec903b">00327</a> <span class="keyword">mutable</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_1_1_t_last_projective_matrix_info.html">TLastProjectiveMatrixInfo</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#adb2e3b9a3ae4e7edeb7b8db05eec903b" title="Info updated with each "render()" and used in "get3DRayForPixelCoord".">m_lastProjMat</a>; <span class="comment">//!< Info updated with each "render()" and used in "get3DRayForPixelCoord"</span> <a name="l00328"></a>00328 <span class="comment"></span><span class="comment"></span> <a name="l00329"></a>00329 <span class="comment"> /** The list of objects that comprise the 3D scene.</span> <a name="l00330"></a>00330 <span class="comment"> * Objects are automatically deleted when calling "clear" or in the destructor.</span> <a name="l00331"></a>00331 <span class="comment"> */</span> <a name="l00332"></a><a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a1579ad9a562668cefc713a00d029b410">00332</a> opengl<a class="code" href="classstd_1_1deque.html">::CListOpenGLObjects</a> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html#a1579ad9a562668cefc713a00d029b410" title="The list of objects that comprise the 3D scene.">m_objects</a>; <a name="l00333"></a>00333 <a name="l00334"></a>00334 <span class="keywordtype">void</span> internal_setImageView_fast(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1utils_1_1_c_image.html" title="A class for storing images as grayscale or RGB bitmaps.">mrpt::utils::CImage</a> &img, <span class="keywordtype">bool</span> is_fast); <a name="l00335"></a>00335 <a name="l00336"></a>00336 };<span class="comment"></span> <a name="l00337"></a>00337 <span class="comment"> /**</span> <a name="l00338"></a>00338 <span class="comment"> * Inserts an openGL object into a viewport. Allows call chaining.</span> <a name="l00339"></a>00339 <span class="comment"> * \sa mrpt::opengl::COpenGLViewport::insert</span> <a name="l00340"></a>00340 <span class="comment"> */</span> <a name="l00341"></a><a class="code" href="namespacemrpt_1_1opengl.html#ab634bfb577aa36c39773ece39fd1856e">00341</a> <span class="keyword">inline</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_ptr.html">COpenGLViewportPtr</a> &<a class="code" href="namespacemrpt_1_1opengl.html#a12e49154ca3af8dcb06d847404a0d4ea" title="Inserts an openGL object into a scene.">operator<<</a>(<a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_ptr.html">COpenGLViewportPtr</a> &s,<span class="keyword">const</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_renderizable_ptr.html">CRenderizablePtr</a> &r) { <a name="l00342"></a>00342 s->insert(r); <a name="l00343"></a>00343 <span class="keywordflow">return</span> s; <a name="l00344"></a>00344 }<span class="comment"></span> <a name="l00345"></a>00345 <span class="comment"> /**</span> <a name="l00346"></a>00346 <span class="comment"> * Inserts any iterable set of openGL objects into a viewport. Allows call chaining.</span> <a name="l00347"></a>00347 <span class="comment"> * \sa mrpt::opengl::COpenGLViewport::insert</span> <a name="l00348"></a>00348 <span class="comment"> */</span> <a name="l00349"></a><a class="code" href="namespacemrpt_1_1opengl.html#ab42f156d73d59ae411e04a4a6b47b62e">00349</a> <span class="keyword">inline</span> <a class="code" href="structmrpt_1_1opengl_1_1_c_open_g_l_viewport_ptr.html">COpenGLViewportPtr</a> &operator<<(COpenGLViewportPtr &s,const std::vector<CRenderizablePtr> &v) { <a name="l00350"></a>00350 <span class="keywordflow">for</span> (<a class="code" href="classstd_1_1vector_1_1const__iterator.html" title="STL iterator class.">std::vector<CRenderizablePtr>::const_iterator</a> it=v.begin();it!=v.end();++it) s->insert(*it); <a name="l00351"></a>00351 <span class="keywordflow">return</span> s; <a name="l00352"></a>00352 } <a name="l00353"></a>00353 <a name="l00354"></a>00354 <a name="l00355"></a>00355 <span class="comment"></span> <a name="l00356"></a>00356 <span class="comment"> /** @name Events emitted by COpenGLViewport</span> <a name="l00357"></a>00357 <span class="comment"> @{ */</span> <a name="l00358"></a>00358 <span class="comment"></span> <a name="l00359"></a>00359 <span class="comment"> /** An event sent by an mrpt::opengl::COpenGLViewport just after clearing the viewport and setting the GL_PROJECTION matrix, and before calling the scene OpenGL drawing primitives.</span> <a name="l00360"></a>00360 <span class="comment"> *</span> <a name="l00361"></a>00361 <span class="comment"> * While handling this event you can call OpenGL glBegin(),glEnd(),gl* functions or those in mrpt::opengl::gl_utils to draw stuff *in the back* of the normal</span> <a name="l00362"></a>00362 <span class="comment"> * objects contained in the COpenGLScene.</span> <a name="l00363"></a>00363 <span class="comment"> *</span> <a name="l00364"></a>00364 <span class="comment"> * After processing this event, COpenGLViewport will change the OpenGL matrix mode into "GL_MODELVIEW" and load an identity matrix to continue</span> <a name="l00365"></a>00365 <span class="comment"> * rendering the scene objects as usual. Any change done to the GL_PROJECTION will have effects, so do a glPushMatrix()/glPopMatrix() if that is not your intention.</span> <a name="l00366"></a>00366 <span class="comment"> *</span> <a name="l00367"></a>00367 <span class="comment"> *</span> <a name="l00368"></a>00368 <span class="comment"> * IMPORTANTE NOTICE: Event handlers in your observer class will most likely be invoked from an internal GUI thread of MRPT,</span> <a name="l00369"></a>00369 <span class="comment"> * so all your code in the handler must be thread safe.</span> <a name="l00370"></a>00370 <span class="comment"> */</span> <a name="l00371"></a>00371 <span class="keyword">class </span><a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> mrptEventGLPreRender : <span class="keyword">public</span> mrptEvent <a name="l00372"></a>00372 { <a name="l00373"></a>00373 <span class="keyword">protected</span>: <a name="l00374"></a><a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_pre_render.html#a17e4b0221e743d4dd47cf124e3f15870">00374</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_pre_render.html#a17e4b0221e743d4dd47cf124e3f15870" title="Just to allow this class to be polymorphic.">do_nothing</a>() { } <span class="comment">//!< Just to allow this class to be polymorphic</span> <a name="l00375"></a>00375 <span class="comment"></span> <span class="keyword">public</span>: <a name="l00376"></a><a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_pre_render.html#a6a7abdaba71b7645b2721be7ed784e19">00376</a> <span class="keyword">inline</span> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_pre_render.html#a6a7abdaba71b7645b2721be7ed784e19">mrptEventGLPreRender</a>(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a>* obj) : source_viewport(obj) { } <a name="l00377"></a><a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_pre_render.html#af4c0053156ea3f6db07ae166ccdf12e7">00377</a> <span class="keyword">const</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a> * <span class="keyword">const</span> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_pre_render.html#af4c0053156ea3f6db07ae166ccdf12e7">source_viewport</a>; <a name="l00378"></a>00378 }; <span class="comment">// End of class def.</span> <a name="l00379"></a>00379 <span class="comment"></span> <a name="l00380"></a>00380 <span class="comment"> /** An event sent by an mrpt::opengl::COpenGLViewport after calling the scene OpenGL drawing primitives and before doing a glSwapBuffers</span> <a name="l00381"></a>00381 <span class="comment"> *</span> <a name="l00382"></a>00382 <span class="comment"> * While handling this event you can call OpenGL glBegin(),glEnd(),gl* functions or those in mrpt::opengl::gl_utils to draw stuff *on the top* of the normal</span> <a name="l00383"></a>00383 <span class="comment"> * objects contained in the COpenGLScene.</span> <a name="l00384"></a>00384 <span class="comment"> *</span> <a name="l00385"></a>00385 <span class="comment"> * IMPORTANTE NOTICE: Event handlers in your observer class will most likely be invoked from an internal GUI thread of MRPT,</span> <a name="l00386"></a>00386 <span class="comment"> * so all your code in the handler must be thread safe.</span> <a name="l00387"></a>00387 <span class="comment"> */</span> <a name="l00388"></a>00388 <span class="keyword">class </span><a class="code" href="opengl_2include_2mrpt_2opengl_2link__pragmas_8h.html#af6a1c8d5d6b3c8c0af00dbeef88ce269">OPENGL_IMPEXP</a> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html" title="An event sent by an mrpt::opengl::COpenGLViewport after calling the scene OpenGL drawing primitives a...">mrptEventGLPostRender</a> : <span class="keyword">public</span> <a class="code" href="classmrpt_1_1utils_1_1mrpt_event.html" title="The basic event type for the observer-observable pattern in MRPT.">mrptEvent</a> <a name="l00389"></a>00389 { <a name="l00390"></a>00390 <span class="keyword">protected</span>: <a name="l00391"></a><a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html#a542ed748df75229d5881f328afaa5bf4">00391</a> <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html#a542ed748df75229d5881f328afaa5bf4" title="Just to allow this class to be polymorphic.">do_nothing</a>() { } <span class="comment">//!< Just to allow this class to be polymorphic</span> <a name="l00392"></a>00392 <span class="comment"></span> <span class="keyword">public</span>: <a name="l00393"></a><a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html#ac9a8ef288494d8612e1ae7a56df9795c">00393</a> <span class="keyword">inline</span> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html#ac9a8ef288494d8612e1ae7a56df9795c">mrptEventGLPostRender</a>(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a>* obj) : source_viewport(obj) { } <a name="l00394"></a><a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html#a4b82b5b5cbea33c18c51408b52323729">00394</a> <span class="keyword">const</span> <a class="code" href="classmrpt_1_1opengl_1_1_c_open_g_l_viewport.html" title="A viewport within a COpenGLScene, containing a set of OpenGL objects to render.">COpenGLViewport</a> * <span class="keyword">const</span> <a class="code" href="classmrpt_1_1opengl_1_1mrpt_event_g_l_post_render.html#a4b82b5b5cbea33c18c51408b52323729">source_viewport</a>; <a name="l00395"></a>00395 }; <span class="comment">// End of class def.</span> <a name="l00396"></a>00396 <a name="l00397"></a>00397 <span class="comment"></span> <a name="l00398"></a>00398 <span class="comment"> /** @} */</span> <a name="l00399"></a>00399 <a name="l00400"></a>00400 <a name="l00401"></a>00401 <a name="l00402"></a>00402 } <span class="comment">// end namespace</span> <a name="l00403"></a>00403 <a name="l00404"></a>00404 } <span class="comment">// End of namespace</span> <a name="l00405"></a>00405 <a name="l00406"></a>00406 <a name="l00407"></a>00407 <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>