00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef opengl_CSetOfObjects_H
00029 #define opengl_CSetOfObjects_H
00030
00031 #include <mrpt/opengl/CRenderizable.h>
00032
00033
00034 namespace mrpt
00035 {
00036 namespace opengl
00037 {
00038 class MRPTDLLIMPEXP CSetOfObjects;
00039
00042 typedef std::deque<CRenderizablePtr> CListOpenGLObjects;
00043
00044
00045 DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE( CSetOfObjects, CRenderizable )
00046
00047
00053 class MRPTDLLIMPEXP CSetOfObjects : public CRenderizable
00054 {
00055 DEFINE_SERIALIZABLE( CSetOfObjects )
00056
00057 protected:
00061 CListOpenGLObjects m_objects;
00062
00063 public:
00064
00067
00068 void insert( const CRenderizablePtr &newObject );
00069
00072 void render();
00073
00076 void clear();
00077
00080 size_t size() { return m_objects.size(); }
00081
00083 static CSetOfObjectsPtr Create()
00084 {
00085 return CSetOfObjectsPtr ( new CSetOfObjects() );
00086 }
00087
00088
00091 void initializeAllTextures();
00092
00100 template <typename T>
00101 typename T::SmartPtr getByClass( const size_t &ith = 0 ) const
00102 {
00103 MRPT_TRY_START;
00104 size_t foundCount = 0;
00105 const mrpt::utils::TRuntimeClassId* class_ID = T::classinfo;
00106 for (CListOpenGLObjects::const_iterator it = m_objects.begin();it!=m_objects.end();it++)
00107 if ( (*it)->GetRuntimeClass()->derivedFrom( class_ID ) )
00108 if (foundCount++ == ith)
00109 return typename T::SmartPtr(*it);
00110
00111
00112 for (CListOpenGLObjects::const_iterator it=m_objects.begin();it!=m_objects.end();it++)
00113 {
00114 if ((*it)->GetRuntimeClass() == CLASS_ID_NAMESPACE(CSetOfObjects,mrpt::opengl))
00115 {
00116 typename T::SmartPtr o = CSetOfObjectsPtr(*it)->getByClass<T>(ith);
00117 if (o) return o;
00118 }
00119 }
00120
00121 return typename T::SmartPtr();
00122 MRPT_TRY_END;
00123 }
00124
00125
00128 void removeObject( const CRenderizablePtr &obj );
00129
00132 void dumpListOfObjects( utils::CStringList &lst );
00133
00134
00135 private:
00138 CSetOfObjects( );
00139
00141 virtual ~CSetOfObjects();
00142 };
00143
00144
00145 }
00146
00147 }
00148
00149
00150 #endif