** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: ezplot.h,v 1.20 2000/12/23 18:12:35 kevin Exp $
+** $Id: ezplot.h,v 1.24 2001/01/02 16:02:12 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
#include <stddef.h>
#include "ctsupport.h"
#include "sgp.h"
+#include "pol.h"
class EZPlotCurve {
double *x;
double *y;
int m_iPointCount;
- int m_iLineStyle;
- int m_iSymbol;
- int m_iSymbolFreq;
- int m_iColor;
- std::string m_sLegend;
- EZPlotCurve (const double* x, const double* y, int n, int color, int linestyle, int symbol, int sumbolFreq, const std::string& legend);
+ EZPlotCurve (const double* x, const double* y, int n);
~EZPlotCurve();
};
//----------------------------------------------------------------------
// axis definitions
-enum {\r
+enum {
LINEAR = 1, // linear axis
LOG, // logrithmic axis
- NOAXIS, // don't plot axis \r
+ NOAXIS, // don't plot axis
};
// tick definitions
-enum {\r
+enum {
ABOVE = 1,
BELOW,
RIGHT,
- LEFT,\r
+ LEFT,
};
-// line types \r
+// line types
enum {
NOLINE = 0,
SOLID,
DASH1,
DASH2,
DASH3,
- DASH4,\r
-};\r
+ DASH4,
+};
// symbol definitions
-enum {\r
+enum {
SB_CROSS = 1,
SB_PLUS,
SB_BOX,
SB_CIRCLE,
SB_ERRORBAR,
- MAXSYMBOL,\r
+ MAXSYMBOL,
};
-enum {\r
+enum {
INSIDE = 1, // values of o_legendbox
OUTSIDE,
- NOLEGEND,\r
-};\r
-\r
+ NOLEGEND,
+};
+
+
+struct KeywordCodeTable {
+ char* keyword;
+ int code;
+};
-struct KeywordCodeTable {\r
- char* keyword;\r
- int code;\r
-};\r
-\r
/*-----------------------------------------------------------------------------
* GLOBAL VARIABLES
*
S_DATA = 2,
S_HELP,
S_EXIT,
+ S_CURVE,
S_SOLID,
S_DASH,
S_NOLINE,
S_BLACK,
S_RED,
S_GREEN,
- S_BLUE,\r
+ S_BLUE,
S_SYMBOL,
S_PEN,
S_EVERY,
S_TAG,
S_TEXTSIZE,
};
- \r
- static const struct KeywordCodeTable m_sKeywords[];\r
- static const int NKEYS;\r
- std::vector<class EZPlotCurve*> m_vecCurves;
+ static const struct KeywordCodeTable m_sKeywords[];
+ static const int NKEYS;
+ std::vector<class EZPlotCurve*> m_vecCurves;
+ std::vector<int> m_veciColor;
+ std::vector<bool> m_vecbColorSet;
+ std::vector<int> m_veciSymbol;
+ std::vector<bool> m_vecbSymbolSet;
+ std::vector<int> m_veciSymbolFreq;
+ std::vector<bool> m_vecbSymbolFreqSet;
+ std::vector<int> m_veciLinestyle;
+ std::vector<bool> m_vecbLinestyleSet;
+ std::vector<std::string> m_vecsLegend;
+ std::vector<bool> m_vecbLegendSet;
+
+ int getColor (unsigned int iCurve) const;
+ int getSymbol (unsigned int iCurve) const;
+ const std::string* getLegend (unsigned int iCurve) const;
+ int getSymbolFreq (unsigned int iCurve) const;
+ int getLinestyle (unsigned int iCurve) const;
+
+ void setColor (unsigned int iCurve, int iColor);
+ void setSymbol (unsigned int iCurve, int iSymbol);
+ void setSymbolFreq (unsigned int iCurve, int iSymbolFreq);
+ void setLinestyle (unsigned int iCurve, int iLinestyle);
+ void setLegend (unsigned int iCurve, const std::string& strLegend);
+ void setLegend (unsigned int iCurve, const char* const pszLegend);
+
+ int m_iCurrentCurve;
+
// Colors
int clr_axis; // color of all axis lines
int clr_title; // color of main title
std::string c_xlabel; // label for x axis
std::string c_ylabel; // label for y axis
std::string c_title; // title to print above graph
- std::string c_legend;; // current legend specified
int o_linestyle, o_color; // style to use for curves all subsequent curves to EZPLOT
int o_xaxis, o_yaxis; // Specifies where axis & labels are drawn
double m_dVP_xscale, m_dVP_yscale;
double m_xWorldScale, m_yWorldScale;
- void drawAxes(void);
+ void drawAxes();
void symbol (int sym, double symwidth, double symheight);
void make_numfmt(char *fmtstr, int *fldwid, int *nfrac, double min, double max, int nint);
int axis_scale (double min, double max, int nint, double *minp, double *maxp, int *nintp);
- SGP& rSGP;
+ SGP* m_pSGP;
+ POL m_pol;
void clearCurves ();
- bool ezcmd (const char const *comm);\r
+ bool ezcmd (const char* const comm);
bool do_cmd(int lx);
void bad_option(char *opt);
void initPlotSettings();
- static void initkw(void);
-
- static bool ezset_initialized;
-
+ void initKeywords ();
+
double convertWorldToNDC_X (double x)
{ return xgn_min + (x - xgw_min) * m_xWorldScale; }
{ return ygn_min + (y - ygw_min) * m_yWorldScale; }
public:
- EZPlot (SGP& sgp);
+ EZPlot ();
~EZPlot ();
- bool ezset (const std::string& command);\r
- bool ezset (const char const *command);
+ bool ezset (const std::string& command);
+ bool ezset (const char* const command);
void addCurve (const float* x, const double* y, int num);
void addCurve (const double* x, const float* y, int num);
void addCurve (const double* y, int n);
void addCurve (const float* y, int n);
- void plot ();
+ void plot (SGP* pSGP);
};
#endif