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 CRenderizablePtr getByName( const std::string &str );
00101
00102
00103
00104
00105
00106
00107
00108
00109 template <typename T>
00110 typename T::SmartPtr getByClass( const size_t &ith = 0 ) const
00111 {
00112 MRPT_START;
00113 size_t foundCount = 0;
00114 const mrpt::utils::TRuntimeClassId* class_ID = T::classinfo;
00115 for (CListOpenGLObjects::const_iterator it = m_objects.begin();it!=m_objects.end();++it)
00116 if ( (*it).present() && (*it)->GetRuntimeClass()->derivedFrom( class_ID ) )
00117 if (foundCount++ == ith)
00118 return typename T::SmartPtr(*it);
00119
00120
00121 for (CListOpenGLObjects::const_iterator it=m_objects.begin();it!=m_objects.end();++it)
00122 {
00123 if ( (*it).present() && (*it)->GetRuntimeClass() == CLASS_ID_NAMESPACE(CSetOfObjects,mrpt::opengl))
00124 {
00125 typename T::SmartPtr o = CSetOfObjectsPtr(*it)->getByClass<T>(ith);
00126 if (o) return o;
00127 }
00128 }
00129
00130 return typename T::SmartPtr();
00131 MRPT_END;
00132 }
00133
00134
00135
00136
00137 void removeObject( const CRenderizablePtr &obj );
00138
00139
00140
00141 void dumpListOfObjects( utils::CStringList &lst );
00142
00143
00144
00145 virtual bool traceRay(const mrpt::poses::CPose3D &o,double &dist) const;
00146
00147 virtual void setColor(const mrpt::utils::TColorf &c);
00148 virtual void setColor(double r,double g,double b,double a=1);
00149 virtual void setColorR(const double r);
00150 virtual void setColorG(const double g);
00151 virtual void setColorB(const double b);
00152 virtual void setColorA(const double a);
00153
00154 bool contains(const CRenderizablePtr &obj) const;
00155
00156
00157 private:
00158
00159
00160 CSetOfObjects( );
00161
00162
00163 virtual ~CSetOfObjects();
00164 };
00165
00166
00167
00168 inline CSetOfObjectsPtr &operator<<(CSetOfObjectsPtr &s,const CRenderizablePtr &r) {
00169 s->insert(r);
00170 return s;
00171 }
00172
00173
00174
00175 template<class T> inline CSetOfObjectsPtr &operator<<(CSetOfObjectsPtr &o,const std::vector<T> &v) {
00176 o->insertCollection(v);
00177 return o;
00178 }
00179
00180
00181 }
00182
00183 }
00184
00185
00186 #endif