Advertisement
Guest User

ubchannel

a guest
Dec 15th, 2015
18,947
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.65 KB | None | 0 0
  1. //---------------------------------------------------------------------------
  2.  
  3.  
  4. #pragma hdrstop
  5.  
  6. #include "UBChannel.h"
  7. #include "UKGraphic.h"
  8. #include "UKernel.h"
  9. #include "UBsoDevice.h"
  10.  
  11. extern TKGraphic* MDGraphic_;
  12. extern TKernel* MDKernel_;
  13.  
  14. //---------------------------------------------------------------------------
  15. TBChannel::TBChannel( TBsoDevice* Owner, BYTE Num )
  16. {
  17. Parent_ = Owner;
  18. number_ = Num;
  19. PureDataRFZY_ = new TBsoData[ 6192 ];
  20. FilterDataRFZY_ = new TBsoData[ 808 ];
  21. PureDataOgib_ = new WORD[ 6192 ];
  22. pBitmap_ = new Graphics::TBitmap();
  23. pBitmap_->Width = 100;
  24. pBitmap_->Height = 2000;
  25. pBitmap_->Canvas->Brush->Color = clGreen;
  26. pBitmap_->Canvas->FillRect( Rect( 0, 0, 100, 2000 ));
  27. active_ = true;
  28. }
  29. //--------------------------------------------------------------------------
  30.  
  31. TBChannel::~TBChannel()
  32. {
  33. delete [] PureDataRFZY_;
  34. delete [] FilterDataRFZY_;
  35. delete [] PureDataOgib_;
  36. delete pBitmap_;
  37. }
  38. //---------------------------------------------------------------------------
  39.  
  40. void TBChannel::Data2Image_()
  41. {
  42. memcpy( &PureDataRFZY_[ 0 ], &PureDataRFZY_[ 60 ], sizeof( TBsoData ) * 3940 );
  43. pBitmap_->Canvas->Lock();
  44. try
  45. {
  46. float bg_cnt = ( 400. * (float)MDGraphic_->Contrast ) / 24000.;
  47. TColor* Colors_ = MDGraphic_->ColoredAlarm;
  48. int HTr = 2000;
  49.  
  50. int i = 0;
  51. try
  52. {
  53. while( i < 4000 )
  54. {
  55. WORD colorcnt = (int)( PureDataRFZY_[ i ].r_fr * bg_cnt );
  56. if( colorcnt > 400 )
  57. colorcnt = 399;
  58.  
  59. pBitmap_->Canvas->Pixels[ 0 ][ HTr-- ] = Colors_[ colorcnt ]; //рисуем сами
  60. i += 2;
  61. }
  62.  
  63. }
  64. catch( ... )
  65. {
  66. i;
  67. }
  68.  
  69. pBitmap_->Canvas->CopyRect( Rect( 1, 0, 100, 2000),
  70. pBitmap_->Canvas,
  71. Rect( 0, 0, 99, 2000) );
  72. }
  73. catch(...)
  74. {
  75. int h=0;
  76. }
  77. pBitmap_->Canvas->Unlock();
  78. }
  79. //---------------------------------------------------------------------------
  80. void TBChannel::CompressData_()
  81. {
  82. int local_treshold = MDKernel_->AlarmTreshold,
  83. r_pos,
  84. max,
  85. kl_max;
  86.  
  87. memset( FilterDataRFZY_, 0, sizeof( TBsoData ) * 808 );
  88.  
  89. r_pos = 20;
  90. while( r_pos < 4000 )
  91. {
  92. if( PureDataRFZY_[ r_pos ].r_fr > local_treshold )
  93. {
  94. max = r_pos;
  95. kl_max = 0;
  96.  
  97. while( kl_max++ < 5 )
  98. {
  99. if( PureDataRFZY_[ max ].r_fr < PureDataRFZY_[ r_pos ].r_fr )
  100. max = r_pos;
  101. r_pos++;
  102. }
  103.  
  104. FilterDataRFZY_[ max / 5 ] = PureDataRFZY_[ max ]; //попали
  105. }
  106. r_pos++;
  107. }
  108. }
  109. //----------------------------------------------------------------------------
  110. const double RAD_1G = M_PI / 180.; //1 градус в радианах
  111. void TBChannel::SearchAlarmPnts_()
  112. {
  113. predvpoints_.clear();
  114. int local_alarm_treshold = MDKernel_->AlarmTreshold; //получение порога тревоги
  115. int endpoint = 4000 * Parent_->DrawRadius / Parent_->RadiusImg;
  116.  
  117. TDateTime RightNow = Time();
  118. unsigned short Hours, Minutes, Seconds, Milliseconds;
  119. RightNow.DecodeTime(&Hours, &Minutes, &Seconds, &Milliseconds);
  120. bool hungrytest = Hours && Hours > 5 && Hours < 6 && Minutes > 0 && Minutes < 30; //WTF
  121.  
  122. int addedpointcnt=0;
  123. for( int posrt = 0; posrt < endpoint; posrt+=2 )
  124. {
  125. if( addedpointcnt > MDKernel_->MaxAlarmPointOnChannel )
  126. return;
  127.  
  128. if( PureDataRFZY_[ posrt ].r_fr < local_alarm_treshold )
  129. continue;
  130.  
  131. int advangle = 60 - ( PureDataRFZY_[ posrt ].angle_y + 30 ) % 60;
  132.  
  133. CreatePoint_( posrt, advangle, hungrytest ? PureDataRFZY_[ posrt ].r_fr : random(100) );
  134.  
  135. addedpointcnt++;
  136. }
  137.  
  138. BYTE maxpnt = predvpoints_.size();
  139. for( BYTE cnt=0; cnt < maxpnt; cnt++ )
  140. MDKernel_->AddPoint( &predvpoints_[ cnt ] );
  141. }
  142.  
  143. //--------------------------------------------------------------------------
  144.  
  145. void TBChannel::CreatePoint_( int Pos, float Angle, int Color )
  146. {
  147. float real_gr = ( //вычисление угла точки
  148. -Parent_->BeginAngle - (float)number_ * Parent_->DegradeChanel
  149. -Parent_->OnePointRo * ( (float)Angle ) //переложение точки
  150. ) * RAD_1G;
  151.  
  152. float tmp_calc = (float)(Parent_->RadiusImg * Pos) / 4000.; //вычисление реального радиуса
  153. //добавление точки в ядро бработки
  154. TBsoPoint ad_point;
  155. ad_point = PureDataRFZY_[ Pos ];
  156. ad_point.x = Parent_->Xc - tmp_calc * sin( real_gr ); //вычисление х
  157. ad_point.y = Parent_->Yc - tmp_calc * cos( real_gr );
  158.  
  159. if( Color > 400 )
  160. Color = 400; //вычисление у
  161.  
  162. ad_point.Color = MDGraphic_->ColoredAlarm[ Color ];
  163. ad_point.pBso = Parent_;
  164. ad_point.nchannel = number_;
  165. ad_point.pos = Pos;
  166.  
  167. predvpoints_.push_back( ad_point );
  168. }
  169. //--------------------------------------------------------------------------
  170.  
  171. void TBChannel::Show( NK_ACTOR cmdf, TChartSeries* Series )
  172. {
  173. float point_to_metre = (float)Parent_->VisibleRadius / 4000.;
  174. int offset_rt = number_ * MDGraphic_->DFCSeriesOffset;
  175.  
  176. DynamicArray< double > dagx;
  177. DynamicArray< double > dagy;
  178. dagx.Length = Parent_->NumberPointerRdn + 2;
  179. dagy.Length = Parent_->NumberPointerRdn + 2;
  180.  
  181. switch ( cmdf )
  182. {
  183. case DMFV_DATA_TEMPOGIB:
  184. for( int rt = 0; rt < Parent_->NumberPointerRdn; rt++ )
  185. {
  186. dagx[ rt ] = rt * point_to_metre;
  187. dagy[ rt ] = PureDataOgib_[ rt ] + offset_rt + dop_offset_;
  188. }
  189. break;
  190. case DMFV_DATA_PHASER:
  191. for( int rt = 0; rt < Parent_->NumberPointerRdn; rt++ )
  192. {
  193. dagx[ rt ] = rt * point_to_metre;
  194. dagy[ rt ] = PureDataRFZY_[ rt ].r_fr + offset_rt + dop_offset_;
  195. }
  196. break;
  197. case DMFV_DATA_ANGLEZ:
  198. for( int rt = 0; rt < Parent_->NumberPointerRdn; rt++ )
  199. {
  200. dagx[ rt ] = rt * point_to_metre;
  201. dagy[ rt ] = PureDataRFZY_[ rt ].angle_z + offset_rt + dop_offset_;
  202. }
  203. break;
  204. case DMFV_DATA_ANGLEY:
  205. for( int rt = 0; rt < Parent_->NumberPointerRdn; rt++ )
  206. {
  207. dagx[ rt ] = rt * point_to_metre;
  208. dagy[ rt ] = PureDataRFZY_[ rt ].angle_y + offset_rt + dop_offset_;
  209. }
  210. break;
  211. default:
  212. return;
  213. }
  214.  
  215. int length = dagy.Length;
  216. for( DWORD rt = 20; rt < length; rt++ )
  217. Series->AddXY( dagx[ rt ], dagy[ rt ] );
  218.  
  219. Series->Repaint();
  220. }
  221. //---------------------------------------------------------------------------
  222.  
  223. void TBChannel::Clear()
  224. {
  225. memset( PureDataOgib_, 0, 4096 * sizeof( WORD ) );
  226. memset( PureDataRFZY_, 0, 4096 * sizeof( TBsoData ) );
  227. }
  228. //---------------------------------------------------------------------------
  229. #pragma package(smart_init)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement