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
00040
00041
00042 typedef std::deque<CRenderizablePtr> CListOpenGLObjects;
00043
00044
00045 DEFINE_SERIALIZABLE_PRE_CUSTOM_BASE( CSetOfObjects, CRenderizable )
00046
00047
00048
00049
00050
00051
00052
00053 class MRPTDLLIMPEXP CSetOfObjects : public CRenderizable
00054 {
00055 DEFINE_SERIALIZABLE( CSetOfObjects )
00056
00057 protected:
00058
00059
00060
00061 CListOpenGLObjects m_objects;
00062
00063 public:
00064
00065
00066
00067 template<class T> inline void insertCollection(const T &objs) {
00068 insert(objs.begin(),objs.end());
00069 }
00070
00071
00072
00073 void insert( const CRenderizablePtr &newObject );
00074
00075
00076
00077 template<class T_it> inline void insert(const T_it &begin,const T_it &end) {
00078 for (T_it it=begin;it!=end;it++) insert(*it);
00079 }
00080
00081
00082
00083 void render() const;
00084
00085
00086
00087 void clear();
00088
00089
00090
00091 size_t size() { return m_objects.size(); }
00092
00093
00094
00095
00096 void initializeAllTextures();
00097
00098
00099
00100
00101
00102
00103
00104
00105 template <typename T>
00106 typename T::SmartPtr getByClass( const size_t &ith = 0 ) const
00107 {
00108 MRPT_TRY_START;
00109 size_t foundCount = 0;
00110 const mrpt::utils::TRuntimeClassId* class_ID = T::classinfo;
00111 for (CListOpenGLObjects::const_iterator it = m_objects.begin();it!=m_objects.end();++it)
00112 if ( (*it).present() && (*it)->GetRuntimeClass()->derivedFrom( class_ID ) )
00113 if (foundCount++ == ith)
00114 return typename T::SmartPtr(*it);
00115
00116
00117 for (CListOpenGLObjects::const_iterator it=m_objects.begin();it!=m_objects.end();++it)
00118 {
00119 if ( (*it).present() && (*it)->GetRuntimeClass() == CLASS_ID_NAMESPACE(CSetOfObjects,mrpt::opengl))
00120 {
00121 typename T::SmartPtr o = CSetOfObjectsPtr(*it)->getByClass<T>(ith);
00122 if (o) return o;
00123 }
00124 }
00125
00126 return typename T::SmartPtr();
00127 MRPT_TRY_END;
00128 }
00129
00130
00131
00132
00133 void removeObject( const CRenderizablePtr &obj );
00134
00135
00136
00137 void dumpListOfObjects( utils::CStringList &lst );
00138
00139
00140
00141 virtual bool traceRay(const mrpt::poses::CPose3D &o,double &dist) const;
00142
00143 virtual void setColor(const mrpt::utils::TColorf &c);
00144 virtual void setColor(double r,double g,double b,double a=1);
00145 virtual void setColorR(const double r);
00146 virtual void setColorG(const double g);
00147 virtual void setColorB(const double b);
00148 virtual void setColorA(const double a);
00149
00150 bool contains(const CRenderizablePtr &obj) const;
00151
00152
00153 private:
00154
00155
00156 CSetOfObjects( );
00157
00158
00159 virtual ~CSetOfObjects();
00160 };
00161
00162
00163
00164 inline CSetOfObjectsPtr &operator<<(CSetOfObjectsPtr &s,const CRenderizablePtr &r) {
00165 s->insert(r);
00166 return s;
00167 }
00168
00169
00170
00171 template<class T> inline CSetOfObjectsPtr &operator<<(CSetOfObjectsPtr &o,const std::vector<T> &v) {
00172 o->insertCollection(v);
00173 return o;
00174 }
00175
00176
00177 }
00178
00179 }
00180
00181
00182 #endif