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