9#ifndef opengl_COpenGLScene_H
10#define opengl_COpenGLScene_H
73 template<
class T>
inline void insertCollection(
const T &objs,
const std::string &vpn=std::string(
"main")) {
74 insert(objs.begin(),objs.end(),vpn);
81 void insert(
const CRenderizablePtr &newObject,
const std::string &viewportName=std::string(
"main"));
87 template<
class T_it>
inline void insert(
const T_it &
begin,
const T_it &
end,
const std::string &vpn=std::string(
"main")) {
88 for (T_it it=
begin;it!=
end;it++) insert(*it,vpn);
99 COpenGLViewportPtr
getViewport(
const std::string &viewportName = std::string(
"main") )
const;
108 void clear(
bool createMainViewport =
true );
122 CRenderizablePtr
getByName(
const std::string &str,
const std::string &viewportName = std::string(
"main") );
131 template <
typename T>
132 typename T::SmartPtr
getByClass(
const size_t &ith = 0 )
const
137 typename T::SmartPtr o = (*it)->getByClass<T>(ith);
138 if (o.present())
return o;
140 return typename T::SmartPtr();
147 void removeObject(
const CRenderizablePtr &obj,
const std::string &viewportName = std::string(
"main") );
179 template <
typename FUNCTOR>
185 internal_visitAllObjects(functor, *itO);
193 template <
typename FUNCTOR,
typename EXTRA_PARAM>
195 visitAllObjects( std::bind2nd(functor,userParam) );
206 template <
typename FUNCTOR>
212 CSetOfObjectsPtr obj = CSetOfObjectsPtr(o);
214 internal_visitAllObjects(functor,*it);
222 inline COpenGLScenePtr &operator<<(COpenGLScenePtr &s,const CRenderizablePtr &r) {
227 template <
class T>
inline COpenGLScenePtr &
operator<<(COpenGLScenePtr &s,
const std::vector<T> &v) {
228 s->insert(v.begin(),v.end());
#define IS_CLASS(ptrObj, class_name)
Evaluates to true if the given pointer to an object (derived from mrpt::utils::CSerializable) is of t...
#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...
This class allows the user to create, load, save, and render 3D scenes using OpenGL primitives.
bool followCamera() const
Return the value of "followCamera".
std::vector< COpenGLViewportPtr > TListViewports
static void internal_visitAllObjects(FUNCTOR functor, const CRenderizablePtr &o)
bool saveToFile(const std::string &fil) const
Saves the scene to a 3Dscene file, loadable by the application SceneViewer3D.
void clear(bool createMainViewport=true)
Clear the list of objects and viewports in the scene, deleting objects' memory, and leaving just the ...
void removeObject(const CRenderizablePtr &obj, const std::string &viewportName=std::string("main"))
Removes the given object from the scene (it also deletes the object to free its memory).
virtual ~COpenGLScene()
Destructor:
bool traceRay(const mrpt::poses::CPose3D &o, double &dist) const
Traces a ray.
void initializeAllTextures()
Initializes all textures in the scene (See opengl::CTexturedPlane::loadTextureInOpenGL)
COpenGLViewportPtr getViewport(const std::string &viewportName=std::string("main")) const
Returns the viewport with the given name, or NULL if it does not exist; note that the default viewpor...
bool loadFromFile(const std::string &fil)
Loads the scene from a 3Dscene file, the format used by the application SceneViewer3D.
void visitAllObjects(FUNCTOR functor, const EXTRA_PARAM &userParam) const
Recursive depth-first visit all objects in all viewports of the scene, calling the user-supplied func...
void getBoundingBox(mrpt::math::TPoint3D &bb_min, mrpt::math::TPoint3D &bb_max, const std::string &vpn=std::string("main")) const
Evaluates the bounding box of the scene in the given viewport (default: "main").
CRenderizablePtr getByName(const std::string &str, const std::string &viewportName=std::string("main"))
Returns the first object with a given name, or NULL (an empty smart pointer) if not found.
void insert(const T_it &begin, const T_it &end, const std::string &vpn=std::string("main"))
Inserts a set of objects into the scene, in the given viewport ("main" by default).
COpenGLViewportPtr createViewport(const std::string &viewportName)
Creates a new viewport, adding it to the scene and returning a pointer to the new object.
void insertCollection(const T &objs, const std::string &vpn=std::string("main"))
Inserts a set of objects into the scene, in the given viewport ("main" by default).
COpenGLScene(const COpenGLScene &obj)
Copy constructor:
void visitAllObjects(FUNCTOR functor) const
Recursive depth-first visit all objects in all viewports of the scene, calling the user-supplied func...
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)...
size_t viewportsCount() const
void insert(const CRenderizablePtr &newObject, const std::string &viewportName=std::string("main"))
Insert a new object into the scene, in the given viewport (by default, into the "main" viewport).
void render() const
Render this scene.
void enableFollowCamera(bool enabled)
If disabled (default), the SceneViewer application will ignore the camera of the "main" viewport and ...
TListViewports m_viewports
The list of viewports, indexed by name.
COpenGLScene()
Constructor.
void dumpListOfObjects(mrpt::utils::CStringList &lst)
Retrieves a list of all objects in text form.
CListOpenGLObjects::const_iterator const_iterator
A set of object, which are referenced to the coordinates framework established in this object.
CListOpenGLObjects::const_iterator const_iterator
A class used to store a 3D pose (a 3D translation + a rotation in 3D).
The virtual base class which provides a unified interface for all persistent objects in MRPT.
A class for storing a list of text lines.
const Scalar * const_iterator
EIGEN_STRONG_INLINE iterator begin()
EIGEN_STRONG_INLINE iterator end()
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.