Click here to Skip to main content
15,885,278 members
Articles / Desktop Programming / MFC

High-speed Charting Control

Rate me:
Please Sign up or sign in to vote.
4.95/5 (327 votes)
13 Jul 2010CPOL35 min read 4.2M   100.5K   787  
A flexible charting control to display 2D data
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>ChartDemo: CChartXYSerie Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.8 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
    </ul>
  </div>
</div>
<div class="contents">
<h1>CChartXYSerie Class Reference</h1><!-- doxytag: class="CChartXYSerie" --><!-- doxytag: inherits="CChartSerieBase&lt; SChartXYPoint &gt;" -->Specialization of a <a class="el" href="class_c_chart_serie_base.html" title="Base class for all series of the control.">CChartSerieBase</a> for series having data with an X and an Y value.  
<a href="#_details">More...</a>
<p>
<code>#include &lt;<a class="el" href="_chart_x_y_serie_8h-source.html">ChartXYSerie.h</a>&gt;</code>
<p>
<div class="dynheader">
Inheritance diagram for CChartXYSerie:</div>
<div class="dynsection">

<p><center><img src="class_c_chart_x_y_serie.png" usemap="#CChartXYSerie_map" border="0" alt=""></center>
<map name="CChartXYSerie_map">
<area href="class_c_chart_serie_base.html" alt="CChartSerieBase< SChartXYPoint >" shape="rect" coords="343,56,562,80">
<area href="class_c_chart_serie.html" alt="CChartSerie" shape="rect" coords="343,0,562,24">
<area href="class_c_chart_bar_serie.html" alt="CChartBarSerie" shape="rect" coords="0,168,219,192">
<area href="class_c_chart_line_serie.html" alt="CChartLineSerie" shape="rect" coords="229,168,448,192">
<area href="class_c_chart_points_serie.html" alt="CChartPointsSerie" shape="rect" coords="458,168,677,192">
<area href="class_c_chart_surface_serie.html" alt="CChartSurfaceSerie" shape="rect" coords="687,168,906,192">
</map>
</div>

<p>
<a href="class_c_chart_x_y_serie-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
<tr><td></td></tr>
<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="b66d842e4776d2b139af6a27c8313be2"></a><!-- doxytag: member="CChartXYSerie::CChartXYSerie" ref="b66d842e4776d2b139af6a27c8313be2" args="(CChartCtrl *pParent)" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#b66d842e4776d2b139af6a27c8313be2">CChartXYSerie</a> (<a class="el" href="class_c_chart_ctrl.html">CChartCtrl</a> *pParent)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="5b598fd291b70d56b97e452935a93614"></a><!-- doxytag: member="CChartXYSerie::~CChartXYSerie" ref="5b598fd291b70d56b97e452935a93614" args="()" -->
virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#5b598fd291b70d56b97e452935a93614">~CChartXYSerie</a> ()</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Destructor. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="a6b770a879b752a5040a959bd8ea84ed"></a><!-- doxytag: member="CChartXYSerie::AddPoint" ref="a6b770a879b752a5040a959bd8ea84ed" args="(double X, double Y)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#a6b770a879b752a5040a959bd8ea84ed">AddPoint</a> (double X, double Y)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds a single data point to the series. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#19eb7a8120996681108ad8b0061874dc">AddPoints</a> (double *pX, double *pY, unsigned Count)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds an array of points to the series.  <a href="#19eb7a8120996681108ad8b0061874dc"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#fb9bb011f36734a765d7f3129184b5cc">SetPoints</a> (double *pX, double *pY, unsigned Count)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets an array of points to the series.  <a href="#fb9bb011f36734a765d7f3129184b5cc"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="9ad7ee92489c7690878768c58d04a313"></a><!-- doxytag: member="CChartXYSerie::GetYPointValue" ref="9ad7ee92489c7690878768c58d04a313" args="(unsigned PointIndex) const " -->
double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#9ad7ee92489c7690878768c58d04a313">GetYPointValue</a> (unsigned PointIndex) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the Y value of a specific point in the series. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="e558cb14b1b9cc2523250902b77e6fd1"></a><!-- doxytag: member="CChartXYSerie::GetXPointValue" ref="e558cb14b1b9cc2523250902b77e6fd1" args="(unsigned PointIndex) const " -->
double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#e558cb14b1b9cc2523250902b77e6fd1">GetXPointValue</a> (unsigned PointIndex) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the X value of a specific point in the series. <br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#77215eb9e5c6491c2667540a23bd8ec1">SetYPointValue</a> (unsigned PointIndex, double NewVal)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the Y value of a specific point in the series.  <a href="#77215eb9e5c6491c2667540a23bd8ec1"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#d43ad3e02d53501eb251dddee2749d41">SetXPointValue</a> (unsigned PointIndex, double NewVal)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the X value of a specific point in the series.  <a href="#d43ad3e02d53501eb251dddee2749d41"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#72a55f2fd039598f94f6cc85083db43f">SetUserData</a> (unsigned uPointIndex, void *pData)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets user data for a specific point.  <a href="#72a55f2fd039598f94f6cc85083db43f"></a><br></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#ea11cf711ce4924856bfee77834444f2">GetUserData</a> (unsigned uPointIndex)</td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves user data for a specific point.  <a href="#ea11cf711ce4924856bfee77834444f2"></a><br></td></tr>
<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_c_chart_x_y_serie.html#ca9d20e23a66c9a3ca1242c7ee889acf">GetBezierControlPoints</a> (unsigned uFirst, unsigned uLast, <a class="el" href="struct_s_chart_x_y_point.html">SChartXYPoint</a> *&amp;pKnots, <a class="el" href="struct_s_chart_x_y_point.html">SChartXYPoint</a> *&amp;pFirstControlPoints, <a class="el" href="struct_s_chart_x_y_point.html">SChartXYPoint</a> *&amp;pSecondControlPoints) const </td></tr>

<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the control points of a bezier curve fitting the points stored in the array.  <a href="#ca9d20e23a66c9a3ca1242c7ee889acf"></a><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
Specialization of a <a class="el" href="class_c_chart_serie_base.html" title="Base class for all series of the control.">CChartSerieBase</a> for series having data with an X and an Y value. 
<p>
This class is abstract and has to be implemented for specific series. It already provides features which are common to all series with points having an X and an Y value. Examples of such series are: point series, line series, surface series and bar series. <hr><h2>Member Function Documentation</h2>
<a class="anchor" name="19eb7a8120996681108ad8b0061874dc"></a><!-- doxytag: member="CChartXYSerie::AddPoints" ref="19eb7a8120996681108ad8b0061874dc" args="(double *pX, double *pY, unsigned Count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CChartXYSerie::AddPoints           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>pX</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>pY</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>Count</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Adds an array of points to the series. 
<p>
Points which were already present in the series are kept. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pX</em>&nbsp;</td><td>Array of X values for the points </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pY</em>&nbsp;</td><td>Array of Y values for the points </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>Count</em>&nbsp;</td><td>Size of each of both arrays (number of points to add) </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="ca9d20e23a66c9a3ca1242c7ee889acf"></a><!-- doxytag: member="CChartXYSerie::GetBezierControlPoints" ref="ca9d20e23a66c9a3ca1242c7ee889acf" args="(unsigned uFirst, unsigned uLast, SChartXYPoint *&amp;pKnots, SChartXYPoint *&amp;pFirstControlPoints, SChartXYPoint *&amp;pSecondControlPoints) const " -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CChartXYSerie::GetBezierControlPoints           </td>
          <td>(</td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>uFirst</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>uLast</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_s_chart_x_y_point.html">SChartXYPoint</a> *&amp;&nbsp;</td>
          <td class="paramname"> <em>pKnots</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_s_chart_x_y_point.html">SChartXYPoint</a> *&amp;&nbsp;</td>
          <td class="paramname"> <em>pFirstControlPoints</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="struct_s_chart_x_y_point.html">SChartXYPoint</a> *&amp;&nbsp;</td>
          <td class="paramname"> <em>pSecondControlPoints</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td> const<code> [protected]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Retrieves the control points of a bezier curve fitting the points stored in the array. 
<p>
<dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>uFirst</em>&nbsp;</td><td>The index of the first point of the bezier curve </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>uLast</em>&nbsp;</td><td>The index of the last point of the bezier curve </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pKnots</em>&nbsp;</td><td>This parameter will store the points data </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pFirstControlPoints</em>&nbsp;</td><td>This parameter will store the primary control points of the bezier curve </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pSecondControlPoints</em>&nbsp;</td><td>This parameter will store the secondary control points of the bezier curve </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="ea11cf711ce4924856bfee77834444f2"></a><!-- doxytag: member="CChartXYSerie::GetUserData" ref="ea11cf711ce4924856bfee77834444f2" args="(unsigned uPointIndex)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void * CChartXYSerie::GetUserData           </td>
          <td>(</td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>uPointIndex</em>          </td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Retrieves user data for a specific point. 
<p>
User data can be disabled by adding the flag NO_USER_DATA in the preprocessor definitions. This is usefull when you don't want to have an additional pointer stored for each points in your series. 
</div>
</div><p>
<a class="anchor" name="fb9bb011f36734a765d7f3129184b5cc"></a><!-- doxytag: member="CChartXYSerie::SetPoints" ref="fb9bb011f36734a765d7f3129184b5cc" args="(double *pX, double *pY, unsigned Count)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CChartXYSerie::SetPoints           </td>
          <td>(</td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>pX</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double *&nbsp;</td>
          <td class="paramname"> <em>pY</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>Count</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Sets an array of points to the series. 
<p>
Points which were already present in the series are discarded. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>pX</em>&nbsp;</td><td>Array of X values for the points </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>pY</em>&nbsp;</td><td>Array of Y values for the points </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>Count</em>&nbsp;</td><td>Size of each of both arrays (number of points to add) </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="72a55f2fd039598f94f6cc85083db43f"></a><!-- doxytag: member="CChartXYSerie::SetUserData" ref="72a55f2fd039598f94f6cc85083db43f" args="(unsigned uPointIndex, void *pData)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CChartXYSerie::SetUserData           </td>
          <td>(</td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>uPointIndex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&nbsp;</td>
          <td class="paramname"> <em>pData</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Sets user data for a specific point. 
<p>
User data can be disabled by adding the flag NO_USER_DATA in the preprocessor definitions. This is usefull when you don't want to have an additional pointer stored for each points in your series. 
</div>
</div><p>
<a class="anchor" name="d43ad3e02d53501eb251dddee2749d41"></a><!-- doxytag: member="CChartXYSerie::SetXPointValue" ref="d43ad3e02d53501eb251dddee2749d41" args="(unsigned PointIndex, double NewVal)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CChartXYSerie::SetXPointValue           </td>
          <td>(</td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>PointIndex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>NewVal</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Sets the X value of a specific point in the series. 
<p>
The control is refreshed to display the change. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>PointIndex</em>&nbsp;</td><td>The index of the points to change the Y value </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>NewVal</em>&nbsp;</td><td>The new X value of the point </td></tr>
  </table>
</dl>

</div>
</div><p>
<a class="anchor" name="77215eb9e5c6491c2667540a23bd8ec1"></a><!-- doxytag: member="CChartXYSerie::SetYPointValue" ref="77215eb9e5c6491c2667540a23bd8ec1" args="(unsigned PointIndex, double NewVal)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void CChartXYSerie::SetYPointValue           </td>
          <td>(</td>
          <td class="paramtype">unsigned&nbsp;</td>
          <td class="paramname"> <em>PointIndex</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>NewVal</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>
Sets the Y value of a specific point in the series. 
<p>
The control is refreshed to display the change. <dl compact><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>PointIndex</em>&nbsp;</td><td>The index of the points to change the Y value </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>NewVal</em>&nbsp;</td><td>The new Y value of the point </td></tr>
  </table>
</dl>

</div>
</div><p>
<hr>The documentation for this class was generated from the following files:<ul>
<li>E:/Sources Misc/ChartDemo/ChartCtrl/<a class="el" href="_chart_x_y_serie_8h-source.html">ChartXYSerie.h</a><li>E:/Sources Misc/ChartDemo/ChartCtrl/ChartXYSerie.cpp</ul>
</div>
<hr size="1"><address style="text-align: right;"><small>Generated on Sun Jan 17 13:33:11 2010 for ChartDemo by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Engineer
Belgium Belgium
I am a 29 years old guy and I live with my girlfriend in Hoegaarden, little city from Belgium well known for its white beer Smile | :) .
I studied as an industrial engineer in electronics but I oriented myself more towards software development when I started to work.
Currently I am working in a research centre in mechatronica. I mainly develop in C++ but I also do a bit of Java.
When I have so spare time, I like to read (mainly fantasy) and play electric guitar.

Comments and Discussions