-
Notifications
You must be signed in to change notification settings - Fork 99
Expand file tree
/
Copy pathgadgets.h
More file actions
724 lines (616 loc) · 26 KB
/
gadgets.h
File metadata and controls
724 lines (616 loc) · 26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
/* GNUPLOT - gadgets.h */
/*[
* Copyright 2000, 2004 Thomas Williams, Colin Kelley
*
* 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_GADGETS_H
# define GNUPLOT_GADGETS_H
#include "syscfg.h"
#include "term_api.h"
/* The files gadgets.* are for types and variables describing graphical plot
* elements that are not terminal-specific, are used by both 2D and 3D plots,
* and are not assignable to any particular axis. I.e. they do not belong in
* any of {term_api.h graphics.h graph3d.h axis.h}.
*/
/* Default point size is taken from the global "pointsize" variable */
#define PTSZ_DEFAULT (-2)
#define PTSZ_VARIABLE (-3)
#define AS_VARIABLE (-3)
/* Type definitions */
/* Coordinate system specifications: x1/y1, x2/y2, graph-box relative
* or screen relative coordinate systems */
typedef enum position_type {
first_axes,
second_axes,
graph,
screen,
character,
polar_axes
} position_type;
/* A full 3D position, with all 3 coordinates of possible using different axes.
* Used for 'set label', 'set arrow' positions and various offsets.
*/
typedef struct position {
enum position_type scalex,scaley,scalez;
double x,y,z;
} t_position;
/* Linked list of structures storing 'set label' information */
typedef struct text_label {
struct text_label *next; /* pointer to next label in linked list */
int tag; /* identifies the label */
t_position place;
enum JUSTIFY pos; /* left/center/right horizontal justification */
float rotate;
int layer;
int boxed; /* 0 no box; -1 default box props; >0 boxstyle */
char *text;
char *font; /* Entry font added by DJL */
struct t_colorspec textcolor;
struct lp_style_type lp_properties;
struct position offset;
TBOOLEAN noenhanced;
TBOOLEAN hypertext;
TBOOLEAN hidden;
} text_label;
#define LABEL_TAG_PLOTLABELS -1
#define LABEL_TAG_NONROTATING -2
#define LABEL_TAG_ROTATE_IN_3D -3
#define LABEL_TAG_VARIABLE_ROTATE -4
#define LABEL_TAG_WATCH_MOUSE -5
#define LABEL_TAG_WATCH_X -6
#define LABEL_TAG_WATCH_Y -7
#define LABEL_TAG_WATCH_Z -8
#define LABEL_TAG_WATCH_FUNCTION -9
/* This is the default state for the axis, timestamp, and plot title labels */
#define EMPTY_LABELSTRUCT \
{NULL, LABEL_TAG_NONROTATING, \
{character, character, character, 0.0, 0.0, 0.0}, CENTRE, 0, 0, \
0, \
NULL, NULL, BLACK_COLORSPEC, DEFAULT_LP_STYLE_TYPE, \
{character, character, character, 0.0, 0.0, 0.0}, \
FALSE, FALSE, FALSE}
/* Data structure for implementing 'set arrow' */
typedef enum arrow_type {
arrow_end_absolute,
arrow_end_relative,
arrow_end_oriented,
arrow_end_undefined
} arrow_type;
typedef struct arrow_def {
struct arrow_def *next; /* pointer to next arrow in linked list */
int tag; /* identifies the arrow */
arrow_type type; /* how to interpret t_position end */
t_position start;
t_position end;
double angle; /* angle in degrees if type arrow_end_oriented */
struct arrow_style_type arrow_properties;
} arrow_def;
/* The object types supported so far are OBJ_RECTANGLE, OBJ_CIRCLE, and OBJ_ELLIPSE */
typedef struct rectangle {
int type; /* 0 = corners; 1 = center + size */
t_position center; /* center */
t_position extent; /* width and height */
t_position bl; /* bottom left */
t_position tr; /* top right */
} t_rectangle;
#define DEFAULT_RADIUS (-1.0)
#define DEFAULT_ELLIPSE (-2.0)
typedef struct circle {
int type; /* not used */
t_position center; /* center */
t_position extent; /* radius */
double arc_begin;
double arc_end;
TBOOLEAN wedge; /* TRUE = connect arc ends to center */
} t_circle;
#define ELLIPSEAXES_XY (0)
#define ELLIPSEAXES_XX (1)
#define ELLIPSEAXES_YY (2)
typedef struct ellipse {
int type; /* mapping of axes: ELLIPSEAXES_XY, ELLIPSEAXES_XX or ELLIPSEAXES_YY */
t_position center; /* center */
t_position extent; /* major and minor axes */
double orientation; /* angle of first axis to horizontal */
} t_ellipse;
typedef struct polygon {
int type; /* Number of vertices */
t_position *vertex; /* Array of vertices */
} t_polygon;
typedef enum en_clip_object {
OBJ_CLIP, /* Clip to graph unless coordinate type is screen */
OBJ_NOCLIP, /* Clip to canvas, never to graph */
OBJ_ALWAYS_CLIP /* Not yet implemented */
} t_clip_object;
/* Datastructure for 'set object' */
typedef struct object {
struct object *next;
int tag;
int layer; /* behind or back or front */
int object_type; /* e.g. OBJ_RECTANGLE */
t_clip_object clip;
fill_style_type fillstyle;
lp_style_type lp_properties;
union o {t_rectangle rectangle; t_circle circle; t_ellipse ellipse; t_polygon polygon;} o;
} t_object;
#define OBJ_RECTANGLE (1)
#define OBJ_CIRCLE (2)
#define OBJ_ELLIPSE (3)
#define OBJ_POLYGON (4)
/* Datastructure implementing 'set dashtype' */
struct custom_dashtype_def {
struct custom_dashtype_def *next; /* pointer to next dashtype in linked list */
int tag; /* identifies the dashtype */
int d_type; /* for DASHTYPE_SOLID or CUSTOM */
struct t_dashtype dashtype;
};
/* Datastructure implementing 'set style line' */
struct linestyle_def {
struct linestyle_def *next; /* pointer to next linestyle in linked list */
int tag; /* identifies the linestyle */
struct lp_style_type lp_properties;
};
/* Datastructure implementing 'set style arrow' */
struct arrowstyle_def {
struct arrowstyle_def *next;/* pointer to next arrowstyle in linked list */
int tag; /* identifies the arrowstyle */
struct arrow_style_type arrow_properties;
};
/* Datastructure for 'set pixmap */
typedef struct t_pixmap {
int tag; /* index referring to this pixmap */
struct t_pixmap *next; /* pointer to next pixmap in the linked list */
unsigned int ncols, nrows; /* image size */
t_position pin; /* where it goes */
t_position extent; /* width dx; dy implicitly dx*aspect_ratio */
int layer; /* front/back/behind */
TBOOLEAN center; /* position is center rather than lower left */
char *filename; /* where to read the pixmap pixmap */
char *colormapname; /* the colormap this was taken from */
coordval *image_data; /* pixel array RGBARGBA... */
} t_pixmap;
/* Used by 'set style parallelaxis' and 'set style spiderplot' */
struct pa_style {
lp_style_type lp_properties;/* used to draw the axes themselves */
int layer; /* front/back */
};
#define DEFAULT_PARALLEL_AXIS_STYLE \
{{0, LT_BLACK, 0, DASHTYPE_SOLID, 0, 0, 2.0, 0.0, DEFAULT_P_CHAR, BLACK_COLORSPEC, DEFAULT_DASHPATTERN}, LAYER_FRONT}
struct spider_web {
lp_style_type lp_properties;
fill_style_type fillstyle;
};
extern struct spider_web spiderplot_style;
#define DEFAULT_SPIDERPLOT_STYLE \
{ DEFAULT_LP_STYLE_TYPE, {FS_EMPTY, 100, 0, DEFAULT_COLORSPEC} }
/* The stacking direction of the key box: (vertical, horizontal) */
typedef enum en_key_stack_direction {
GPKEY_VERTICAL,
GPKEY_HORIZONTAL
} t_key_stack_direction;
/* The region, with respect to the border, key is located: (inside, outside) */
typedef enum en_key_region {
GPKEY_AUTO_INTERIOR_LRTBC, /* Auto placement, left/right/top/bottom/center */
GPKEY_AUTO_EXTERIOR_LRTBC, /* Auto placement, left/right/top/bottom/center */
GPKEY_AUTO_EXTERIOR_MARGIN, /* Auto placement, margin plus lrc or tbc */
GPKEY_USER_PLACEMENT /* User specified placement */
} t_key_region;
/* If exterior, there are 12 possible auto placements. Since
left/right/center with top/bottom/center can only define 9
locations, further subdivide the exterior region into four
subregions for which left/right/center (TMARGIN/BMARGIN)
and top/bottom/center (LMARGIN/RMARGIN) creates 12 locations. */
typedef enum en_key_ext_region {
GPKEY_TMARGIN,
GPKEY_BMARGIN,
GPKEY_LMARGIN,
GPKEY_RMARGIN
} t_key_ext_region;
/* Key sample to the left or the right of the plot title? */
typedef enum en_key_sample_positioning {
GPKEY_LEFT,
GPKEY_RIGHT
} t_key_sample_positioning;
typedef struct {
enum filledcurves_opts_id closeto; /* from list FILLEDCURVES_CLOSED, ... */
int oneside; /* -1 if fill below bound only; +1 if fill above bound only */
double at; /* value for FILLEDCURVES_AT... */
double aty; /* the other value for FILLEDCURVES_ATXY */
} filledcurves_opts;
#define EMPTY_FILLEDCURVES_OPTS { FILLEDCURVES_DEFAULT, 0, 0.0, 0.0 }
typedef enum histogram_type {
HT_NONE,
HT_STACKED_IN_LAYERS,
HT_STACKED_IN_TOWERS,
HT_CLUSTERED,
HT_ERRORBARS
} t_histogram_type;
typedef struct histogram_style {
t_histogram_type type; /* enum t_histogram_type */
int gap; /* set style hist gap <n> (space between clusters) */
int clustersize; /* number of datasets in this histogram */
TBOOLEAN keyentry; /* FALSE suppresses extra blank line in key */
double start; /* X-coord of first histogram entry */
double end; /* X-coord of last histogram entry */
int startcolor; /* LT_UNDEFINED or explicit color for first entry */
int startpattern; /* LT_UNDEFINED or explicit pattern for first entry */
double bar_lw; /* linewidth for error bars */
struct histogram_style *next;
struct text_label title;
} histogram_style;
#define DEFAULT_HISTOGRAM_STYLE { HT_CLUSTERED, 2, 1, TRUE, 0.0, 0.0, LT_UNDEFINED, LT_UNDEFINED, 0, NULL, EMPTY_LABELSTRUCT }
typedef enum en_boxplot_factor_labels {
BOXPLOT_FACTOR_LABELS_OFF,
BOXPLOT_FACTOR_LABELS_AUTO,
BOXPLOT_FACTOR_LABELS_X,
BOXPLOT_FACTOR_LABELS_X2
} t_boxplot_factor_labels;
#define DEFAULT_BOXPLOT_FACTOR -1
typedef struct boxplot_style {
int limit_type; /* 0 = multiple of interquartile 1 = fraction of points */
double limit_value;
TBOOLEAN outliers;
int pointtype;
int plotstyle; /* CANDLESTICKS or FINANCEBARS */
double median_linewidth;
double separation; /* of boxplots if there are more than one factors */
t_boxplot_factor_labels labels; /* Which axis to put the tic labels if there are factors */
TBOOLEAN sort_factors; /* Sort factors in alphabetical order? */
} boxplot_style;
extern boxplot_style boxplot_opts;
#define DEFAULT_BOXPLOT_STYLE { 0, 1.5, TRUE, 6, CANDLESTICKS, -1.0, 1.0, BOXPLOT_FACTOR_LABELS_AUTO, FALSE }
typedef struct textbox_style {
TBOOLEAN opaque; /* True if the box is background-filled before writing into it */
TBOOLEAN noborder; /* True if you want fill only, no lines */
double xmargin; /* fraction of default margin to use */
double ymargin; /* fraction of default margin to use */
double linewidth; /* applied to border */
t_colorspec border_color; /* TC_LT + LT_NODRAW is "noborder" */
t_colorspec fillcolor; /* only used if opaque is TRUE */
} textbox_style;
#define DEFAULT_TEXTBOX_STYLE { FALSE, FALSE, 1.0, 1.0, 1.0, BLACK_COLORSPEC, BACKGROUND_COLORSPEC }
typedef struct hsteps_options {
double offset;
int direction;
TBOOLEAN baseline;
TBOOLEAN link;
TBOOLEAN split;
} hsteps_opts;
#define DEFAULT_HSTEPS_OPTS { 0, HSTEPS_DIR_BOTHSIDES, TRUE, TRUE, FALSE }
/*
* Used by dgrid3d in 3D gridding
* and polar_grid in 2D polar gridding
*/
typedef enum en_dgrid3d_mode {
DGRID3D_DEFAULT,
DGRID3D_QNORM,
DGRID3D_SPLINES,
DGRID3D_GAUSS,
DGRID3D_EXP,
DGRID3D_CAUCHY,
DGRID3D_BOX,
DGRID3D_HANN,
DGRID3D_OTHER
} t_dgrid3d_mode;
/***********************************************************/
/* Variables defined by gadgets.c needed by other modules. */
/***********************************************************/
/* bounding box position, in terminal coordinates */
typedef struct {
int xleft;
int xright;
int ybot;
int ytop;
} BoundingBox;
/* EAM Feb 2003 - Move all global variables related to key into a */
/* single structure. Eventually this will allow multiple keys. */
typedef enum keytitle_type {
NOAUTO_KEYTITLES, FILENAME_KEYTITLES, COLUMNHEAD_KEYTITLES
} keytitle_type;
typedef struct {
TBOOLEAN visible; /* Do we show this key at all? */
t_key_region region; /* if so: where? */
t_key_ext_region margin; /* if exterior: where outside? */
struct position user_pos; /* if user specified position, this is it */
struct position user_width; /* "require width <position>" */
int user_cols; /* "require columns <int>" */
VERT_JUSTIFY vpos; /* otherwise these guide auto-positioning */
JUSTIFY hpos;
TBOOLEAN fixed; /* prevents key in 3D plot from rotating/scaling with plot */
t_key_sample_positioning just;
t_key_stack_direction stack_dir;
double swidth; /* 'width' of the linestyle sample line in the key */
double vert_factor; /* user specified vertical spacing multiplier */
double width_fix; /* user specified additional (+/-) width of key titles */
double height_fix;
keytitle_type auto_titles; /* auto title curves unless plotted 'with notitle' */
TBOOLEAN front; /* draw key in a second pass after the rest of the graph */
TBOOLEAN reverse; /* key back to front */
TBOOLEAN invert; /* key top to bottom */
TBOOLEAN enhanced; /* enable/disable enhanced text of key titles */
struct lp_style_type box; /* linetype of box around key: */
char *font; /* Will be used for both key title and plot titles */
struct t_colorspec textcolor; /* Will be used for both key title and plot titles */
struct t_colorspec fillcolor; /* only used if "set key front" */
BoundingBox bounds;
int maxcols; /* maximum no of columns for horizontal keys */
int maxrows; /* maximum no of rows for vertical keys */
text_label title; /* holds title line for the key as a whole */
struct position offset; /* manual displacement of the entire key */
} legend_key;
extern legend_key keyT;
#define DEFAULT_KEYBOX_LP {0, LT_NODRAW, 0, DASHTYPE_SOLID, 0, 0, 1.0, PTSZ_DEFAULT, DEFAULT_P_CHAR, BLACK_COLORSPEC, DEFAULT_DASHPATTERN}
#define DEFAULT_KEY_POSITION { graph, graph, graph, 0.9, 0.9, 0. }
#define DEFAULT_KEY_WIDTH { graph, graph, graph, 0., 0., 0. }
/*
* EAM Jan 2006 - Move colorbox structure definition to here from color.h
* in order to be able to use struct position
*/
#define SMCOLOR_BOX_NO 'n'
#define SMCOLOR_BOX_DEFAULT 'd'
#define SMCOLOR_BOX_USER 'u'
typedef struct {
char where;
/* where
SMCOLOR_BOX_NO .. do not draw the colour box
SMCOLOR_BOX_DEFAULT .. draw it at default position and size
SMCOLOR_BOX_USER .. draw it at the position given by user
*/
char rotation; /* 'v' or 'h' vertical or horizontal box */
char border; /* if non-null, a border will be drawn around the box (default) */
int border_lt_tag;
int layer; /* front or back */
int xoffset; /* To adjust left or right, e.g. for y2tics */
struct position origin;
struct position size;
TBOOLEAN invert; /* gradient low->high runs top->bot rather than bot->top */
BoundingBox bounds;
} color_box_struct;
extern color_box_struct color_box;
extern color_box_struct default_color_box;
/* Holder for various image properties */
typedef struct t_image {
t_imagecolor type; /* See above */
TBOOLEAN fallback; /* true == don't use terminal-specific code */
unsigned int ncols, nrows; /* image dimensions */
} t_image;
extern BoundingBox plot_bounds; /* Plot Boundary */
extern BoundingBox page_bounds; /* 3D boundary prior to view transformation */
extern BoundingBox canvas; /* Writable area on terminal */
extern BoundingBox *clip_area; /* Current clipping box */
extern float xsize; /* x scale factor for size */
extern float ysize; /* y scale factor for size */
extern float zsize; /* z scale factor for size */
extern float xoffset; /* x origin setting */
extern float yoffset; /* y origin setting */
extern float aspect_ratio; /* 1.0 for square */
extern int aspect_ratio_3D; /* 2 for equal scaling of x and y; 3 for z also */
extern double boxwidth;
extern TBOOLEAN boxwidth_is_absolute;
/* plot border autosizing overrides, in characters (-1: autosize) */
extern t_position lmargin, bmargin, rmargin, tmargin;
#define DEFAULT_MARGIN_POSITION {character, character, character, -1, -1, -1}
extern struct custom_dashtype_def *first_custom_dashtype;
extern struct arrow_def *first_arrow;
extern struct text_label *first_label;
extern struct linestyle_def *first_linestyle;
extern struct linestyle_def *first_perm_linestyle;
extern struct linestyle_def *first_mono_linestyle;
extern struct arrowstyle_def *first_arrowstyle;
extern struct t_pixmap *pixmap_listhead;
extern struct pa_style parallel_axis_style;
extern struct object *first_object;
extern struct object grid_wall[];
extern text_label title;
extern text_label timelabel;
#ifndef DEFAULT_TIMESTAMP_FORMAT
/* asctime() format */
# define DEFAULT_TIMESTAMP_FORMAT "%a %b %d %H:%M:%S %Y"
#endif
extern int timelabel_bottom;
extern TBOOLEAN polar;
extern TBOOLEAN spiderplot;
extern TBOOLEAN inverted_raxis; /* true if R_AXIS.set_min > R_AXIS.set_max */
#define ZERO 1e-8 /* default for 'zero' set option */
extern double zero; /* zero threshold, not 0! */
extern double pointsize;
extern double pointintervalbox;
extern t_colorspec background_fill;
#define SOUTH 1 /* 0th bit */
#define WEST 2 /* 1th bit */
#define NORTH 4 /* 2th bit */
#define EAST 8 /* 3th bit */
#define border_east (draw_border & EAST)
#define border_west (draw_border & WEST)
#define border_south (draw_border & SOUTH)
#define border_north (draw_border & NORTH)
extern int draw_border;
extern int user_border;
extern int border_layer;
extern TBOOLEAN cornerpoles;
extern struct lp_style_type border_lp;
extern const struct lp_style_type background_lp;
extern const struct lp_style_type default_border_lp;
extern TBOOLEAN clip_lines1;
extern TBOOLEAN clip_lines2;
extern TBOOLEAN clip_points;
extern TBOOLEAN clip_radial;
#define SAMPLES 100 /* default number of samples for a plot */
extern int samples_1;
extern int samples_2;
extern double ang2rad; /* 1 or pi/180 */
extern enum PLOT_STYLE data_style;
extern enum PLOT_STYLE func_style;
extern TBOOLEAN parametric;
extern TBOOLEAN in_parametric;
/* If last plot was a 3d one. */
extern TBOOLEAN is_3d_plot;
/* A macro to check whether 2D functionality is allowed in the last plot:
either the plot is a 2D plot, or it is a suitably oriented 3D plot (e.g. map).
*/
#define ALMOST2D \
( !is_3d_plot || splot_map || \
( fabs(fmod(surface_rot_z,90.0))<0.1 \
&& fabs(fmod(surface_rot_x,180.0))<0.1 ) )
typedef enum E_Refresh_Allowed {
E_REFRESH_NOT_OK = 0,
E_REFRESH_OK_2D = 2,
E_REFRESH_OK_3D = 3
} TRefresh_Allowed;
extern TRefresh_Allowed refresh_ok;
# define SET_REFRESH_OK(ok, nplots) do { \
refresh_ok = (ok); \
refresh_nplots = (nplots); \
} while(0)
extern int refresh_nplots;
extern TBOOLEAN volatile_data;
/* WINDOWID to be filled by terminals running on X11 (x11, wxt, qt, ...) */
extern int current_x11_windowid;
/* Plot layer definitions are collected here. */
#define LAYER_BEHIND -1
#define LAYER_BACK 0
#define LAYER_FRONT 1
#define LAYER_FOREGROUND 2 /* used only for axis tic labels */
#define LAYER_FRONTBACK 4 /* used only by grid walls */
#define LAYER_DEPTHORDER 8 /* for objects to be included in pm3d depth sorting */
#define LAYER_PLOT 16 /* currently used only by fig.trm */
#define LAYER_PLOTLABELS 99
/* Functions exported by gadgets.c */
/* initialization (called once on program entry */
void init_gadgets(void);
/* moved here from util3d: */
int draw_clip_line(int, int, int, int);
void draw_clip_polygon(int , gpiPoint *);
void draw_clip_arrow(double, double, double, double, t_arrow_head);
void clip_polygon(gpiPoint *, gpiPoint *, int , int *);
int clip_point(int, int);
/* moved here from graph3d: */
void clip_move(int x, int y);
void clip_vector(int x, int y);
void draw_polar_clip_line(double, double, double, double);
/* Common routines for setting line or text color from t_colorspec */
void apply_pm3dcolor(struct t_colorspec *tc);
void reset_textcolor(const struct t_colorspec *tc);
/* Timestamp code shared by 2D and 3D */
void do_timelabel(int x, int y);
extern fill_style_type default_fillstyle;
/* Warning: C89 does not like the union initializers */
extern struct object default_rectangle;
#define DEFAULT_RECTANGLE_STYLE { NULL, -1, 0, OBJ_RECTANGLE, OBJ_CLIP, \
{FS_SOLID, 100, 0, BLACK_COLORSPEC}, \
{0, LT_BACKGROUND, 0, DASHTYPE_SOLID, 0, 0, 1.0, 0.0, DEFAULT_P_CHAR, BACKGROUND_COLORSPEC, DEFAULT_DASHPATTERN}, \
{.rectangle = {0, {0,0,0,0.,0.,0.}, {0,0,0,0.,0.,0.}, {0,0,0,0.,0.,0.}, {0,0,0,0.,0.,0.}}} }
extern struct object default_circle;
#define DEFAULT_CIRCLE_STYLE { NULL, -1, 0, OBJ_CIRCLE, OBJ_CLIP, \
{FS_EMPTY, 100, 0, {TC_DEFAULT, -2, 0}}, \
{0, LT_BACKGROUND, 0, DASHTYPE_SOLID, 0, 0, 1.0, 0.0, DEFAULT_P_CHAR, BLACK_COLORSPEC, DEFAULT_DASHPATTERN}, \
{.circle = {1, {0,0,0,0.,0.,0.}, {graph,0,0,0.02,0.,0.}, 0., 360., TRUE }} }
extern struct object default_ellipse;
#define DEFAULT_ELLIPSE_STYLE { NULL, -1, 0, OBJ_ELLIPSE, OBJ_CLIP, \
{FS_EMPTY, 100, 0, {TC_DEFAULT, -2, 0}}, \
{0, LT_BACKGROUND, 0, DASHTYPE_SOLID, 0, 0, 1.0, 0.0, DEFAULT_P_CHAR, BLACK_COLORSPEC, DEFAULT_DASHPATTERN}, \
{.ellipse = {ELLIPSEAXES_XY, {0,0,0,0.,0.,0.}, {graph,graph,0,0.05,0.03,0.}, 0. }} }
#define DEFAULT_POLYGON_STYLE { NULL, -1, 0, OBJ_POLYGON, OBJ_CLIP, \
{FS_EMPTY, 100, 0, {TC_DEFAULT, -2, 0}}, \
{0, LT_BLACK, 0, DASHTYPE_SOLID, 0, 0, 1.0, 0.0, DEFAULT_P_CHAR, BLACK_COLORSPEC, DEFAULT_DASHPATTERN}, \
{.polygon = {0, NULL} } }
#define WALL_Y0_TAG 0
#define WALL_X0_TAG 1
#define WALL_Y1_TAG 2
#define WALL_X1_TAG 3
#define WALL_Z0_TAG 4
#define WALL_Y0_CORNERS { {graph, graph, graph, 0, 0, 0}, \
{graph, graph, graph, 0, 0, 1}, {graph, graph, graph, 1, 0, 1}, \
{graph, graph, graph, 1, 0, 0}, {graph, graph, graph, 0, 0, 0} }
#define WALL_X0_CORNERS { {graph, graph, graph, 0, 0, 0}, \
{graph, graph, graph, 0, 1, 0}, {graph, graph, graph, 0, 1, 1}, \
{graph, graph, graph, 0, 0, 1}, {graph, graph, graph, 0, 0, 0} }
#define WALL_Y1_CORNERS { {graph, graph, graph, 0, 1, 0}, \
{graph, graph, graph, 1, 1, 0}, {graph, graph, graph, 1, 1, 1}, \
{graph, graph, graph, 0, 1, 1}, {graph, graph, graph, 0, 1, 0} }
#define WALL_X1_CORNERS { {graph, graph, graph, 1, 0, 0}, \
{graph, graph, graph, 1, 0, 1}, {graph, graph, graph, 1, 1, 1}, \
{graph, graph, graph, 1, 1, 0}, {graph, graph, graph, 1, 0, 0} }
#define WALL_Z0_CORNERS { {graph, graph, graph, 0, 0, 0}, \
{graph, graph, graph, 1, 0, 0}, {graph, graph, graph, 1, 1, 0}, \
{graph, graph, graph, 0, 1, 0}, {graph, graph, graph, 0, 0, 0} }
#define WALL_Y_COLOR 0xcdb79e
#define WALL_X_COLOR 0x228b22
#define WALL_Z_COLOR 0xa0b6cd
#define WALL_Y0 { NULL, WALL_Y0_TAG, LAYER_FRONTBACK, OBJ_POLYGON, OBJ_CLIP, \
{FS_TRANSPARENT_SOLID, 50, 0, BLACK_COLORSPEC}, \
DEFAULT_LP_STYLE_TYPE, \
{.polygon = {5, NULL} } }
#define WALL_Y1 { NULL, WALL_Y1_TAG, LAYER_FRONTBACK, OBJ_POLYGON, OBJ_CLIP, \
{FS_TRANSPARENT_SOLID, 50, 0, BLACK_COLORSPEC}, \
DEFAULT_LP_STYLE_TYPE, \
{.polygon = {5, NULL} } }
#define WALL_X0 { NULL, WALL_X0_TAG, LAYER_FRONTBACK, OBJ_POLYGON, OBJ_CLIP, \
{FS_TRANSPARENT_SOLID, 50, 0, BLACK_COLORSPEC}, \
DEFAULT_LP_STYLE_TYPE, \
{.polygon = {5, NULL} } }
#define WALL_X1 { NULL, WALL_X1_TAG, LAYER_FRONTBACK, OBJ_POLYGON, OBJ_CLIP, \
{FS_TRANSPARENT_SOLID, 50, 0, BLACK_COLORSPEC}, \
DEFAULT_LP_STYLE_TYPE, \
{.polygon = {5, NULL} } }
#define WALL_Z0 { NULL, WALL_Z0_TAG, LAYER_FRONTBACK, OBJ_POLYGON, OBJ_CLIP, \
{FS_TRANSPARENT_SOLID, 50, 0, BLACK_COLORSPEC}, \
DEFAULT_LP_STYLE_TYPE, \
{.polygon = {5, NULL} } }
/* filledcurves style options set by 'set style [data|func] filledcurves opts' */
extern filledcurves_opts filledcurves_opts_data;
extern filledcurves_opts filledcurves_opts_func;
/* "set style increment user"
* causes plot commands to select line style N in preference to linetype N
* (deprecated in 5.0)
*/
#ifdef BACKWARD_COMPATIBILITY
extern TBOOLEAN prefer_line_styles;
#else
#define prefer_line_styles FALSE
#endif
extern histogram_style histogram_opts;
/* TODO: linked list rather than fixed size array */
#define NUM_TEXTBOX_STYLES 4
extern textbox_style textbox_opts[NUM_TEXTBOX_STYLES];
void default_arrow_style(struct arrow_style_type *arrow);
void apply_head_properties(struct arrow_style_type *arrow_properties);
void free_labels(struct text_label *tl);
void get_offsets(struct text_label *this_label, int *htic, int *vtic);
void write_label(int x, int y, struct text_label *label);
int label_width(const char *, int *);
TBOOLEAN pm3d_objects(void);
void place_title(int title_x, int title_y);
double effective_aspect_ratio(void);
/* Image data or pm3d quadrangles can be masked by first loading a set
* of masking polygons via dummy plotting style "with mask".
*/
extern struct iso_curve *mask_2Dpolygon_set;
extern struct iso_curve *mask_3Dpolygon_set;
extern void construct_2D_mask_set(struct coordinate *points, int p_count);
extern TBOOLEAN masked(double x, double y, struct iso_curve *mask_polygon_set);
#endif /* GNUPLOT_GADGETS_H */