M2DVorschau.cpp 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. #include "M2DVorschau.h"
  2. #include "Model2D.h"
  3. #include "MausEreignis.h"
  4. #include "Rahmen.h"
  5. #include "AlphaFeld.h"
  6. #include "ToolTip.h"
  7. #include "Globals.h"
  8. #include "Bild.h"
  9. using namespace Framework;
  10. // Inhalt der M2DVorschau Klasse aus M2DVorschau.h
  11. // Konstruktor
  12. M2DVorschau::M2DVorschau()
  13. : ZeichnungHintergrund()
  14. {
  15. mdl = 0;
  16. mx = -1;
  17. my = -1;
  18. af = 0;
  19. ram = 0;
  20. }
  21. // Destruktor
  22. M2DVorschau::~M2DVorschau()
  23. {
  24. if( mdl )
  25. mdl->release();
  26. if( ram )
  27. ram->release();
  28. if( af )
  29. af->release();
  30. }
  31. // nicht constant
  32. void M2DVorschau::setModel2DZ( Model2D *mdl )
  33. {
  34. if( this->mdl )
  35. this->mdl->release();
  36. this->mdl = mdl;
  37. rend = 1;
  38. }
  39. void M2DVorschau::setModel2D( Model2DData *mdl )
  40. {
  41. if( !this->mdl )
  42. this->mdl = new Model2D();
  43. this->mdl->setModel( mdl );
  44. rend = 1;
  45. }
  46. void M2DVorschau::doMausEreignis( MausEreignis &me )
  47. {
  48. if( hatStyleNicht( Style::Erlaubt ) || hatStyleNicht( Style::Sichtbar ) )
  49. {
  50. mausIn = 0;
  51. if( toolTip )
  52. toolTip->setMausIn( 0 );
  53. return;
  54. }
  55. if( me.verarbeitet || ( !( me.mx >= pos.x && me.mx <= pos.x + gr.x && me.my >= pos.y && me.my <= pos.y + gr.y ) && me.id != ME_Leaves ) )
  56. {
  57. if( mausIn )
  58. {
  59. mausIn = 0;
  60. if( toolTip )
  61. toolTip->setMausIn( 0 );
  62. MausEreignis me2;
  63. me2.id = ME_Leaves;
  64. me2.mx = me.mx;
  65. me2.my = me.my;
  66. me2.verarbeitet = 0;
  67. doMausEreignis( me2 );
  68. }
  69. return;
  70. }
  71. if( !mausIn && me.id != ME_Leaves )
  72. {
  73. mausIn = 1;
  74. if( toolTip )
  75. toolTip->setMausIn( 1 );
  76. MausEreignis me2;
  77. me2.id = ME_Betritt;
  78. me2.mx = me.mx;
  79. me2.my = me.my;
  80. me2.verarbeitet = 0;
  81. doMausEreignis( me2 );
  82. }
  83. me.mx -= pos.x, me.my -= pos.y;
  84. if( mak && mak( makParam, this, me ) )
  85. {
  86. if( hatStyle( Style::UsrScale ) )
  87. {
  88. if( mdl && me.id == ME_UScroll )
  89. mdl->addSize( 0.01f );
  90. if( mdl && me.id == ME_DScroll )
  91. mdl->addSize( -0.01f );
  92. }
  93. if( me.id == ME_RLinks || me.id == ME_RRechts || me.id == ME_Leaves )
  94. {
  95. mx = -1;
  96. my = -1;
  97. }
  98. if( mdl && me.id == ME_Bewegung )
  99. {
  100. if( mx != -1 && my != -1 )
  101. {
  102. if( getMausStand( M_Links ) && hatStyle( Style::UsrMove ) )
  103. mdl->setPosition( mdl->getPosition() + Punkt( me.mx - mx, me.my - my ) );
  104. if( getMausStand( M_Rechts ) && hatStyle( Style::UsrRot ) )
  105. {
  106. if( me.mx > gr.x / 2 )
  107. mdl->addDrehung( 0.01f * (float)( me.my - my ) );
  108. else
  109. mdl->addDrehung( -0.01f * (float)( me.my - my ) );
  110. if( me.my > gr.y / 2 )
  111. mdl->addDrehung( -0.01f * (float)( me.mx - mx ) );
  112. else
  113. mdl->addDrehung( 0.01f * (float)( me.mx - mx ) );
  114. }
  115. mx = me.mx;
  116. my = me.my;
  117. }
  118. }
  119. if( me.id == ME_PLinks || me.id == ME_PRechts )
  120. {
  121. mx = me.mx;
  122. my = me.my;
  123. }
  124. if( nMak && me.verarbeitet )
  125. me.verarbeitet = nMak( nmakParam, this, me );
  126. }
  127. me.mx += pos.x, me.my += pos.y;
  128. }
  129. bool M2DVorschau::tick( double tv )
  130. {
  131. rend |= mdl ? mdl->tick( tv ) : 0;
  132. rend |= af ? af->tick( tv ) : 0;
  133. rend |= ram ? ram->tick( tv ) : 0;
  134. return ZeichnungHintergrund::tick( tv );
  135. }
  136. void M2DVorschau::render( Bild &rb )
  137. {
  138. removeStyle( Style::VScroll | Style::HScroll );
  139. if( hatStyleNicht( Style::Sichtbar ) )
  140. return;
  141. ZeichnungHintergrund::render( rb );
  142. if( !rb.setDrawOptions( innenPosition, innenSize ) )
  143. return;
  144. if( mdl )
  145. {
  146. int rbr = rahmen && hatStyle( Style::Rahmen ) ? rahmen->getRBreite() : 0;
  147. rb.addScrollOffset( -gr.x / 2 + rbr, -gr.y / 2 + rbr );
  148. mdl->render( rb );
  149. }
  150. rb.releaseDrawOptions();
  151. }
  152. // constant
  153. Model2D *M2DVorschau::zModel() const
  154. {
  155. return mdl;
  156. }
  157. Model2D *M2DVorschau::getModel() const
  158. {
  159. return mdl ? (Model2D*)mdl->getThis() : 0;
  160. }
  161. Zeichnung *M2DVorschau::dublizieren() const
  162. {
  163. M2DVorschau *ret = new M2DVorschau();
  164. if( mdl )
  165. ret->setModel2D( mdl->getModel() );
  166. if( rahmen )
  167. ret->setRahmenZ( (Rahmen*)rahmen->dublizieren() );
  168. if( hintergrundFeld )
  169. ret->setAlphaFeldZ( (AlphaFeld*)hintergrundFeld->dublizieren() );
  170. ret->setHintergrundFarbe( bgF );
  171. return ret;
  172. }