clPlot.h
上传用户:apnc006
上传日期:2013-01-26
资源大小:178k
文件大小:8k
源码类别:

绘图程序

开发平台:

Visual C++

  1. //*******************************************************************************************************/
  2. //* FileName        : clPlot.h
  3. //*
  4. //* Description     : Real Time Plot for MFC
  5. //*
  6. //* Contents: : axis y (x) axis info.
  7. //*   timeaxis time axis info
  8. //*   legend legend info.
  9. //*   serie data serie info & array
  10. //*   clPlot The plot itself.
  11. //*
  12. //* Author          : Jan Vidar Berger
  13. //*******************************************************************************************************/
  14. #if !defined(AFX_DQPLOT_H__0D536D37_5CF1_11D1_AED1_0060973A08A4__INCLUDED_)
  15. #define AFX_DQPLOT_H__0D536D37_5CF1_11D1_AED1_0060973A08A4__INCLUDED_
  16. #if _MSC_VER >= 1000
  17. #pragma once
  18. #endif // _MSC_VER >= 1000
  19. // clPlot.h : header file
  20. //
  21. #define MAXLEGENDS 10
  22. #define MAXSERIES 50
  23. //*******************************************************************************************************/
  24. //* simple data value struct. used in dynamic array
  25. //*******************************************************************************************************/
  26. typedef struct _value{
  27. double dValue;
  28. CTime ValueTime;
  29. }value;
  30. //*******************************************************************************************************/
  31. //* non-time axis. used for left and right y axis. might be used for x as well.
  32. //*******************************************************************************************************/
  33. class  AFX_EXT_CLASS axis
  34. {
  35. public:
  36. CString szTitle;
  37. double minrange;
  38. double maxrange;
  39. double m_dValuePrPixel;
  40. axis()
  41. {
  42. szTitle = "Title";
  43. minrange = 0.0;
  44. maxrange = 2000.0;
  45. m_dValuePrPixel = 1;
  46. };
  47. };
  48. //*******************************************************************************************************/
  49. //* time axis
  50. //*******************************************************************************************************/
  51. class  AFX_EXT_CLASS timeaxis
  52. {
  53. public:
  54. CString m_szTitle; // time axis title;
  55. CTime m_mintime; // min time
  56. CTime m_maxtime; // max time
  57. int m_iTimeMode; // axis grid and legend interval index
  58. double m_dSecondsPrPixel;
  59. timeaxis()
  60. {
  61. m_szTitle = "Time";
  62. m_mintime = 0;
  63. m_maxtime = 600;
  64. m_iTimeMode=0;
  65. m_dSecondsPrPixel=1;
  66. }
  67. };
  68. //*******************************************************************************************************/
  69. //* legend
  70. //*******************************************************************************************************/
  71. class  AFX_EXT_CLASS legend
  72. {
  73. public:
  74. BOOL m_bIAmInUse;
  75. COLORREF m_color; // legend color code
  76. int m_istyle;
  77. CString m_szTitle; // legend title
  78. legend(){
  79. m_bIAmInUse = FALSE;
  80. m_color = 0;
  81. m_istyle = PS_SOLID;
  82. m_szTitle = "";
  83. }
  84. };
  85. //*******************************************************************************************************/
  86. //* data serie
  87. //*******************************************************************************************************/
  88. class  AFX_EXT_CLASS serie
  89. {
  90. public:
  91. BOOL m_bIAmInUse;
  92. COLORREF m_color; // serie line color
  93. int m_iLineStyle; // line style
  94. BOOL m_bRightAxisAlign; // align to right axis
  95. value * m_pvalues; // value array
  96. long m_lNoValues; // no values (used for array size)
  97. long m_lbegin; // list begin
  98. long m_lend; // list end
  99. // CPen m_pen; // pre-calculated pen (for speed)
  100. serie();
  101. ~serie();
  102. void AddPoint(CTime &valuetime, double &y);
  103. void Reset();
  104. };
  105. //*******************************************************************************************************/
  106. //* Class           : clPlot
  107. //*
  108. //* Base Class      : public CWnd
  109. //*
  110. //* Description     : Plot Component.
  111. //*
  112. //*   This is a standard plot and can be used for any application.
  113. //*
  114. //* 1. A special 'autoscroll'mode exist for real time plots.
  115. //* 2. Only a minimum of features are implemented.
  116. //* 3. Series and legends are separated and must be set up individually.
  117. //* 4. A set of defines (see top of file) are used to set the max array sizes.
  118. //* 5. Only time are supported as x-axis.
  119. //* 6. A large range of pre-calculated values are used for maximum speed.
  120. //*
  121. //* Author          : Jan Vidar Berger
  122. //*******************************************************************************************************/
  123. class AFX_EXT_CLASS clPlot : public CWnd
  124. {
  125. // Construction
  126. public:
  127. clPlot();
  128. virtual ~clPlot();
  129. // Attributes
  130. public:
  131. CRect m_ctlRect; // control rect
  132. CRect m_clientRect; // ctlRect - borderspace
  133. CRect m_plotRect; // clientRect - margins
  134. CRect m_legendRect; // any rect within clientRect
  135. CRect m_axisLYRect; // Left axisi rect
  136. CRect m_axisRYRect; // right y axis
  137. CRect m_axisBXRect; // bottom x axis
  138. int m_iMleft; // left margin
  139. int m_iMright; // right margin
  140. int m_iMtop; // top margin
  141. int m_iMbottom; // bottom margin
  142. COLORREF m_ctlBkColor; // control background color
  143. COLORREF m_plotBkColor; // plot bacground color
  144. COLORREF m_legendBkColor; // legend background color
  145. COLORREF m_gridColor; // grid line color
  146. BOOL m_bctlBorder; // control border
  147. BOOL m_bplotBorder; // plot border
  148. BOOL m_blegendBorder; // legend border
  149. BOOL m_bPrimaryLegend; // primary legend
  150. BOOL m_bSecondaryLegend; // secondary legend
  151. BOOL m_bAxisLY; // left axis
  152. BOOL m_bAxisRY; // right axis
  153. BOOL m_bAxisBX; // bottom axis
  154. BOOL m_bAutoScrollX; // automatic x range scrolling
  155. BOOL m_bSimMode; // simulate data input
  156. static long m_lMaxDataPrSerie; // max allowed data pr. serie.
  157. static long m_lMaxDataTotal; // max allowed data total.
  158. double m_dNoData; // No Data Value (used for gaps)
  159. legend m_primarylegends[MAXLEGENDS];
  160. legend m_secondarylegends[MAXLEGENDS];
  161. serie m_series[MAXSERIES];
  162. axis m_leftaxis; // left axis
  163. axis m_rightaxis; // right axis
  164. timeaxis m_timeaxis; // bottom axis
  165. CPoint *pLineArray; // pre-calculated when new data are entered into the system
  166. long lArraySize; // current size of pLineArray
  167. CFont m_font;
  168. LOGFONT m_logFont;
  169. LOGFONT m_zoomFont;
  170. double m_dzoom;
  171. int m_TextHeight;
  172. // Operations
  173. public:
  174. BOOL Create(DWORD dwstyle, CRect &rect, CWnd *pParent, UINT id);
  175. void MoveWindow(CRect &Rect);
  176. virtual void Draw(CDC * dc); // Draw the entire plot
  177. virtual void DrawBasic(CDC * dc); // Draw plot basics
  178. virtual void DrawPlot(CDC * dc); // Draw the plot series
  179. virtual void DrawSerie(CDC *dc, int serie);
  180. virtual void DrawGrid(CDC * dc); // Draw grids
  181. virtual void DrawLegendShadow(CDC * dc);// Draw legend shadows
  182. virtual void DrawLegend(CDC * dc); // Draw legends
  183. virtual void DrawYAxisGrid(CDC * dc);
  184. virtual void DrawXAxisGrid(CDC * dc);
  185. virtual void ComputeRects(BOOL bInitialize);
  186. virtual BOOL AddPoint(int serie, CTime &valuetime, double &y);
  187. virtual void SetBXRange(CTime &fromtime, CTime &totime,BOOL bMove=TRUE);
  188. virtual void SetLYRange(double &minrange, double &maxrange);
  189. virtual void SetRYRange(double &minrange, double &maxrange);
  190. virtual void Reset();
  191. virtual void SetSerie(int s, int style, COLORREF color, double minrange, double maxrange, const char *szTitle, BOOL Rightalign=FALSE);
  192. virtual void SetLegend(int l, int style, COLORREF color, const char *text);
  193. virtual void SetBXTitle(const char *title);
  194. virtual void SetLYTitle(const char *title);
  195. virtual void SetRYTitle(const char *title);
  196. // Overrides
  197. // ClassWizard generated virtual function overrides
  198. //{{AFX_VIRTUAL(clPlot)
  199. //}}AFX_VIRTUAL
  200. // Implementation
  201. public:
  202. // Generated message map functions
  203. protected:
  204. //{{AFX_MSG(clPlot)
  205. afx_msg void OnPaint();
  206. //}}AFX_MSG
  207. BOOL clPlot::OnEraseBkgnd(CDC* pDC) ;
  208. DECLARE_MESSAGE_MAP()
  209. };
  210. /////////////////////////////////////////////////////////////////////////////
  211. //{{AFX_INSERT_LOCATION}}
  212. // Microsoft Developer Studio will insert additional declarations immediately before the previous line.
  213. #endif // !defined(AFX_DQPLOT_H__0D536D37_5CF1_11D1_AED1_0060973A08A4__INCLUDED_)