123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- #ifndef DreieckListe_H
- #define DreieckListe_H
- #include "Punkt.h"
- #include "Array.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;
- }
- };
- }
- #endif
|