/* * * ChartSurfaceSerie.h * * Written by Cédric Moonen (cedric_moonen@hotmail.com) * * * * This code may be used for any non-commercial and commercial purposes in a compiled form. * The code may be redistributed as long as it remains unmodified and providing that the * author name and this disclaimer remain intact. The sources can be modified WITH the author * consent only. * * This code is provided without any garanties. I cannot be held responsible for the damage or * the loss of time it causes. Use it at your own risks * * An e-mail to notify me that you are using this code is appreciated also. * * */ #if !defined(AFX_CHARTSURFACESERIE_H__28A77823_43BD_4502_9AA7_A2B227454035__INCLUDED_) #define AFX_CHARTSURFACESERIE_H__28A77823_43BD_4502_9AA7_A2B227454035__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ChartXYSerie.h" //! Specialization of a CChartSerie to display a surface series. /** A surface can be horizontal (default) or vertical: this defines how the filling of the surface is done. For a horizontal surface, the filling is done between the points and the associated horizontal axis and for a vertical surface, the filling is done between the points and the associated vertical axis. The series can be associated with a secondary axis. For example, if the surface series is horizontal and is associated with the top axis (secondary axis), the filling is done between the top axis and the points. **/ class CChartSurfaceSerie : public CChartXYSerie { public: //! Constructor CChartSurfaceSerie(CChartCtrl* pParent); //! Destructor virtual ~CChartSurfaceSerie(); //! The different fill styles enum FillStyle { fsSolid = 0, fsHatchDownDiag, fsHatchUpDiag, fsHatchCross, fsHatchDiagCross, fsHatchHorizontal, fsHatchVertical }; //! Sets the fill style void SetFillStyle(FillStyle NewStyle); //! Returns the fill style FillStyle GetFillStyle() const { return m_FillStyle; } //! Sets the series in horizontal or vertical mode /** If the series is in horizontal mode, the filling will be done between the data points and the horizontal axis. **/ void SetHorizontal(bool bHoriz); //! Returns true if the series is in horizontal mode bool GetHorizontal() const { return m_bHorizontal; } //! Check whether a screen point is on the series. /** This function returns true if the screen point is on the surface. If the screen point is also close to a specific point of the series, the index of the point is stored in the uIndex parameter. Otherwise, this parameter contains INVALID_POINT. @param screenPoint The screen point to test @param uIndex If the point is close to a specific point of the series, its index is stored here. @return true if the point is on the series **/ bool IsPointOnSerie(const CPoint& screenPoint, unsigned& uIndex) const; void CChartSurfaceSerie::SetSeriesOrdering(PointsOrdering ); private: //! Override in order to avoid changing series ordering. // void SetSeriesOrdering(CChartPointsArray::PointsOrdering); //! Draws the legend icon for the series. /** This pure virtual function should be overriden by child classes. @param pDC The device context used to draw @param rectBitmap The rectangle in which to draw the legend icon **/ void DrawLegend(CDC* pDC, const CRect& rectBitmap) const; //! Draws the most recent points of the series. /** This pure virtual function should be overriden by child classes. This function should only draw the points that were not previously drawn. @param pDC The device context used to draw **/ void Draw(CDC* pDC); //! Redraws the full series. /** This pure virtual function should be overriden by child classes. @param pDC The device context used to draw **/ void DrawAll(CDC *pDC); //! The brush style used to fill the surface FillStyle m_FillStyle; //! The horizontal/vertical mode bool m_bHorizontal; }; #endif // !defined(AFX_CHARTSURFACESERIE_H__28A77823_43BD_4502_9AA7_A2B227454035__INCLUDED_)