home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / RealTime Graphics ActiveX / DATA.3 / Examples / CPP / Meters / MetersView.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-17  |  8.3 KB  |  318 lines

  1. // MetersView.cpp : implementation of the CMetersView class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Meters.h"
  6.  
  7. #include "MetersDoc.h"
  8. #include "MetersView.h"
  9. #include "ctwxdef.h"
  10.  
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16.  
  17. /////////////////////////////////////////////////////////////////////////////
  18. // CMetersView
  19.  
  20. IMPLEMENT_DYNCREATE(CMetersView, CFormView)
  21.  
  22. BEGIN_MESSAGE_MAP(CMetersView, CFormView)
  23.     //{{AFX_MSG_MAP(CMetersView)
  24.         // NOTE - the ClassWizard will add and remove mapping macros here.
  25.         //    DO NOT EDIT what you see in these blocks of generated code!
  26.     //}}AFX_MSG_MAP
  27.     // Standard printing commands
  28.     ON_COMMAND(ID_FILE_PRINT, CFormView::OnFilePrint)
  29.     ON_COMMAND(ID_FILE_PRINT_DIRECT, CFormView::OnFilePrint)
  30.     ON_COMMAND(ID_FILE_PRINT_PREVIEW, CFormView::OnFilePrintPreview)
  31. END_MESSAGE_MAP()
  32.  
  33. /////////////////////////////////////////////////////////////////////////////
  34. // CMetersView construction/destruction
  35.  
  36. CMetersView::CMetersView()
  37.     : CFormView(CMetersView::IDD)
  38. {
  39.     //{{AFX_DATA_INIT(CMetersView)
  40.         // NOTE: the ClassWizard will add member initialization here
  41.     //}}AFX_DATA_INIT
  42.     // TODO: add construction code here
  43.  
  44. }
  45.  
  46. CMetersView::~CMetersView()
  47. {
  48. }
  49.  
  50. void CMetersView::DoDataExchange(CDataExchange* pDX)
  51. {
  52.     CFormView::DoDataExchange(pDX);
  53.     //{{AFX_DATA_MAP(CMetersView)
  54.     DDX_Control(pDX, IDC_RTMETERXCTRL1, m_RTMeter1);
  55.     DDX_Control(pDX, IDC_RTMETERXCTRL2, m_RTMeter2);
  56.     DDX_Control(pDX, IDC_RTMETERXCTRL3, m_RTMeter3);
  57.     //}}AFX_DATA_MAP
  58. }
  59.  
  60. BOOL CMetersView::PreCreateWindow(CREATESTRUCT& cs)
  61. {
  62.     // TODO: Modify the Window class or styles here by modifying
  63.     //  the CREATESTRUCT cs
  64.  
  65.     return CFormView::PreCreateWindow(cs);
  66. }
  67.  
  68. /////////////////////////////////////////////////////////////////////////////
  69. // CMetersView printing
  70.  
  71. BOOL CMetersView::OnPreparePrinting(CPrintInfo* pInfo)
  72. {
  73.     // default preparation
  74.     return DoPreparePrinting(pInfo);
  75. }
  76.  
  77. void CMetersView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  78. {
  79.     // TODO: add extra initialization before printing
  80. }
  81.  
  82. void CMetersView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
  83. {
  84.     // TODO: add cleanup after printing
  85. }
  86.  
  87. void CMetersView::OnPrint(CDC* pDC, CPrintInfo*)
  88. {
  89.     // TODO: add code to print the controls
  90. }
  91.  
  92. /////////////////////////////////////////////////////////////////////////////
  93. // CMetersView diagnostics
  94.  
  95. #ifdef _DEBUG
  96. void CMetersView::AssertValid() const
  97. {
  98.     CFormView::AssertValid();
  99. }
  100.  
  101. void CMetersView::Dump(CDumpContext& dc) const
  102. {
  103.     CFormView::Dump(dc);
  104. }
  105.  
  106. CMetersDoc* CMetersView::GetDocument() // non-debug version is inline
  107. {
  108.     ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMetersDoc)));
  109.     return (CMetersDoc*)m_pDocument;
  110. }
  111. #endif //_DEBUG
  112.  
  113. /////////////////////////////////////////////////////////////////////////////
  114. // CMetersView message handlers
  115.  
  116.  
  117. void CMetersView::BuildGraph1()
  118. {
  119.  
  120.     m_RTMeter1.SetMeterType (RTMETER_NEEDLE);
  121.     m_RTMeter1.SetMeterNumChannels (2);
  122.  
  123.     //CENTER AND DIAMETER
  124.     m_RTMeter1.SetMeterCenterX (0.5);
  125.     m_RTMeter1.SetMeterCenterY (0.4);
  126.     m_RTMeter1.SetMeterDiameter(m_RTMeter1.GetMeterDiameter() + 0.15);
  127.  
  128.     //ARC
  129.     m_RTMeter1.SetMeterStartArc(135);
  130.     m_RTMeter1.SetMeterStopArc(45);
  131.     
  132.  
  133.     //NEEDLE
  134.     m_RTMeter1.SetMeterNeedleStyle (NEEDLE_SHORTF);
  135.     
  136.     //COLORS
  137.     m_RTMeter1.SetPlotBackgroundColor (RGB_BLACK);
  138.     m_RTMeter1.SetWindowBackgroundColor (RGB_BLACK);
  139.  
  140.     //SCALING 
  141.     m_RTMeter1.SetMeterScaleMin (2.0);
  142.     m_RTMeter1.SetMeterScaleMax (5.0);
  143.     
  144.     //ALARM ARCS
  145.     m_RTMeter1.SetMeterLowAlarmStop (2.6);
  146.     m_RTMeter1.SetMeterHighAlarmStart (4.8);
  147.     
  148.     //arc line
  149.     m_RTMeter1.SetMeterArcEnable(FALSE);
  150.     m_RTMeter1.SetMeterLineColor (RGB_WHITE);
  151.  
  152.     
  153.     //tick attributes
  154.     m_RTMeter1.SetMeterTickStep (0.5);
  155.     m_RTMeter1.SetMeterMinorTicks (4);
  156.     m_RTMeter1.SetMeterTickPosition (POS_OUTSIDE);
  157.     m_RTMeter1.SetMeterTickLabelsPrecision (1);
  158.     m_RTMeter1.SetMeterTickLabelsPosition (POS_OUTSIDE);
  159.     m_RTMeter1.SetMeterTickLabelsColor(RGB_WHITE);
  160.     
  161.     //channel colors
  162.     m_RTMeter1.SetMeterChannelColor (0, RGB_WHITE);
  163.     m_RTMeter1.SetMeterChannelColor (1, RGB_LIGHTRED);
  164.  
  165.     //ALARMS
  166.     m_RTMeter1.SetMeterNormalAlarmColor (RGB_BLACK);
  167.     m_RTMeter1.SetMeterAlarmArcThickness (m_RTMeter1.GetMeterAlarmArcThickness() / 4.0);
  168.  
  169.     //timer
  170.     m_RTMeter1.SetEnableInternalTimer(TRUE);
  171.     
  172. }
  173.  
  174. void CMetersView::BuildGraph2()
  175. {
  176.     m_RTMeter2.SetMeterType (RTMETER_ARC);
  177.  
  178.     //arcs
  179.     m_RTMeter2.SetMeterStartArc(270);
  180.     m_RTMeter2.SetMeterStopArc(90);
  181.  
  182.     //title
  183.     m_RTMeter2.SetTitleString (TITLE1, "Pie Meter");
  184.  
  185.     //timer
  186.     m_RTMeter2.SetEnableInternalTimer(TRUE);
  187.     
  188.     //size and position
  189.     m_RTMeter2.SetMeterDiameter(m_RTMeter2.GetMeterDiameter() + 0.3);
  190.     m_RTMeter2.SetMeterCenterX (0.2);
  191.  
  192.     //tick marks
  193.     m_RTMeter2.SetMeterTickPosition (POS_OUTSIDE);
  194.  
  195.     //arc colors
  196.     m_RTMeter2.SetMeterNormalAlarmColor (RGB_WHITE);
  197.     m_RTMeter2.SetMeterLowAlarmColor (RGB_LIGHTBLUE);
  198.     m_RTMeter2.SetMeterHighAlarmColor (RGB_MAGENTA);
  199.  
  200. }
  201.  
  202. void CMetersView::BuildGraph3()
  203. {
  204.     m_RTMeter3.SetMeterType (RTMETER_PIE);
  205.     m_RTMeter3.SetMeterStartArc(0);
  206.     m_RTMeter3.SetMeterStopArc(345);
  207.  
  208.     m_RTMeter3.SetMeterScaleMin (0.0);
  209.     m_RTMeter3.SetMeterScaleMax (100.0);
  210.     m_RTMeter3.SetMeterTickStep (25.0);
  211.     
  212.     //title
  213.     m_RTMeter3.SetTitleString (TITLE1, "Arc Meter");
  214.     m_RTMeter3.SetTitleFontSize (TITLE1, 10);
  215.     m_RTMeter3.SetTitleColor (TITLE1, RGB_RED);
  216.     m_RTMeter3.SetTitleFontStyle (TITLE1, TEXT_BOLD | TEXT_ITAL);
  217.     
  218.     //timer
  219.     m_RTMeter3.SetEnableInternalTimer(TRUE);
  220.  
  221.     //diameter
  222.     m_RTMeter3.SetMeterDiameter(m_RTMeter3.GetMeterDiameter() + 0.15);
  223.  
  224.     //channel colors
  225.     m_RTMeter3.SetMeterChannelColor (0, RGB_WHITE);
  226.     m_RTMeter3.SetMeterChannelColor (1, RGB_CYAN);
  227.  
  228.     //arc limits
  229.     m_RTMeter3.SetMeterLowAlarmStart (0.0);
  230.     m_RTMeter3.SetMeterLowAlarmStop (10.0);
  231.     m_RTMeter3.SetMeterHighAlarmStart (90.0);
  232.     m_RTMeter3.SetMeterHighAlarmStop (100.0);
  233.  
  234.     
  235. }
  236.  
  237. BEGIN_EVENTSINK_MAP(CMetersView, CFormView)
  238.     //{{AFX_EVENTSINK_MAP(CMetersView)
  239.     ON_EVENT(CMetersView, IDC_RTMETERXCTRL1, 1 /* OnInternalTimer */, OnInternalTimerRtmeterxctrl1, VTS_NONE)
  240.     ON_EVENT(CMetersView, IDC_RTMETERXCTRL2, 1 /* OnInternalTimer */, OnInternalTimerRtmeterxctrl2, VTS_NONE)
  241.     ON_EVENT(CMetersView, IDC_RTMETERXCTRL3, 1 /* OnInternalTimer */, OnInternalTimerRtmeterxctrl3, VTS_NONE)
  242.     //}}AFX_EVENTSINK_MAP
  243. END_EVENTSINK_MAP()
  244.  
  245. void CMetersView::OnInitialUpdate() 
  246. {
  247.     CFormView::OnInitialUpdate();
  248.     
  249.     BuildGraph1();    
  250.     BuildGraph2();    
  251.     BuildGraph3();    
  252. }
  253.  
  254. void CMetersView::OnInternalTimerRtmeterxctrl1() 
  255. {
  256.     double rMin = min(m_RTMeter1.GetMeterScaleMin(), m_RTMeter1.GetMeterScaleMax());
  257.     double rMax = max(m_RTMeter1.GetMeterScaleMin(), m_RTMeter1.GetMeterScaleMax());
  258.     double rData[MAX_RTMETERX_NEEDLES];
  259.     double rCenter = rMin + (rMax - rMin) /2;
  260.     double rRange = (rMin - rMax);
  261.     int i;
  262.     for (i=0; i < m_RTMeter1.GetMeterNumChannels(); i++)
  263.     {
  264.         rData[i] = rCenter + rRange * 0.8 * ( 0.5 - ((double) rand() / (double) RAND_MAX));
  265.         if (rData[i] > rMax)
  266.             rData[i] = rMax;
  267.         else
  268.             if (rData[i] < rMin) 
  269.                 rData[i] = rMin;
  270.     }    
  271.     m_RTMeter1.UpdateDynData (rData);
  272.  
  273. }
  274.  
  275. void CMetersView::OnInternalTimerRtmeterxctrl2() 
  276. {
  277.     double rMin = min(m_RTMeter2.GetMeterScaleMin(), m_RTMeter2.GetMeterScaleMax());
  278.     double rMax = max(m_RTMeter2.GetMeterScaleMin(), m_RTMeter2.GetMeterScaleMax());
  279.     double rData[MAX_RTMETERX_NEEDLES];
  280.     double rCenter = rMin + (rMax - rMin) /2;
  281.     double rRange = (rMin - rMax);
  282.     int i;
  283.     for (i=0; i < m_RTMeter2.GetMeterNumChannels(); i++)
  284.     {
  285.         rData[i] = rCenter + rRange * 0.8 * ( 0.5 - ((double) rand() / (double) RAND_MAX));
  286.         if (rData[i] > rMax)
  287.             rData[i] = rMax;
  288.         else
  289.             if (rData[i] < rMin) 
  290.                 rData[i] = rMin;
  291.     }    
  292.     m_RTMeter2.UpdateDynData (rData);
  293.  
  294.     
  295. }
  296.  
  297. void CMetersView::OnInternalTimerRtmeterxctrl3() 
  298. {
  299.     double rMin = min(m_RTMeter3.GetMeterScaleMin(), m_RTMeter3.GetMeterScaleMax());
  300.     double rMax = max(m_RTMeter3.GetMeterScaleMin(), m_RTMeter3.GetMeterScaleMax());
  301.     double rData[MAX_RTMETERX_NEEDLES];
  302.     double rCenter = rMin + (rMax - rMin) /2;
  303.     double rRange = (rMin - rMax);
  304.     int i;
  305.     for (i=0; i < m_RTMeter3.GetMeterNumChannels(); i++)
  306.     {
  307.         rData[i] = rCenter + rRange * 0.8 * ( 0.5 - ((double) rand() / (double) RAND_MAX));
  308.         if (rData[i] > rMax)
  309.             rData[i] = rMax;
  310.         else
  311.             if (rData[i] < rMin) 
  312.                 rData[i] = rMin;
  313.     }    
  314.     m_RTMeter3.UpdateDynData (rData);
  315.  
  316.     
  317. }
  318.