#ifndef DreieckListe_H #define DreieckListe_H #include "Array.h" #include "Punkt.h" namespace Framework { template //! Eine Ecke eines Dreiecks struct DreieckPunkt { T* punkt; Vec2* textur; //! Konstruktor //! \param punkt Die Koordinate der Ecke //! \param textur Die Koordinate in der Textur DreieckPunkt(T* punkt, Vec2* textur) { this->punkt = punkt; this->textur = textur; } //! Destruktor ~DreieckPunkt() { delete punkt; delete textur; } }; template //! Eine Liste von Dreiecken, wobei immer die Beiden letzten Punkte des //! vorheriegen Dreiecks mit dem nächsten Punkt ein neues Dreieck bilden class DreieckListe : public virtual ReferenceCounter { private: Array*>* punkte; public: //! Konstruktor DreieckListe() : ReferenceCounter() { punkte = new Array*>(); } //! Destruktor ~DreieckListe() { int anz = punkte->getEintragAnzahl(); for (int i = 0; i < anz; i++) delete punkte->get(i); punkte->release(); } //! Fügt der Liste einen Punkt hinzu //! \param p Die Koordinaten des Punktes //! \param textur Die Koordinaten in der Textur void addPunkt(T* p, Vec2* textur) { punkte->add(new DreieckPunkt(p, textur)); } //! Löscht den letzten Punkt void removeLetztenPunkt() { int i = punkte->getEintragAnzahl() - 1; if (!punkte->hat(i)) return; delete punkte->get(i); punkte->remove(i); } //! Löscht alle Ecken void lehren() { int anz = punkte->getEintragAnzahl(); for (int i = 0; i < anz; i++) delete punkte->get(i); punkte->leeren(); } //! gibt die Anzahl der Dreiecke zurück int getDreieckAnzahl() const { return punkte->getEintragAnzahl() - 2; } //! Gibt zurück, ob eine Textur verwendet wird bool hatTextur() const { int anz = punkte->getEintragAnzahl(); bool ret = 1; for (int i = 0; i < anz; i++) { if (punkte->hat(i)) ret &= punkte->get(i)->textur; } return ret; } //! Gibt die Liste mit Punkten zurück Array*>* zListe() const { return punkte; } }; } // namespace Framework #endif