/********************************************************** * class Group3D * * 概要: CompositeパターンのComposite。 * Compornentの保持にはSTLのlistを使用。 * **********************************************************/ #ifndef ATS_COMPOSITE_H #define ATS_COMPOSITE_H #include #include "ats_point.h" #include "ats_component.h" namespace ats { template class Group3D : public Obj3D { protected: std::list* > m_list; public: Group3D(); virtual ~Group3D(); // 移動 /*virtual void translate(Point&); // 回転(軸, 角度) virtual void rotate(Point&, TFLOAT); // スケール virtual void scale(Point&); // スライス */ virtual void Draw(); virtual void Add(Obj3D*); virtual void Remove(std::list*>::iterator); virtual std::list*>::iterator Begin(); virtual std::list*>::iterator End(); virtual int Size() const; }; typedef Group3D Group3DD; // コンストラクタ・デストラクタ ---------------------------------------- template Group3D::Group3D() { } template Group3D::~Group3D() { /*using namespace std; typedef list*>::iterator ObjectItr; // 保持するポインタをすべて開放。 for(ObjectItr i = m_list.begin(); i != m_list.end(); i++){ delete *i; }*/ } /* template void Group3D::translate(Point& a) { std::list*>::iterator i; for(i = m_list.begin(); i != m_list.end(); i++){ (*i)->translate(a); } } template void Group3D::rotate(Point& vec, TFLOAT a) { std::list*>::iterator i; for(i = m_list.begin(); i != m_list.end(); i++){ (*i)->rotate(vec, a); } } template void Group3D::scale(Point& a) { std::list*>::iterator i; for(i = m_list.begin(); i == m_list.end(); i++){ (*i)->scale(a); } } */ template void Group3D::Draw() { std::list*>::iterator i; for(i = m_list.begin(); i != m_list.end(); i++){ (*i)->Draw(); } } template void Group3D::Add(Obj3D* obj) { m_list.push_back(obj); } template void Group3D::Remove(std::list*>::iterator a) { m_list.erase(a); } template std::list*>::iterator Group3D::Begin() { return m_list.begin(); } template std::list*>::iterator Group3D::End() { return m_list.end(); } template int Group3D::Size() const { return m_list.size(); } } #endif // #ifndef ATS_COMPOSITE_H