DreieckListe.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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
  31. {
  32. private:
  33. Array< DreieckPunkt< T >* > *punkte;
  34. int ref;
  35. public:
  36. //! Konstruktor
  37. DreieckListe()
  38. {
  39. ref = 1;
  40. punkte = new Array< DreieckPunkt< T >* >();
  41. }
  42. //! Destruktor
  43. ~DreieckListe()
  44. {
  45. int anz = punkte->getEintragAnzahl();
  46. for( int i = 0; i < anz; i++ )
  47. delete punkte->get( i );
  48. punkte->release();
  49. }
  50. //! Fügt der Liste einen Punkt hinzu
  51. //! \param p Die Koordinaten des Punktes
  52. //! \param textur Die Koordinaten in der Textur
  53. void addPunkt( T *p, Vec2<float> *textur )
  54. {
  55. punkte->add( new DreieckPunkt< T >( p, textur ) );
  56. }
  57. //! Löscht den letzten Punkt
  58. void removeLetztenPunkt()
  59. {
  60. int i = punkte->getEintragAnzahl() - 1;
  61. if( !punkte->hat( i ) )
  62. return;
  63. delete punkte->get( i );
  64. punkte->remove( i );
  65. }
  66. //! Löscht alle Ecken
  67. void lehren()
  68. {
  69. int anz = punkte->getEintragAnzahl();
  70. for( int i = 0; i < anz; i++ )
  71. delete punkte->get( i );
  72. punkte->leeren();
  73. }
  74. //! gibt die Anzahl der Dreiecke zurück
  75. int getDreieckAnzahl() const
  76. {
  77. return punkte->getEintragAnzahl() - 2;
  78. }
  79. //! Gibt zurück, ob eine Textur verwendet wird
  80. bool hatTextur() const
  81. {
  82. int anz = punkte->getEintragAnzahl();
  83. bool ret = 1;
  84. for( int i = 0; i < anz; i++ )
  85. {
  86. if( punkte->hat( i ) )
  87. ret &= punkte->get( i )->textur;
  88. }
  89. return ret;
  90. }
  91. //! Gibt die Liste mit Punkten zurück
  92. Array< DreieckPunkt< T >* > *zListe() const
  93. {
  94. return punkte;
  95. }
  96. //! Erhöht den Reference Counting Zähler.
  97. //! \return this.
  98. DreieckListe *getThis()
  99. {
  100. ref++;
  101. return this;
  102. }
  103. //! Verringert den Reference Counting Zähler. Wenn der Zähler 0 erreicht, wird das Objekt automatisch gelöscht.
  104. //! \return 0.
  105. DreieckListe *release()
  106. {
  107. ref--;
  108. if( !ref )
  109. delete this;
  110. return 0;
  111. }
  112. };
  113. }
  114. #endif