/* GNUPLOT - graphics.h */
/*[
* Copyright 1999, 2004
*
* Permission to use, copy, and distribute this software and its
* documentation for any purpose with or without fee is hereby granted,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation.
*
* Permission to modify the software is granted, but not the right to
* distribute the complete modified source code. Modifications are to
* be distributed as patches to the released version. Permission to
* distribute binaries produced by compiling modified sources is granted,
* provided you
* 1. distribute the corresponding source modifications from the
* released version in the form of a patch file along with the binaries,
* 2. add special version identification to distinguish your version
* in addition to the base release version number,
* 3. provide your name and address as the primary contact for the
* support of your modified version, and
* 4. retain our contact information in regard to use of the base
* software.
* Permission to distribute the released version of the source code along
* with corresponding source modifications in the form of a patch file is
* granted with same provisions 2 through 4 for binary distributions.
*
* This software is provided "as is" without express or implied warranty
* to the extent permitted by applicable law.
]*/
#ifndef GNUPLOT_GRAPHICS_H
# define GNUPLOT_GRAPHICS_H
#include "syscfg.h"
#include "gp_types.h"
#include "gadgets.h"
#include "term_api.h"
#ifndef AXIS_INDEX
#include "axis.h"
#endif
/* types defined for 2D plotting */
typedef struct curve_points {
struct curve_points *next; /* pointer to next plot in linked list */
int token; /* last token used, for second parsing pass */
enum PLOT_TYPE plot_type; /* DATA2D? DATA3D? FUNC2D FUNC3D? NODATA? */
enum PLOT_STYLE plot_style; /* style set by "with" or by default */
char *title; /* plot title, a.k.a. key entry */
t_position *title_position; /* title at {beginning|end|,} */
TBOOLEAN title_no_enhanced; /* don't typeset title in enhanced mode */
TBOOLEAN title_is_automated;/* TRUE if title was auto-generated */
TBOOLEAN title_is_suppressed;/* TRUE if 'notitle' was specified */
TBOOLEAN noautoscale; /* ignore data from this plot during autoscaling */
struct lp_style_type lp_properties;
struct arrow_style_type arrow_properties;
struct fill_style_type fill_properties;
struct text_label *labels; /* Only used if plot_style == LABELPOINTS */
struct t_image image_properties; /* only used if plot_style is IMAGE or RGB_IMAGE */
struct udvt_entry *sample_var; /* used by '+' if plot has private sampling range */
struct udvt_entry *sample_var2; /* used by '++'if plot has private sampling range */
struct udft_entry plot_function; /* action table and dummy variables for function plot */
/* 2D and 3D plot structure fields overlay only to this point */
filledcurves_opts filledcurves_options;
int base_linetype; /* before any calls to load_linetype(), lc variable */
/* analogous to hidden3d_top_linetype in graph3d.h */
struct watch_t *watchlist; /* only used if watch conditions are active */
int ellipseaxes_units; /* Only used if plot_style == ELLIPSES */
struct histogram_style *histogram; /* Only used if plot_style == HISTOGRAM */
int histogram_sequence; /* Ordering of this dataset within the histogram */
enum PLOT_FILTER plot_filter; /* which filter was specified? */
enum PLOT_SMOOTH plot_smooth; /* which "smooth" method to be used? */
double smooth_parameter; /* e.g. optional bandwidth for smooth kdensity */
double smooth_period; /* e.g. 2pi for a circular function */
int boxplot_factors; /* Only used if plot_style == BOXPLOT */
hsteps_opts hsteps_options;
int p_max; /* how many points are allocated */
int p_count; /* count of points in points */
AXIS_INDEX x_axis; /* FIRST_X_AXIS or SECOND_X_AXIS */
AXIS_INDEX y_axis; /* FIRST_Y_AXIS or SECOND_Y_AXIS */
AXIS_INDEX z_axis; /* same as either x_axis or y_axis, for 5-column plot types */
int current_plotno; /* Only used by "pn" option of linespoints */
AXIS_INDEX p_axis; /* Only used for parallel axis plots */
double *varcolor; /* Only used if plot has variable color */
struct coordinate *points;
} curve_points;
/* externally visible variables of graphics.h */
/* 'set offset' status variables */
extern t_position loff, roff, toff, boff;
extern TBOOLEAN retain_offsets;
/* 'set bar' status */
extern double bar_size;
extern int bar_layer;
extern struct lp_style_type bar_lp;
/* 'set rgbmax {0|255}' */
extern double rgbmax;
/* function prototypes */
void do_plot(struct curve_points *, int);
void map_position(struct position * pos, int *x, int *y, const char *what);
void map_position_r(struct position* pos, double* x, double* y, const char* what);
void init_histogram(struct histogram_style *hist, text_label *title);
void free_histlist(struct histogram_style *hist);
typedef enum en_procimg_action {
IMG_PLOT,
IMG_UPDATE_AXES,
IMG_UPDATE_CORNERS
} t_procimg_action;
void process_image(void *plot, t_procimg_action action);
TBOOLEAN check_for_variable_color(struct curve_points *plot, double *colorvalue);
void autoscale_boxplot(struct curve_points *plot);
void place_objects(struct object *listhead, int layer, int dimensions);
void do_ellipse(int dimensions, t_ellipse *e, int style, TBOOLEAN do_own_mapping );
void do_sector(double cx, double cy, double rin, double rout, double arc_begin, double arc_end, double ratio, int style, TBOOLEAN complete_circle);
void place_pixmaps(int layer, int dimensions);
int filter_boxplot(struct curve_points *);
void attach_title_to_plot(struct curve_points *this_plot, legend_key *key);
/* Only used in hsteps style */
#define HSTEPS_DIR_BOTHSIDES 0
#define HSTEPS_DIR_FORWARD 1
#define HSTEPS_DIR_BACKWARD 2
#endif /* GNUPLOT_GRAPHICS_H */