DreieckListe.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #ifndef DreieckListe_H
  2. #define DreieckListe_H
  3. #include "Punkt.h"
  4. #include "Array.h"
  5. namespace Framework
  6. {
  7. template< typename T >
  8. //! Eine Ecke eines Dreiecks
  9. struct DreieckPunkt
  10. {
  11. T *punkt;
  12. Vec2<float> *textur;
  13. //! Konstruktor
  14. //! \param punkt Die Koordinate der Ecke
  15. //! \param textur Die Koordinate in der Textur
  16. DreieckPunkt( T *punkt, Vec2<float> *textur )
  17. {
  18. this->punkt = punkt;
  19. this->textur = textur;
  20. }
  21. //! Destruktor
  22. ~DreieckPunkt()
  23. {
  24. delete punkt;
  25. delete textur;
  26. }
  27. };
  28. template< typename T >
  29. //! Eine Liste von Dreiecken, wobei immer die Beiden letzten Punkte des vorheriegen Dreiecks mit dem nächsten Punkt ein neues Dreieck bilden
  30. class DreieckListe : public virtual ReferenceCounter
  31. {
  32. private:
  33. Array< DreieckPunkt< T > * > *punkte;
  34. public:
  35. //! Konstruktor
  36. DreieckListe()
  37. : ReferenceCounter()
  38. {
  39. punkte = new Array< DreieckPunkt< T > * >();
  40. }
  41. //! Destruktor
  42. ~DreieckListe()
  43. {
  44. int anz = punkte->getEintragAnzahl();
  45. for( int i = 0; i < anz; i++ )
  46. delete punkte->get( i );
  47. punkte->release();
  48. }
  49. //! Fügt der Liste einen Punkt hinzu
  50. //! \param p Die Koordinaten des Punktes
  51. //! \param textur Die Koordinaten in der Textur
  52. void addPunkt( T *p, Vec2<float> *textur )
  53. {
  54. punkte->add( new DreieckPunkt< T >( p, textur ) );
  55. }
  56. //! Löscht den letzten Punkt
  57. void removeLetztenPunkt()
  58. {
  59. int i = punkte->getEintragAnzahl() - 1;
  60. if( !punkte->hat( i ) )
  61. return;
  62. delete punkte->get( i );
  63. punkte->remove( i );
  64. }
  65. //! Löscht alle Ecken
  66. void lehren()
  67. {
  68. int anz = punkte->getEintragAnzahl();
  69. for( int i = 0; i < anz; i++ )
  70. delete punkte->get( i );
  71. punkte->leeren();
  72. }
  73. //! gibt die Anzahl der Dreiecke zurück
  74. int getDreieckAnzahl() const
  75. {
  76. return punkte->getEintragAnzahl() - 2;
  77. }
  78. //! Gibt zurück, ob eine Textur verwendet wird
  79. bool hatTextur() const
  80. {
  81. int anz = punkte->getEintragAnzahl();
  82. bool ret = 1;
  83. for( int i = 0; i < anz; i++ )
  84. {
  85. if( punkte->hat( i ) )
  86. ret &= punkte->get( i )->textur;
  87. }
  88. return ret;
  89. }
  90. //! Gibt die Liste mit Punkten zurück
  91. Array< DreieckPunkt< T > * > *zListe() const
  92. {
  93. return punkte;
  94. }
  95. };
  96. }
  97. #endif