/*****************************************************************************
-** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** FILE IDENTIFICATION
**
-** $Id: ezplot.h,v 1.3 2000/05/07 12:46:19 kevin Exp $
-** $Log: ezplot.h,v $
-** Revision 1.3 2000/05/07 12:46:19 kevin
-** made c++ compatible
+** Name: ezplot.h
+** Purpose: Header file for EZplot library
**
-** Revision 1.2 2000/04/28 14:14:16 kevin
-** *** empty log message ***
+** This is part of the CTSim program
+** Copyright (C) 1983-2000 Kevin Rosenberg
**
+** $Id: ezplot.h,v 1.13 2000/08/31 08:38:58 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
** along with this program; if not, write to the Free Software
** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
******************************************************************************/
-/*----------------------------------------------------------------------*/
-/* EZPLOT */
-/* */
-/*----------------------------------------------------------------------*/
+
#ifndef __H_EZPLOT
#define __H_EZPLOT
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-
#include <stdio.h>
#include <stddef.h>
-#include "kstddef.h"
#include <ctype.h>
-#include "sgp.h"
#include <math.h>
-#include "kmath.h"
-#include "cio.h"
-
-#define MAXLABEL 40 /* maximum length of axis label */
-#define MAXTITLE 40 /* maximum length of a title */
-#define MAXLEGEND 20 /* maximum length of a legend */
-#define MAXCURVES 10 /* maximum number of curves that can be plotted */
-#define MAXPTS 200 /* max number of points that can be read with
- DATA command in INTERACTIVE mode */
-
-struct ezp_curve_st {
- int numpts;
- double *x, *y;
- int linestyle;
- int symbol;
- int symfreq;
- int color;
- char legend[MAXLEGEND+1];
+#include "ctsupport.h"
+#include "sgp.h"
+
+
+class EZPlotCurve {
+ public:
+ double *x;
+ double *y;
+ int m_iPointCount;
+ int m_iLineStyle;
+ int m_iSymbol;
+ int m_iSymbolFreq;
+ int m_iColor;
+ string m_sLegend;
+
+ EZPlotCurve (const double* x, const double* y, int n, int color, int linestyle, int symbol, int sumbolFreq, const string& legend);
+
+ ~EZPlotCurve();
};
-#define XBUF_DEF 600
-#define YBUF_DEF XBUF_DEF * (72. / 120.) * 0.75
-#define PRTMODE_DEF 1
+/*----------------------------------------------------------------------*/
+/* GLOBAL VARIABLES */
+/*----------------------------------------------------------------------*/
+
+/* axis definitions */
+#define LINEAR 1 /* linear axis */
+#define LOG 2 /* logrithmic axis */
+#define NOAXIS 3 /* don't plot axis */
+
+/* tick definitions */
+#define ABOVE 1
+#define BELOW 2
+#define RIGHT 4
+#define LEFT 8
+
+/* line types */
+#define NOLINE 0
+#define SOLID 1
+#define DASH 2
+#define DASH1 10
+#define DASH2 11
+#define DASH3 12
+#define DASH4 13
+
+/* symbol definitions */
+#define SB_CROSS 1
+#define SB_PLUS 2
+#define SB_BOX 3
+#define SB_CIRCLE 4
+#define SB_ERRORBAR 5
+#define MAXSYMBOL 5
+
+#define INSIDE 1 /* values of o_legendbox */
+#define OUTSIDE 2
+#define NOLEGEND 3
+
+/*-----------------------------------------------------------------------------
+ * GLOBAL VARIABLES
+ *
+ * Naming Convention:
+ * i_ Internal variable
+ * Not user changable
+ * o_ Option variable
+ * Normal variable that is user modifiable
+ * These variables must always have a valid value
+ * d_ Device variable
+ * Variables controlling devices
+ * clr_ Color variable
+ * Holds a color value
+ * c_ Character string variable
+ * Contains a character string
+ * v_ Value variable
+ * User modifiable variable associated with the set variable (s_)
+ * These variables do not always have a valid value
+ * These variables change assumption EZPLOT makes about the plot
+ * s_ Set variable.
+ * TRUE if associated value variable (v_) has been set by the user
+ *---------------------------------------------------------------------------*/
+
+#include <vector>
+using namespace std;
+
+typedef vector<EZPlotCurve*>::iterator EZPlotCurveIterator;
+typedef vector<EZPlotCurve*>::const_iterator EZPlotCurveConstIterator;
+
+class SGP;
+class EZPlot {
+ private:
+ vector<class EZPlotCurve*> m_vecCurves;
+
+ // Colors
+ int clr_axis; /* color of all axis lines */
+ int clr_title; /* color of main title */
+ int clr_label; /* color of axis labels */
+ int clr_legend; /* color of legend box */
+ int clr_grid; /* color of grid lines */
+ int clr_number; /* color of axis number labels */
+
+ // Options
+ double o_xporigin, o_yporigin; /* origin of plot frame in NDC */
+ double o_xlength, o_ylength; /* length of plot frame in NDC */
+
+ string c_xlabel; /* label for x axis */
+ string c_ylabel; /* label for y axis */
+ string c_title; /* title to print above graph */
+ string c_legend;; /* current legend specified */
+
+ int o_linestyle, o_color; /* style to use for curves all subsequent curves to EZPLOT */
+ bool o_xaxis, o_yaxis; /* Specifies where axis & labels are drawn */
+ bool o_grid; /* Flag to draw a grid at major ticks */
+ bool o_box; /* Flag to draw a box around the graph */
+
+ int o_xticks, o_yticks; /* direction to draw tick marks */
+ bool o_xtlabel, o_ytlabel; /* TRUE if label tick marks */
+
+ int o_xmajortick, o_ymajortick; /* number of major ticks to draw */
+ int o_xminortick, o_yminortick; /* number of minor ticks between major ticks */
+
+ int o_symbol; /* Symbol type, (0 = no symbol) */
+ int o_symfreq; /* frequency to draw symbols at curve points */
+
+ int o_legendbox; /* controls whether legend is inside or outside of the axis extents */
+ int o_tag; /* controls whether to draw tag at end of axes */
+
+ // VALUE & SET variables
+ double v_xmin, v_xmax, v_ymin, v_ymax; /* user supplied axis endpoints */
+ bool s_xmin, s_xmax, s_ymin, s_ymax; /* TRUE is endpoint has been set */
+ double v_xtitle, v_ytitle; /* NDC position to plot title */
+ bool s_xtitle, s_ytitle; /* TRUE if set position for title */
+ double v_xcross, v_ycross; /* position that axes cross */
+ bool s_xcross, s_ycross; /* TRUE if set axes cross position */
+ double v_xlegend, v_ylegend; /* upper-left position of legend box in NDC */
+ bool s_xlegend, s_ylegend; /* TRUE if set position of legend box */
+ int v_lxfrac, v_lyfrac; /* number of digits to right of decimal place */
+ bool s_lxfrac, s_lyfrac; /* TRUE if set number of fractional digits */
+ double v_textsize; /* size of text in NDC */
+ bool s_textsize; /* TRUE if user set size of text */
+
+ // Global variables
+ double charheight; /* Height of characters in NDC */
+ double charwidth; /* Height of characters in NDC */
+ double xp_min, xp_max, yp_min, yp_max; /* boundry of plot frame in NDC */
+ double xa_min, xa_max, ya_min, ya_max; /* extent of axes in NDC */
+ double xgw_min, xgw_max, ygw_min, ygw_max; /* boundary of graph in input coords */
+ double xgn_min, xgn_max, ygn_min, ygn_max; /* boundy of graph in NDC */
+ double xt_min, xt_max, yt_min, yt_max; /* boundary of axis ticks */
+ double xl_min, xl_max, yl_min, yl_max; /* boundary of legend box */
+ double title_row; /* y-coord of title row */
+ double xtl_ofs; /* Offset y-coord of x tick labels from axis */
+ double ytl_ofs; /* Offset x-coord of y tick labels from axis */
+ double xlbl_row; /* row of x label in world coord */
+ double ylbl_col; /* column of y label in world coord */
+ double xw_tickinc, yw_tickinc; /* increment between major ticks in WC */
+ double xn_tickinc, yn_tickinc; /* increment between major ticks in NDC */
+ int x_nint, y_nint; /* number of intervals along x & y axes */
+ int x_fldwid, x_frac; /* numeric field sizes & number of digits */
+ int y_fldwid, y_frac; /* in fraction of number, used for printf() */
+ double xtl_wid, ytl_wid; /* length of ticks labels in NDC */
+ double tl_height; /* height of tick labels in NDC */
+ char x_numfmt[20]; /* format to print x tick labels */
+ char y_numfmt[20]; /* format to print y tick labels */
+
+ void drawAxes(void);
+ 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;
+
+ void clearCurves ();
+
+ bool ezcmd (char *comm);
+ int do_cmd(int lx);
+ void bad_option(char *opt);
+ void initPlotSettings();
+
+ static void initkw(void);
+
+ static bool ezset_initialized;
+
+ public:
+ EZPlot (SGP& sgp);
+ ~EZPlot ();
+
+ int ezset (char *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* x, const double* y, int num);
+ void addCurve (const double* y, int n);
+ void addCurve (const float* y, int n);
+
+ void plot ();
+};
/*----------------------------------------------------------------------*/
/* Codes from LEX */
#define S_SYMBOL -18
#define S_EVERY -19
#define S_NONE -20
-#define S_CURVES -21
-#define S_UNKNOWN -22
-#define S_END -23
#define S_LEGEND -24
#define S_XLEGEND -25
#define S_YLEGEND -26
#define S_CLEAR -61
#define S_STORE -62
#define S_RESTORE -63
-#define S_USTART -64
-#define S_UFINISH -65
#define S_AMARK -66
#define S_NO -67
#define S_INTERACTIVE -68
#define S_LEGENDBOX -107
#define S_TAG -108
-#define S_EPSON -110
-#define S_CRT -111
-
#define S_TEXTSIZE -120
-#define S_XBUF -121
-#define S_YBUF -122
-#define S_PRTMODE -123
-
-/*----------------------------------------------------------------------*/
-/* GLOBAL VARIABLES */
-/*----------------------------------------------------------------------*/
-
-/* axis definitions */
-#define LINEAR 1 /* linear axis */
-#define LOG 2 /* logrithmic axis */
-#define NOAXIS 3 /* don't plot axis */
-
-/* tick definitions */
-#define ABOVE 1
-#define BELOW 2
-#define RIGHT 4
-#define LEFT 8
-
-/* line types */
-#define NOLINE 0
-#define SOLID 1
-#define DASH 2
-#define DASH1 10
-#define DASH2 11
-#define DASH3 12
-#define DASH4 13
-
-/* symbol definitions */
-#define SB_CROSS 1
-#define SB_PLUS 2
-#define SB_BOX 3
-#define SB_CIRCLE 4
-#define SB_ERRORBAR 5
-#define MAXSYMBOL 5
-
-#define INSIDE 1 /* values of o_legendbox */
-#define OUTSIDE 2
-#define NOLEGEND 3
-
-/*-----------------------------------------------------------------------------
- * GLOBAL VARIABLES
- *
- * Naming Convention:
- * i_ Internal variable
- * Not user changable
- * o_ Option variable
- * Normal variable that is user modifiable
- * These variables must always have a valid value
- * d_ Device variable
- * Variables controlling devices
- * clr_ Color variable
- * Holds a color value
- * c_ Character string variable
- * Contains a character string
- * v_ Value variable
- * User modifiable variable associated with the set variable (s_)
- * These variables do not always have a valid value
- * These variables change assumption EZPLOT makes about the plot
- * s_ Set variable.
- * TRUE if associated value variable (v_) has been set by the user
- *---------------------------------------------------------------------------*/
-
-
-struct ezplot_var {
-
-/*-------------*/
-/* USER CURVES */
-/*-------------*/
-
-struct ezp_curve_st curve[MAXCURVES];
-
-/*--------------------*/
-/* INTERNAL VARIABLES */
-/*--------------------*/
-
-bool i_plotimmediate; /* indicates that a call to EZPLOT is a signal
- to print all received arrays. EZSET uses
- this variable to force EZPLOT to replot
- its stored curves */
-int i_numcurves; /* number of curves received by EZPLOT */
-
-/*------------------*/
-/* DEVICE VARIABLES */
-/*------------------*/
-
-bool d_usecrt; /* TRUE if want to use CRT as output device */
-bool d_useprt; /* TRUE if wamt to use printer as output device */
-
-int d_crtmode; /* Controls which crt mode to use for plot */
-int d_prtmode; /* Controls mode of printer output */
-
-int d_xprtbuf, d_yprtbuf; /* Size of printer buffer in pixels */
-
-/*-----------------*/
-/* COLOR VARIABLES */
-/*-----------------*/
-
-int clr_axis; /* color of all axis lines */
-int clr_title; /* color of main title */
-int clr_label; /* color of axis labels */
-int clr_legend; /* color of legend box */
-int clr_grid; /* color of grid lines */
-int clr_number; /* color of axis number labels */
-
-/*------------------*/
-/* OPTION VARIABLES */
-/*------------------*/
-
-int o_reqcurves; /* # of curves specified in CURVES command */
- /* default value is 1, so that a call to EZPLOT
- will force a plot */
-bool o_unknowncurves; /* TRUE when the user specifies that the
- number of curves is unknown */
-
-bool o_ustart, o_ufinish; /* TRUE if user initiates or terminate sgp */
-
-double o_xporigin, o_yporigin; /* origin of plot frame in NDC */
-double o_xlength, o_ylength; /* length of plot frame in NDC */
-
-char c_xlabel[MAXLABEL+1]; /* label for x axis */
-char c_ylabel[MAXLABEL+1]; /* label for y axis */
-char c_title[MAXTITLE+1]; /* title to print above graph */
-char c_legend[MAXLEGEND+1]; /* current legend specified */
-
-int o_linestyle, o_color; /* style to use for curves all subsequent */
- /* curves to EZPLOT */
-bool o_xaxis, o_yaxis; /* Specifies where axis & labels are drawn */
-bool o_grid; /* Flag to draw a grid at major ticks */
-bool o_box; /* Flag to draw a box around the graph */
-
-int o_xticks, o_yticks; /* direction to draw tick marks */
-bool o_xtlabel, o_ytlabel; /* TRUE if label tick marks */
-
-int o_xmajortick, o_ymajortick; /* number of major ticks to draw */
-int o_xminortick, o_yminortick; /* number of minor ticks between major ticks */
-
-int o_symbol; /* Symbol type, (0 = no symbol) */
-int o_symfreq; /* frequency to draw symbols at curve points */
-
-int o_legendbox; /* controls whether legend is inside */
- /* or outside of the axis extents */
-int o_tag; /* controls whether to draw tag at end of axes */
-
-/*-----------------------*/
-/* VALUE & SET variables */
-/*-----------------------*/
-
-double v_xmin, v_xmax, v_ymin, v_ymax; /* user supplied axis endpoints */
-bool s_xmin, s_xmax, s_ymin, s_ymax; /* TRUE is endpoint has been set */
-
-double v_xtitle, v_ytitle; /* NDC position to plot title */
-bool s_xtitle, s_ytitle; /* TRUE if set position for title */
-double v_xcross, v_ycross; /* position that axes cross */
-bool s_xcross, s_ycross; /* TRUE if set axes cross position */
-
-double v_xlegend, v_ylegend; /* upper-left position of legend box in NDC */
-bool s_xlegend, s_ylegend; /* TRUE if set position of legend box */
-
-int v_lxfrac, v_lyfrac; /* number of digits to right of decimal place */
-bool s_lxfrac, s_lyfrac; /* TRUE if set number of fractional digits */
-
-double v_textsize; /* size of text in NDC */
-bool s_textsize; /* TRUE if user set size of text */
-
-}; /* end of EZPLOT VARIABLES */
-
-
-
-extern struct ezplot_var ez;
-extern bool ezplot_firstcall; /* set to false on first call to EZSET or EZPLOT */
-
-
-/* axis.c */
-int axis_scale(double min, double max, int nint, double *minp, double *maxp, int *nintp);
-/* ezplot.c */
-int ezplot(double x[], double y[], int num);
-void ezinit(void);
-void ezfree(void);
-void ezclear(void);
-/* ezplot1d.c */
-void ezplot_1d(double *y, int n);
-/* ezset.c */
-int ezset(char *command);
-/* makefmt.c */
-void make_numfmt(char *fmtstr, int *fldwid, int *nfrac, double min, double max, int nint);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
#endif