//---------------------------------------------------------------------------

#ifndef GrapFuncH
#define GrapFuncH

#define LSTR  101
//---------------------------------------------------------------------------
/*----------------------------------------------------*/
/*   структура, определяющая рисунок                  */
/*----------------------------------------------------*/
typedef struct {
    bool flag_scale;    // флаг вывода масштаба
    bool flag_marker;     // флаг вывода маркеров
    bool flag_max_min;  // флаг максимумов и минимумов
    bool flag_log;      // флаг логарифмической шкалы
    double pf;  /* положение оси X 1/0/-1 */
    double py;  /* положение нуля Y */
    double xr;  /* размер поля графика по X */
    double yr;  /* размер поля графика по Y */
    double stx; /* шаг разметки по X */
    double sty; /* шаг разметки по Y */
    double x0;  /* начало оцифровки оси X */
    double y00; /* начало очифровки оси Y */
    double x;
    double y;
    double pict_x;
    double pict_y;
    int h_font;  // высота символов */
    bool flag_italic;  // наклонный шрифт
    double an;  /* угол наклона строки текстта */
    double mx;  /* масштаб по оси X */
    double my[6];  /* масштаб по оси Y */
    double mf;  /* масштаб функции */
    double Scale_grap;
    char  formx[10];  /* формат оцифровки по оси X */
    char  formy[10];  /* формат оцифровки по оси Y */
    char  NameFont[20];  // Имя шрифта
    char  ei[6][10];     /* единица измерения функции */
    char  mark[10];   /* код маркера */
    char  nx[10];     /* имя функции по оси X */
    char  gx[40];     /* название аргумента */
    char  ny[20];     /* имя шкалы по оси Y */
    char  nf[6][10];     /* имя функции */
    char  gf[6][40];    /* название функции */
    char  str[LSTR];
} GrapOpt;

//---------------------------------------------------------------------------
class TGrapFunc
{
  private:
  double Scale_grap;
  double bx, by;
  double H0;
  double repy;  /* положение оси Y по X */
  char   marker[6];
  int mark_size;
  double hs, hi;


  public:

  void  pSet(GrapOpt* nop, int n_fun, int n_result, int *index_fun, float *x_result, float **matr_result);
  void  pFunc(TMetafileCanvas *pCanvas, GrapOpt* nop);
  int   g_fun_out(TMetafileCanvas *pCanvas, GrapOpt* nop, int num_fun);
  void  pFont(TMetafileCanvas *pCanvas, GrapOpt* nop);
  void  pText(TMetafileCanvas *pCanvas, GrapOpt* nop);
  void  pSetka(TMetafileCanvas *pCanvas, GrapOpt* nop);
  void  pAx_X(TMetafileCanvas *pCanvas, GrapOpt* nop);
  void  pAx_Y(TMetafileCanvas *pCanvas, GrapOpt* nop);
  void  g_vir_(TMetafileCanvas *pCanvas, double t, double y, char *str);
  void  g_ot_(TMetafileCanvas *pCanvas, double x, double y);
  void  g_bot_(TMetafileCanvas *pCanvas, double x, double y);
  void  g_str_(TMetafileCanvas *pCanvas, double x, double y, char *str);
  void  g_mout_(TMetafileCanvas *pCanvas, double x, double y);
  void  g_cyrc_(TMetafileCanvas *pCanvas,double rad);
  void  g_squar_(TMetafileCanvas *pCanvas);
  void  g_trian_(TMetafileCanvas *pCanvas,double ss);
  void  g_smul_(TMetafileCanvas *pCanvas);
  void  g_ssum_(TMetafileCanvas *pCanvas);

        float *x_result;
        float **matr_result;

        int *index_fun;

        int n_fun;
        int n_result;
        int n_text;
        float *x_text;
        float *y_text;
        char  *out_text[240];

};
#endif
