Model3DList.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #include "Model3DList.h"
  2. #include "Model3D.h"
  3. #include "Text.h"
  4. using namespace Framework;
  5. const char* Standart3DTypes::cube = "f_würfel";
  6. const char* Standart3DTypes::texturModel = "f_texturModel";
  7. // Inhalt der Model3DList Klasse
  8. // Konstruktor
  9. Model3DList::Model3DList()
  10. : ReferenceCounter()
  11. {
  12. models = new RCArray< Model3DData >();
  13. names = new RCArray< Text >();
  14. }
  15. // Destruktor
  16. Model3DList::~Model3DList()
  17. {
  18. models->release();
  19. names->release();
  20. }
  21. // Fügt der Liste ein Model Hinzu
  22. // mdl: Das Model
  23. // name: Der name, unter dem das Model in der Liste gespeichert wird
  24. bool Model3DList::addModel( Model3DData* mdl, const char* name )
  25. {
  26. for( auto i : *names )
  27. {
  28. if( i->istGleich( name ) )
  29. {
  30. mdl->release();
  31. return 0;
  32. }
  33. }
  34. models->add( mdl );
  35. names->add( new Text( name ) );
  36. return 1;
  37. }
  38. // Entfernt ein Model aus der Liste
  39. // name: Der Name des Models
  40. void Model3DList::removeModel( const char* name )
  41. {
  42. int index = 0;
  43. for( auto i : *names )
  44. {
  45. if( i->istGleich( name ) )
  46. {
  47. names->remove( index );
  48. models->remove( index );
  49. return;
  50. }
  51. index++;
  52. }
  53. }
  54. // Überprüft, ob unter einem bestimmten Namen ein Model abgespeichert wurde
  55. // name: Der Name
  56. // return: true, wenn ein Model mit dem Namen existiert
  57. bool Model3DList::hatModel( const char* name ) const
  58. {
  59. for( auto i : *names )
  60. {
  61. if( i->istGleich( name ) )
  62. {
  63. return 1;
  64. }
  65. }
  66. return 0;
  67. }
  68. // Gibt ein bestimmtes Model zurück
  69. // name: Der Name des Models
  70. Model3DData* Model3DList::getModel( const char* name ) const
  71. {
  72. int index = 0;
  73. for( auto i : *names )
  74. {
  75. if( i->istGleich( name ) )
  76. {
  77. return models->get( index );
  78. }
  79. index++;
  80. }
  81. return 0;
  82. }
  83. // Gibt ein bestimmtes Model ohne erhöhten Reference Counter zurück
  84. // name: Der Name des Models
  85. Model3DData* Model3DList::zModel( const char* name ) const
  86. {
  87. int index = 0;
  88. for( auto i : *names )
  89. {
  90. if( i->istGleich( name ) )
  91. {
  92. return models->z( index );
  93. }
  94. index++;
  95. }
  96. return 0;
  97. }
  98. //! remove All models
  99. DLLEXPORT void Model3DList::removeAll()
  100. {
  101. models->leeren();
  102. names->leeren();
  103. }