M2DVorschau.cpp 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. void M2DVorschau::doMausEreignis( MausEreignis &me, bool userRet )
  32. {
  33. if( hatStyleNicht( Style::Erlaubt ) || !userRet )
  34. return;
  35. if( hatStyle( Style::UsrScale ) )
  36. {
  37. if( mdl && me.id == ME_UScroll )
  38. mdl->addSize( 0.01f );
  39. if( mdl && me.id == ME_DScroll )
  40. mdl->addSize( -0.01f );
  41. }
  42. if( me.id == ME_RLinks || me.id == ME_RRechts || me.id == ME_Leaves )
  43. {
  44. mx = -1;
  45. my = -1;
  46. }
  47. if( mdl && me.id == ME_Bewegung )
  48. {
  49. if( mx != -1 && my != -1 )
  50. {
  51. if( getMausStand( M_Links ) && hatStyle( Style::UsrMove ) )
  52. mdl->setPosition( mdl->getPosition() + Punkt( me.mx - mx, me.my - my ) );
  53. if( getMausStand( M_Rechts ) && hatStyle( Style::UsrRot ) )
  54. {
  55. if( me.mx > gr.x / 2 )
  56. mdl->addDrehung( 0.01f * (float)( me.my - my ) );
  57. else
  58. mdl->addDrehung( -0.01f * (float)( me.my - my ) );
  59. if( me.my > gr.y / 2 )
  60. mdl->addDrehung( -0.01f * (float)( me.mx - mx ) );
  61. else
  62. mdl->addDrehung( 0.01f * (float)( me.mx - mx ) );
  63. }
  64. mx = me.mx;
  65. my = me.my;
  66. }
  67. }
  68. if( me.id == ME_PLinks || me.id == ME_PRechts )
  69. {
  70. mx = me.mx;
  71. my = me.my;
  72. }
  73. me.verarbeitet = 1;
  74. }
  75. // nicht constant
  76. void M2DVorschau::setModel2DZ( Model2D *mdl )
  77. {
  78. if( this->mdl )
  79. this->mdl->release();
  80. this->mdl = mdl;
  81. rend = 1;
  82. }
  83. void M2DVorschau::setModel2D( Model2DData *mdl )
  84. {
  85. if( !this->mdl )
  86. this->mdl = new Model2D();
  87. this->mdl->setModel( mdl );
  88. rend = 1;
  89. }
  90. bool M2DVorschau::tick( double tv )
  91. {
  92. rend |= mdl ? mdl->tick( tv ) : 0;
  93. rend |= af ? af->tick( tv ) : 0;
  94. rend |= ram ? ram->tick( tv ) : 0;
  95. return ZeichnungHintergrund::tick( tv );
  96. }
  97. void M2DVorschau::render( Bild &rb )
  98. {
  99. removeStyle( Style::VScroll | Style::HScroll );
  100. if( hatStyleNicht( Style::Sichtbar ) )
  101. return;
  102. ZeichnungHintergrund::render( rb );
  103. if( !rb.setDrawOptions( innenPosition, innenSize ) )
  104. return;
  105. if( mdl )
  106. {
  107. int rbr = rahmen && hatStyle( Style::Rahmen ) ? rahmen->getRBreite() : 0;
  108. rb.addScrollOffset( -gr.x / 2 + rbr, -gr.y / 2 + rbr );
  109. mdl->render( rb );
  110. }
  111. rb.releaseDrawOptions();
  112. }
  113. // constant
  114. Model2D *M2DVorschau::zModel() const
  115. {
  116. return mdl;
  117. }
  118. Model2D *M2DVorschau::getModel() const
  119. {
  120. return mdl ? dynamic_cast<Model2D *>( mdl->getThis() ) : 0;
  121. }
  122. Zeichnung *M2DVorschau::dublizieren() const
  123. {
  124. M2DVorschau *ret = new M2DVorschau();
  125. if( mdl )
  126. ret->setModel2D( mdl->getModel() );
  127. if( rahmen )
  128. ret->setRahmenZ( (Rahmen *)rahmen->dublizieren() );
  129. if( hintergrundFeld )
  130. ret->setAlphaFeldZ( (AlphaFeld *)hintergrundFeld->dublizieren() );
  131. ret->setHintergrundFarbe( bgF );
  132. return ret;
  133. }