9 #ifndef opengl_COpenGLViewport_H
10 #define opengl_COpenGLViewport_H
25 namespace utils {
class CImage; }
57 public
mrpt::utils::CSerializable,
58 public
mrpt::utils::CObservable
71 void setCloneView( const std::
string &clonedViewport );
79 void setImageView(const
mrpt::utils::CImage &img);
84 void setImageView_fast(
mrpt::utils::CImage &img);
89 inline
void resetCloneView() { setNormalMode(); }
128 inline std::string
getName() {
return m_name; }
148 const double height );
175 inline void setBorderSize(
unsigned int lineWidth ) { m_borderWidth = lineWidth; }
223 void insert(
const CRenderizablePtr &newObject );
241 template <
typename T>
242 typename T::SmartPtr
getByClass(
const size_t &ith = 0 )
const
245 size_t foundCount = 0;
248 if ( (*it).present() && (*it)->GetRuntimeClass()->derivedFrom( class_ID ) )
249 if (foundCount++ == ith)
250 return typename T::SmartPtr(*it);
257 typename T::SmartPtr o = CSetOfObjectsPtr(*it)->getByClass<T>(ith);
258 if (o.present())
return o;
261 return typename T::SmartPtr();
270 inline size_t size()
const {
return m_objects.size(); }
272 inline bool empty()
const {
return m_objects.empty(); }
302 void render(
const int render_width,
const int render_height )
const;
323 TLastProjectiveMatrixInfo() :
eye(0,0,0),pointing(0,0,0),up(0,0,0), viewport_width(640), viewport_height(480), FOV(30),
azimuth(0), elev(0), zoom(1),is_projective(true)
353 inline COpenGLViewportPtr &operator<<(COpenGLViewportPtr &s,const CRenderizablePtr &r) {
361 inline COpenGLViewportPtr &
operator<<(COpenGLViewportPtr &s,
const std::vector<CRenderizablePtr> &v) {
#define CLASS_ID_NAMESPACE(class_name, namespaceName)
Access to runtime class ID for a defined class name.
#define DEFINE_SERIALIZABLE_POST_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)
#define DEFINE_SERIALIZABLE(class_name)
This declaration must be inserted in all CSerializable classes definition, within the class declarati...
#define DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE_LINKAGE(class_name, base_name, _LINKAGE_)
This declaration must be inserted in all CSerializable classes definition, before the class declarati...
A camera: if added to a scene, the viewpoint defined by this camera will be used instead of the camer...
This class allows the user to create, load, save, and render 3D scenes using OpenGL primitives.
A viewport within a COpenGLScene, containing a set of OpenGL objects to render.
const_iterator end() const
std::string m_clonedViewport
Only if m_isCloned=true.
opengl::CListOpenGLObjects m_objects
The list of objects that comprise the 3D scene.
void internal_setImageView_fast(const mrpt::utils::CImage &img, bool is_fast)
CLight & getLight(const size_t i)
std::string getName()
Returns the name of the viewport.
CListOpenGLObjects::iterator iterator
bool isTransparent()
Return whether the viewport will be rendered transparent over previous viewports.
size_t size() const
Number of objects contained.
void getBoundingBox(mrpt::math::TPoint3D &bb_min, mrpt::math::TPoint3D &bb_max) const
Evaluates the bounding box of this object (including possible children) in the coordinate frame of th...
const CLight & getLight(const size_t i) const
void getViewportClipDistances(double &clip_min, double &clip_max) const
Get the current min/max clip depth distances of the rendering frustum (default: 0....
void enablePolygonNicest(bool enable=true)
Sets glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST) is enabled, or GL_FASTEST otherwise.
COpenGLViewport(COpenGLScene *parent=NULL, const std::string &name=std::string(""))
Constructor, invoked from COpenGLScene only.
void setCustomBackgroundColor(const mrpt::utils::TColorf &color)
Set a background color different from that of the parent GUI window.
void setTransparent(bool trans)
Set the transparency, that is, whether the viewport will be rendered transparent over previous viewpo...
T::SmartPtr getByClass(const size_t &ith=0) const
Returns the i'th object of a given class (or of a descendant class), or NULL (an empty smart pointer)...
const opengl::CCamera & getCamera() const
Get a reference to the camera associated with this viewport.
bool m_isClonedCamera
Set by setCloneCamera.
bool m_custom_backgb_color
void setNumberOfLights(const size_t N)
Allocates a number of lights, which must be correctly defined via getLight(i), etc.
uint32_t m_borderWidth
Default=0, the border around the viewport.
virtual ~COpenGLViewport()
Destructor: clears all objects.
void dumpListOfObjects(mrpt::utils::CStringList &lst)
Retrieves a list of all objects in text form.
void lightsClearAll()
Removes all lights (and disables the global "GL_LIGHTING")
void initializeAllTextures()
Initializes all textures in the scene (See opengl::CTexturedPlane::loadTextureInOpenGL)
bool m_isTransparent
Whether to clear color buffer.
void addLight(const CLight &l)
Append a new light to the scene.
double m_clip_max
The min/max clip depth distances (default: 0.1 - 10000)
utils::safe_ptr< COpenGLScene > m_parent
The scene that contains this viewport.
void insert(const CRenderizablePtr &newObject)
Insert a new object into the list.
void get3DRayForPixelCoord(const double x_coord, const double y_coord, mrpt::math::TLine3D &out_ray, mrpt::poses::CPose3D *out_cameraPose=NULL) const
Compute the 3D ray corresponding to a given pixel; this can be used to allow the user to pick and sel...
bool m_isImageView
Set by setImageView.
void setViewportPosition(const double x, const double y, const double width, const double height)
Change the viewport position and dimension on the rendering window.
double m_view_height
The viewport position [0,1].
void getCurrentCameraPose(mrpt::poses::CPose3D &out_cameraPose) const
Compute the current 3D camera pose.
void setViewportClipDistances(const double clip_min, const double clip_max)
Set the min/max clip depth distances of the rendering frustum (default: 0.1 - 10000)
bool isPolygonNicestEnabled() const
opengl::CCamera m_camera
The camera associated to the viewport.
std::vector< CLight > m_lights
mrpt::utils::CImagePtr m_imageview_img
The image to display, after calling setImageView()
mrpt::utils::TColorf getCustomBackgroundColor() const
void setCloneCamera(bool enable)
If set to true, and setCloneView() has been called, this viewport will be rendered using the camera o...
bool m_isCloned
Set by setCloneView.
void render(const int render_width, const int render_height) const
Render the objects in this viewport (called from COpenGLScene only)
void getViewportPosition(double &x, double &y, double &width, double &height)
Get the current viewport position and dimension on the rendering window.
CRenderizablePtr getByName(const std::string &str)
Returns the first object with a given name, or NULL if not found.
TLastProjectiveMatrixInfo m_lastProjMat
Info updated with each "render()" and used in "get3DRayForPixelCoord".
std::string m_name
The viewport's name.
mrpt::utils::TColorf m_background_color
used only if m_custom_backgb_color
void setBorderSize(unsigned int lineWidth)
Set the border size ("frame") of the viewport (default=0).
void clear()
Delete all internal obejcts.
CListOpenGLObjects::const_iterator const_iterator
opengl::CCamera & getCamera()
Get a reference to the camera associated with this viewport.
const_iterator begin() const
bool m_OpenGL_enablePolygonNicest
void removeObject(const CRenderizablePtr &obj)
Removes the given object from the scene (it also deletes the object to free its memory).
void setNormalMode()
Resets the viewport to a normal 3D viewport.
A set of object, which are referenced to the coordinates framework established in this object.
An event sent by an mrpt::opengl::COpenGLViewport after calling the scene OpenGL drawing primitives a...
void do_nothing() MRPT_OVERRIDE
Just to allow this class to be polymorphic.
const COpenGLViewport *const source_viewport
mrptEventGLPostRender(const COpenGLViewport *obj)
An event sent by an mrpt::opengl::COpenGLViewport just after clearing the viewport and setting the GL...
void do_nothing() MRPT_OVERRIDE
Just to allow this class to be polymorphic.
mrptEventGLPreRender(const COpenGLViewport *obj)
const COpenGLViewport *const source_viewport
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
A class for storing images as grayscale or RGB bitmaps.
The virtual base class which provides a unified interface for all persistent objects in MRPT.
A class for storing a list of text lines.
The basic event type for the observer-observable pattern in MRPT.
EIGEN_STRONG_INLINE void eye()
Make the matrix an identity matrix
const Scalar * const_iterator
#define MRPT_OVERRIDE
C++11 "override" for virtuals:
#define ASSERT_BELOW_(__A, __B)
The namespace for 3D scene representation and rendering.
std::deque< CRenderizablePtr > CListOpenGLObjects
A list of objects pointers, automatically managing memory free at destructor, and managing copies cor...
OPENGL_IMPEXP mrpt::utils::CStream & operator<<(mrpt::utils::CStream &out, const mrpt::opengl::CLight &o)
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
3D line, represented by a base point and a director vector.
Each of the possible lights of a 3D scene.
TLastProjectiveMatrixInfo()
mrpt::math::TPoint3D pointing
The camera points to here.
mrpt::math::TPoint3D eye
The camera is here.
mrpt::math::TPoint3D up
Up vector of the camera.
size_t viewport_height
In pixels. This may be smaller than the total render window.
A RGB color - floats in the range [0,1].
A structure that holds runtime class type information.
A wrapper class for pointers that can be safely copied with "=" operator without problems.