123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- #ifndef DreieckListe_H
- #define DreieckListe_H
- #include "Array.h"
- #include "Punkt.h"
- namespace Framework
- {
- template<typename T>
- //! Eine Ecke eines Dreiecks
- struct DreieckPunkt
- {
- T* punkt;
- Vec2<float>* textur;
- //! Konstruktor
- //! \param punkt Die Koordinate der Ecke
- //! \param textur Die Koordinate in der Textur
- DreieckPunkt(T* punkt, Vec2<float>* textur)
- {
- this->punkt = punkt;
- this->textur = textur;
- }
- //! Destruktor
- ~DreieckPunkt()
- {
- delete punkt;
- delete textur;
- }
- };
- template<typename T>
- //! 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<DreieckPunkt<T>*>* punkte;
- public:
- //! Konstruktor
- DreieckListe()
- : ReferenceCounter()
- {
- punkte = new Array<DreieckPunkt<T>*>();
- }
- //! 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<float>* textur)
- {
- punkte->add(new DreieckPunkt<T>(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<DreieckPunkt<T>*>* zListe() const
- {
- return punkte;
- }
- };
- } // namespace Framework
- #endif
|