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() const;
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).present() && (*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).present() && (*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
00136 virtual bool traceRay(const mrpt::poses::CPose3D &o,float &dist) const;
00137
00138 virtual void setColor(const mrpt::utils::TColorf &c);
00139 virtual void setColor(float r,float g,float b,float a=1);
00140 virtual void setColorR(const double r);
00141 virtual void setColorG(const double g);
00142 virtual void setColorB(const double b);
00143 virtual void setColorA(const double a);
00144
00145 bool contains(const CRenderizablePtr &obj) const;
00146
00147
00148 private:
00151 CSetOfObjects( );
00152
00154 virtual ~CSetOfObjects();
00155 };
00156
00157
00158 }
00159
00160 }
00161
00162
00163 #endif