SHARE
TWEET

ubchannel

a guest Dec 15th, 2015 18,179 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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)
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top