DreieckListe.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #ifndef DreieckListe_H
  2. #define DreieckListe_H
  3. #include "Array.h"
  4. #include "Punkt.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
  30. //! vorheriegen Dreiecks mit dem nächsten Punkt ein neues Dreieck bilden
  31. class DreieckListe : public virtual ReferenceCounter
  32. {
  33. private:
  34. Array<DreieckPunkt<T>*>* punkte;
  35. public:
  36. //! Konstruktor
  37. DreieckListe()
  38. : ReferenceCounter()
  39. {
  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)) 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)) ret &= punkte->get(i)->textur;
  86. }
  87. return ret;
  88. }
  89. //! Gibt die Liste mit Punkten zurück
  90. Array<DreieckPunkt<T>*>* zListe() const
  91. {
  92. return punkte;
  93. }
  94. };
  95. } // namespace Framework
  96. #endif