/* * FIG : Facility for Interactive Generation of figures * Copyright (c) 1985 by Supoj Sutanthavibul * Parts Copyright (c) 1994 by Brian V. Smith * Parts Copyright (c) 1991 by Paul King * * The X Consortium, and any party obtaining a copy of these files from * the X Consortium, directly or indirectly, is granted, free of charge, a * full and unrestricted irrevocable, world-wide, paid up, royalty-free, * nonexclusive right and license to deal in this software and * documentation files (the "Software"), including without limitation the * rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons who receive * copies from any such party to do so, with the only requirement being * that this copyright notice remain intact. This license includes without * limitation a license to do the foregoing actions under any patents of * the party supplying this software to the X Consortium. */ /* This file has been modified for use with Gnuplot 3.6 by * Ian MacPhedran. */ /* DEFAULT is used for many things - font, color etc */ #define DEFAULT (-1) #define SOLID_LINE 0 #define DASH_LINE 1 #define DOTTED_LINE 2 #define RUBBER_LINE 3 #define PANEL_LINE 4 #define Color int #define BLACK 0 #define BLUE 1 #define GREEN 2 #define CYAN 3 #define RED 4 #define MAGENTA 5 #define YELLOW 6 #define WHITE 7 /** VERY IMPORTANT: The f_line, f_spline and f_arc objects all must have the components up to and including the arrows in the same order. This is for the get/put_generic_arrows() in e_edit.c. **/ typedef struct f_point { int x, y; } F_point; typedef struct f_pos { int x, y; } F_pos; #define DEF_ARROW_WID (4 * ZOOM_FACTOR) #define DEF_ARROW_HT (8 * ZOOM_FACTOR) typedef struct f_arrow { int type; int style; float thickness; float wid; float ht; } F_arrow; typedef struct f_ellipse { int tagged; int distrib; int type; #define T_ELLIPSE_BY_RAD 1 #define T_ELLIPSE_BY_DIA 2 #define T_CIRCLE_BY_RAD 3 #define T_CIRCLE_BY_DIA 4 int style; int thickness; Color pen_color; Color fill_color; int fill_style; int depth; float style_val; int pen_style; float angle; int direction; #define UNFILLED -1 struct f_pos center; struct f_pos radiuses; struct f_pos start; struct f_pos end; struct f_ellipse *next; } F_ellipse; /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_arc STRUCTURE */ typedef struct f_arc { int tagged; int distrib; int type; /* note: these arc types are the internal values */ /* in the file, they are open=1, wedge=2 */ #define T_OPEN_ARC 0 #define T_PIE_WEDGE_ARC 1 int style; int thickness; Color pen_color; Color fill_color; int fill_style; int depth; int pen_style; struct f_arrow *for_arrow; struct f_arrow *back_arrow; /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */ int cap_style; float style_val; int direction; struct { float x, y; } center; struct f_pos point[3]; struct f_arc *next; } F_arc; #define CLOSED_PATH 0 #define OPEN_PATH 1 #define DEF_BOXRADIUS 7 #define DEF_DASHLENGTH 4 #define DEF_DOTGAP 3 typedef struct f_pic { #ifndef PATH_MAX #define PATH_MAX 128 #endif char file[PATH_MAX]; int subtype; #define T_PIC_EPS 1 #define T_PIC_BITMAP 2 #define T_PIC_PIXMAP 3 #define T_PIC_GIF 4 #define FileInvalid -2 int flipped; unsigned char *bitmap; int numcols; /* number of colors in cmap */ float hw_ratio; int size_x, size_y; /* fig units */ struct f_pos bit_size; /* pixels */ Color color; /* only used for XBM */ int pix_rotation, pix_width, pix_height, pix_flipped; } F_pic; extern char EMPTY_PIC[]; /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_line STRUCTURE */ typedef struct f_line { int tagged; int distrib; int type; #define T_POLYLINE 1 #define T_BOX 2 #define T_POLYGON 3 #define T_ARC_BOX 4 #define T_PIC_BOX 5 int style; int thickness; Color pen_color; Color fill_color; int fill_style; int depth; int pen_style; struct f_arrow *for_arrow; struct f_arrow *back_arrow; /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */ int cap_style; /* line cap style - Butt, Round, Bevel */ #define CAP_BUTT 0 #define CAP_ROUND 1 #define CAP_PROJECT 2 struct f_point *points; /* this must immediately follow cap_style */ int join_style; /* join style - Miter, Round, Bevel */ #define JOIN_MITER 0 #define JOIN_ROUND 1 #define JOIN_BEVEL 2 float style_val; int radius; /* corner radius for T_ARC_BOX */ struct f_pic *pic; struct f_line *next; } F_line; typedef struct f_text { int tagged; int distrib; int type; #define T_LEFT_JUSTIFIED 0 #define T_CENTER_JUSTIFIED 1 #define T_RIGHT_JUSTIFIED 2 int font; /* PIX_FONT fontstruct; */ int size; /* point size */ Color color; int depth; float angle; /* in radians */ int flags; #define RIGID_TEXT 1 #define SPECIAL_TEXT 2 #define PSFONT_TEXT 4 #define HIDDEN_TEXT 8 int ascent; /* Fig units */ int length; /* Fig units */ int descent; /* from XTextExtents(), not in file */ int base_x; int base_y; int pen_style; char *cstring; struct f_text *next; } F_text; #define MAXFONT(T) (psfont_text(T) ? NUM_FONTS : NUM_LATEX_FONTS) #define rigid_text(t) \ (t->flags == DEFAULT \ || (t->flags & RIGID_TEXT)) #define special_text(t) \ ((t->flags != DEFAULT \ && (t->flags & SPECIAL_TEXT))) #define psfont_text(t) \ (t->flags != DEFAULT \ && (t->flags & PSFONT_TEXT)) #define hidden_text(t) \ (t->flags != DEFAULT \ && (t->flags & HIDDEN_TEXT)) #define text_length(t) \ (hidden_text(t) ? hidden_text_length : t->length) #define using_ps (cur_textflags & PSFONT_TEXT) typedef struct f_control { float lx, ly, rx, ry; struct f_control *next; } F_control; /* SEE NOTE AT TOP BEFORE CHANGING ANYTHING IN THE f_spline STRUCTURE */ #define int_spline(s) (s->type & 0x2) #define normal_spline(s) (!(s->type & 0x2)) #define closed_spline(s) (s->type & 0x1) #define open_spline(s) (!(s->type & 0x1)) typedef struct f_spline { int tagged; int distrib; int type; #define T_OPEN_NORMAL 0 #define T_CLOSED_NORMAL 1 #define T_OPEN_INTERP 2 #define T_CLOSED_INTERP 3 int style; int thickness; Color pen_color; Color fill_color; int fill_style; int depth; int pen_style; struct f_arrow *for_arrow; struct f_arrow *back_arrow; /* THE PRECEDING VARS MUST BE IN THE SAME ORDER IN f_arc, f_line and f_spline */ int cap_style; /* * For T_OPEN_NORMAL and T_CLOSED_NORMAL points are control points while * they are knots for T_OPEN_INTERP and T_CLOSED_INTERP whose control * points are stored in controls. */ struct f_point *points; /* this must immediately follow cap_style */ float style_val; struct f_control *controls; struct f_spline *next; } F_spline; typedef struct f_compound { int tagged; int distrib; struct f_pos nwcorner; struct f_pos secorner; struct f_line *lines; struct f_ellipse *ellipses; struct f_spline *splines; struct f_text *texts; struct f_arc *arcs; struct f_compound *compounds; struct f_compound *next; } F_compound; typedef struct f_linkinfo { struct f_line *line; struct f_point *endpt; struct f_point *prevpt; int two_pts; struct f_linkinfo *next; } F_linkinfo; /* separate the "type" and the "style" from the cur_arrowtype */ #define ARROW_TYPE(x) ((x)==0? 0 : ((x)+1)/2) #define ARROW_STYLE(x) ((x)==0? 0 : ((x)+1)%2) #define ARROW_SIZE sizeof(struct f_arrow) #define POINT_SIZE sizeof(struct f_point) #define CONTROL_SIZE sizeof(struct f_control) #define ELLOBJ_SIZE sizeof(struct f_ellipse) #define ARCOBJ_SIZE sizeof(struct f_arc) #define LINOBJ_SIZE sizeof(struct f_line) #define TEXOBJ_SIZE sizeof(struct f_text) #define SPLOBJ_SIZE sizeof(struct f_spline) #define COMOBJ_SIZE sizeof(struct f_compound) #define PIC_SIZE sizeof(struct f_pic) #define LINKINFO_SIZE sizeof(struct f_linkinfo) /********************** object codes **********************/ #define O_COLOR_DEF 0 #define O_ELLIPSE 1 #define O_POLYLINE 2 #define O_SPLINE 3 /* HBB 990329: quick hack: 'O_TEXT' is in use by header * on DOS/Windows platforms. Renamed to OBJ_TEXT */ #define OBJ_TEXT 4 #define O_ARC 5 #define O_COMPOUND 6 #define O_END_COMPOUND -O_COMPOUND #define O_ALL_OBJECT 99 /********************* object masks for update ************************/ #define M_NONE 0x000 #define M_POLYLINE_POLYGON 0x001 #define M_POLYLINE_LINE 0x002 #define M_POLYLINE_BOX 0x004 /* includes ARCBOX */ #define M_SPLINE_O_NORMAL 0x008 #define M_SPLINE_C_NORMAL 0x010 #define M_SPLINE_O_INTERP 0x020 #define M_SPLINE_C_INTERP 0x040 #define M_TEXT_NORMAL 0x080 #define M_TEXT_HIDDEN 0x100 #define M_ARC 0x200 #define M_ELLIPSE 0x400 #define M_COMPOUND 0x800 #define M_TEXT (M_TEXT_HIDDEN | M_TEXT_NORMAL) #define M_SPLINE_O (M_SPLINE_O_NORMAL | M_SPLINE_O_INTERP) #define M_SPLINE_C (M_SPLINE_C_NORMAL | M_SPLINE_C_INTERP) #define M_SPLINE_NORMAL (M_SPLINE_O_NORMAL | M_SPLINE_C_NORMAL) #define M_SPLINE_INTERP (M_SPLINE_O_INTERP | M_SPLINE_C_INTERP) #define M_SPLINE (M_SPLINE_NORMAL | M_SPLINE_INTERP) #define M_POLYLINE (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_POLYLINE_BOX) #define M_VARPTS_OBJECT (M_POLYLINE_LINE | M_POLYLINE_POLYGON | M_SPLINE) #define M_OPEN_OBJECT (M_POLYLINE_LINE | M_SPLINE_O | M_ARC) #define M_ROTATE_ANGLE (M_VARPTS_OBJECT | M_ARC | M_TEXT | M_COMPOUND | M_ELLIPSE) #define M_ELLTEXTANGLE (M_ELLIPSE | M_TEXT) #define M_OBJECT (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_TEXT | M_ARC) #define M_NO_TEXT (M_ELLIPSE | M_POLYLINE | M_SPLINE | M_COMPOUND | M_ARC) #define M_ALL (M_OBJECT | M_COMPOUND) /************************ Objects **********************/ extern F_compound objects; /************ global working pointers ************/ extern F_line *cur_l, *new_l, *old_l; extern F_arc *cur_a, *new_a, *old_a; extern F_ellipse *cur_e, *new_e, *old_e; extern F_text *cur_t, *new_t, *old_t; extern F_spline *cur_s, *new_s, *old_s; extern F_compound *cur_c, *new_c, *old_c; extern F_point *first_point, *cur_point; extern F_linkinfo *cur_links; /*************** object attribute settings ***********/ /* Lines */ extern int cur_linewidth; extern int cur_linestyle; extern int cur_joinstyle; extern int cur_capstyle; extern float cur_dashlength; extern float cur_dotgap; extern float cur_styleval; extern Color cur_fillcolor, cur_pencolor; extern int cur_fillstyle, cur_penstyle; extern int cur_boxradius; extern int cur_arrowmode; extern int cur_arrowtype; extern int cur_arctype; /* Text */ extern int cur_fontsize; /* font size */ extern int cur_latex_font; extern int cur_ps_font; extern int cur_textjust; extern int cur_textflags; /* Misc */ extern float cur_elltextangle;