#ifndef _Scatter_Scatter_h #define _Scatter_Scatter_h #include struct XY:Moveable{ double x; double y; XY() { x=0; y=0; } XY(double dx, double dy) { x=dx; y=dy; } XY(const XY & point) { x=point.x; y=point.y; } }; //Support for a possible PieChart struct DrawExtension: Draw { typedef DrawExtension CLASSNAME; DrawExtension() { Draw::Draw(); } void DrawPie(const Rect& r,Point p1,Point p2, Color color, int pen, Color pencolor) { SetColor(color); SetDrawPen(pen, pencolor); ::Pie(GetHandle(), r.left, r.top, r.right, r.bottom,p1.x,p1.y,p2.x,p2.y); } void DrawRoundRect(const Rect& r,int nWidth,int nHeight, Color color, int pen, Color pencolor) { SetColor(color); SetDrawPen(pen, pencolor); ::RoundRect(GetHandle(),r.left, r.top, r.right, r.bottom,nWidth,nHeight); } }; class Scatter : public StaticRect { public: enum MarkStyle { CIRCLE, RECTANGLE, SQUARE, TRIANGLE, CROSS, X, RHOMB }; virtual void Paint(Draw& w); void Paint(DrawExtension& we); void SetDrawing(Draw& w,int scale); void Circle(Draw& w, int scale, Point cp, int size, class::Color markColor); void Square(Draw& w, int scale, Point cp, int size, class::Color markColor); void Rectangle(Draw& w, int scale, Point cp, int size, class::Color markColor); void Triangle(Draw& w, int scale, Point cp, int size, class::Color markColor); void Cross(Draw& w, int scale, Point cp, int size, class::Color markColor); void XFunct(Draw& w, int scale, Point cp, int size, class::Color markColor); void Rhomb(Draw& w, int scale, Point cp, int size, class::Color markColor); inline void DrawMark(int style,Draw& w, int scale, Point cp, int size, class::Color markColor); //virtual void LeftDown(Point, dword); Scatter& SetColor(class::Color _color); Scatter& SetTitle(String title); Scatter& SetFontTitle(Font& fontTitle); Scatter& SetColorTitle(class::Color colorTitle); void SetLabels(String _xLabel,String _yLabel); Scatter& SetLabelX(String _xLabel); Scatter& SetLabelY(String _yLabel); Scatter& SetFontLabels(Font& fontLabels); Scatter& SetColorLabels(class::Color colorLabels); Scatter& SetPlotAreaPoz(int poz_x,int poz_y); Scatter& H_Border(int poz_x); Scatter& V_Border(int poz_y); Scatter& SetPlotAreaColor(class ::Color p_a_color); Scatter& SetAxisColor(class::Color axis_color); Scatter& SetAxisWidth(int axis_width); Scatter& SetGridColor(class::Color grid_color); Scatter& SetGridWidth(int grid_width); Scatter& ShowVGrid(bool show); Scatter& ShowHGrid(bool show); Scatter& showLegend(bool show=true); Scatter& SetLegendWeight(int weight); void DrawLegend(Draw& w,int scale); void SetRange(double rx, double ry); void SetMajorUnits(double ux, double uy); void SetXYMin(double xmin,double ymin); void AddSeries (Vector & points,String legend="", bool join=false,class::Color pcolor=LtBlue,int width=30,int thickness=6); void SetData(int nbSeries, int index, XY & point); void AddPoint(int nbSeries, XY & point); void InsertPoint(int nbSeries, int index, XY & point); void RemovePoint(int nbSeries, int index); void SetDataColor(int j,class::Color pcolor); void SetFunctColor(int j, class::Color fcolor); class::Color GetDataColor (int j); class::Color GetFunctColor (int j); void SetDataThickness(int j, int thick_dots); void SetFunctThickness(int j,int thick_dots); int GetDataThickness(int j); int GetFunctThickness(int j); void SetMarkWidth(int j, int width_dots); int GetMarkWidth(int j); void SetMarkStyle(int j, int noStyle); int GetMarkStyle(int j); void SetMarkColor(int j,class::Color pcolor); class::Color GetMarkColor (int j); void SetShowMark(int j, bool show=true); bool IsMarkShow(int j); void SetJoin(int j, bool join=true); bool IsJoined(int j); void SetSmooth(int j, bool smooth=true); bool IsSmooth(int j); void RemoveSeries(int j); void SetData(int nbSeries, Vector & points); Vector > & GetData() {return PointsData;} void plotFunction(double (*f)(double),String legend="", class::Color fcolor=Green,int weight=6); void plotParaFunction(XY (*pf)(double),String legend="", class::Color fcolor=Green,int weight=6,int Np=50); void RemoveFSeries(int j); int GetNbMax(); //max number of points along X axis Vector Cubic (Vector& DataSet, int fineness=10, double tension=0.4); Drawing& getDrawing(); Image& getImage(int scale=1); private: class ::Color graphColor; String Title; Font FontTitle; class::Color ColorTitle; String xLabel, yLabel; Font FontLabels; class::Color ColorLabels; int px, py; class ::Color plotAreaColor; class::Color axisColor; int axisWidth; double xRange,yRange; double xMin,yMin; double xMajorUnit,yMajorUnit; bool DrawXReticle, DrawYReticle; class::Color gridColor; int gridWidth; bool DrawVGrid, DrawHGrid; Vector > PointsData,FunctionData; Vector PColors,FColors; Vector FThickness,PThickness; Vector PWidth; Vector Join; Vector Smooth; Vector MarkColors; Vector ShowMark; Vector MarkStyles; Drawing drawing; Image img; Vector Legend; Vector FLegend; bool ShowLegend; int LegendWeight; public: Scatter(); ~Scatter(); }; #endif