tioga 1.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Tioga_README +372 -0
- data/lgpl.txt +504 -0
- data/split/Dtable/defs.h +33 -0
- data/split/Dtable/dtable.c +1928 -0
- data/split/Dtable/dtable_intern.h +144 -0
- data/split/Dtable/dvector.h +61 -0
- data/split/Dtable/extconf.rb +4 -0
- data/split/Dtable/include/dtable.h +35 -0
- data/split/Dtable/lib/Dtable_extras.rb +90 -0
- data/split/Dtable/namespace.h +47 -0
- data/split/Dtable/safe_double.h +104 -0
- data/split/Dtable/symbols.c +92 -0
- data/split/Dtable/symbols.h +52 -0
- data/split/Dvector/defs.h +33 -0
- data/split/Dvector/dvector.c +5486 -0
- data/split/Dvector/dvector_intern.h +142 -0
- data/split/Dvector/extconf.rb +4 -0
- data/split/Dvector/include/dvector.h +61 -0
- data/split/Dvector/lib/Dvector_extras.rb +328 -0
- data/split/Dvector/lib/Numeric_extras.rb +134 -0
- data/split/Dvector/namespace.h +47 -0
- data/split/Dvector/safe_double.h +104 -0
- data/split/Dvector/symbols.c +92 -0
- data/split/Dvector/symbols.h +52 -0
- data/split/Flate/defs.h +33 -0
- data/split/Flate/extconf.rb +19 -0
- data/split/Flate/flate.c +156 -0
- data/split/Flate/flate_intern.h +97 -0
- data/split/Flate/include/flate.h +98 -0
- data/split/Flate/namespace.h +47 -0
- data/split/Flate/safe_double.h +104 -0
- data/split/Flate/symbols.c +92 -0
- data/split/Flate/symbols.h +52 -0
- data/split/Function/defs.h +33 -0
- data/split/Function/dvector.h +61 -0
- data/split/Function/extconf.rb +4 -0
- data/split/Function/function.c +988 -0
- data/split/Function/joint_qsort.c +258 -0
- data/split/Function/lib/Function_extras.rb +44 -0
- data/split/Function/namespace.h +47 -0
- data/split/Function/safe_double.h +104 -0
- data/split/Function/symbols.c +92 -0
- data/split/Function/symbols.h +52 -0
- data/split/Tioga/axes.c +774 -0
- data/split/Tioga/defs.h +33 -0
- data/split/Tioga/dtable.h +35 -0
- data/split/Tioga/dvector.h +61 -0
- data/split/Tioga/extconf.rb +4 -0
- data/split/Tioga/figures.c +672 -0
- data/split/Tioga/figures.h +855 -0
- data/split/Tioga/flate.h +98 -0
- data/split/Tioga/init.c +524 -0
- data/split/Tioga/lib/Arcs_and_Circles.rb +64 -0
- data/split/Tioga/lib/ColorConstants.rb +274 -0
- data/split/Tioga/lib/Colorbars.rb +10 -0
- data/split/Tioga/lib/Colormaps.rb +105 -0
- data/split/Tioga/lib/Coordinate_Conversions.rb +194 -0
- data/split/Tioga/lib/Creating_Paths.rb +94 -0
- data/split/Tioga/lib/Doc.rb +91 -0
- data/split/Tioga/lib/Executive.rb +515 -0
- data/split/Tioga/lib/FigMkr.rb +2224 -0
- data/split/Tioga/lib/FigureConstants.rb +125 -0
- data/split/Tioga/lib/Figures_and_Plots.rb +268 -0
- data/split/Tioga/lib/Images.rb +278 -0
- data/split/Tioga/lib/Legends.rb +190 -0
- data/split/Tioga/lib/MarkerConstants.rb +122 -0
- data/split/Tioga/lib/Markers.rb +129 -0
- data/split/Tioga/lib/Page_Frame_Bounds.rb +567 -0
- data/split/Tioga/lib/Rectangles.rb +94 -0
- data/split/Tioga/lib/Shading.rb +100 -0
- data/split/Tioga/lib/Special_Paths.rb +307 -0
- data/split/Tioga/lib/Strokes.rb +129 -0
- data/split/Tioga/lib/TeX_Text.rb +454 -0
- data/split/Tioga/lib/TexPreamble.rb +358 -0
- data/split/Tioga/lib/Titles_and_Labels.rb +306 -0
- data/split/Tioga/lib/Transparency.rb +89 -0
- data/split/Tioga/lib/Using_Paths.rb +164 -0
- data/split/Tioga/lib/Utils.rb +74 -0
- data/split/Tioga/lib/X_and_Y_Axes.rb +749 -0
- data/split/Tioga/lib/irb_tioga.rb +122 -0
- data/split/Tioga/lib/tioga.rb +1 -0
- data/split/Tioga/lib/tioga_ui.rb +5 -0
- data/split/Tioga/lib/tioga_ui_cmds.rb +793 -0
- data/split/Tioga/makers.c +989 -0
- data/split/Tioga/mk_tioga_sty.rb +53 -0
- data/split/Tioga/namespace.h +47 -0
- data/split/Tioga/pdf_font_dicts.c +18253 -0
- data/split/Tioga/pdfcolor.c +486 -0
- data/split/Tioga/pdfcoords.c +505 -0
- data/split/Tioga/pdffile.c +342 -0
- data/split/Tioga/pdfimage.c +536 -0
- data/split/Tioga/pdfpath.c +914 -0
- data/split/Tioga/pdfs.h +229 -0
- data/split/Tioga/pdftext.c +443 -0
- data/split/Tioga/safe_double.h +104 -0
- data/split/Tioga/symbols.c +92 -0
- data/split/Tioga/symbols.h +52 -0
- data/split/Tioga/texout.c +380 -0
- data/split/defs.h +33 -0
- data/split/extconf.rb +107 -0
- data/split/mkmf2.rb +1612 -0
- data/split/namespace.h +47 -0
- data/split/safe_double.h +104 -0
- data/split/scripts/tioga +4 -0
- data/split/symbols.c +92 -0
- data/split/symbols.h +52 -0
- data/tests/dtable_test.data +6 -0
- data/tests/dvector_read_test.data +1 -0
- data/tests/dvector_test.data +101 -0
- data/tests/tc_Dtable.rb +221 -0
- data/tests/tc_Dvector.rb +791 -0
- data/tests/tc_FMkr.rb +162 -0
- data/tests/tc_Flate.rb +45 -0
- data/tests/tc_Function.rb +111 -0
- data/tests/ts_Tioga.rb +38 -0
- metadata +163 -0
@@ -0,0 +1,855 @@
|
|
1
|
+
/* figures.h */
|
2
|
+
/*
|
3
|
+
Copyright (C) 2005 Bill Paxton
|
4
|
+
|
5
|
+
This file is part of Tioga.
|
6
|
+
|
7
|
+
Tioga is free software; you can redistribute it and/or modify
|
8
|
+
it under the terms of the GNU General Library Public License as published
|
9
|
+
by the Free Software Foundation; either version 2 of the License, or
|
10
|
+
(at your option) any later version.
|
11
|
+
|
12
|
+
Tioga is distributed in the hope that it will be useful,
|
13
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
GNU Library General Public License for more details.
|
16
|
+
|
17
|
+
You should have received a copy of the GNU Library General Public License
|
18
|
+
along with Tioga; if not, write to the Free Software
|
19
|
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
20
|
+
*/
|
21
|
+
|
22
|
+
#ifndef __figures_H__
|
23
|
+
#define __figures_H__
|
24
|
+
|
25
|
+
#include <namespace.h>
|
26
|
+
|
27
|
+
#include <math.h>
|
28
|
+
#include <stdbool.h>
|
29
|
+
#include <ctype.h>
|
30
|
+
#include "dvector.h"
|
31
|
+
#include "dtable.h"
|
32
|
+
#include "ruby.h"
|
33
|
+
#include "intern.h"
|
34
|
+
|
35
|
+
// Axes
|
36
|
+
|
37
|
+
#define NO_TICKS 0
|
38
|
+
#define MAJOR_TICKS_ONLY 1
|
39
|
+
#define MAJOR_AND_MINOR_TICKS 2
|
40
|
+
|
41
|
+
// Y Label Orientation
|
42
|
+
|
43
|
+
#define VERTICAL_BOTTOM_TO_TOP 0
|
44
|
+
#define HORIZONTAL 1
|
45
|
+
#define VERTICAL_TOP_TO_BOTTOM 2
|
46
|
+
|
47
|
+
// Frame Sides
|
48
|
+
|
49
|
+
#define LEFT 0
|
50
|
+
#define RIGHT 1
|
51
|
+
#define TOP 2
|
52
|
+
#define BOTTOM 3
|
53
|
+
|
54
|
+
// PlotAxis locations = Frame Sides plus the following
|
55
|
+
|
56
|
+
#define AT_X_ORIGIN 4
|
57
|
+
#define AT_Y_ORIGIN 5
|
58
|
+
|
59
|
+
// axis types
|
60
|
+
|
61
|
+
#define AXIS_HIDDEN 0
|
62
|
+
#define AXIS_LINE_ONLY 1
|
63
|
+
#define AXIS_WITH_MAJOR_TICKS_ONLY 2
|
64
|
+
#define AXIS_WITH_TICKS_ONLY 3
|
65
|
+
#define AXIS_WITH_MAJOR_TICKS_AND_NUMERIC_LABELS 4
|
66
|
+
#define AXIS_WITH_TICKS_AND_NUMERIC_LABELS 5
|
67
|
+
|
68
|
+
// edge types
|
69
|
+
|
70
|
+
#define EDGE_HIDDEN 0
|
71
|
+
#define EDGE_LINE_ONLY 1
|
72
|
+
#define EDGE_WITH_MAJOR_TICKS_ONLY 2
|
73
|
+
#define EDGE_WITH_TICKS 3
|
74
|
+
|
75
|
+
// Lines
|
76
|
+
|
77
|
+
#define LINE_CAP_BUTT 0
|
78
|
+
#define LINE_CAP_ROUND 1
|
79
|
+
#define LINE_CAP_SQUARE 2
|
80
|
+
|
81
|
+
#define LINE_JOIN_MITER 0
|
82
|
+
#define LINE_JOIN_ROUND 1
|
83
|
+
#define LINE_JOIN_BEVEL 2
|
84
|
+
|
85
|
+
// Text and Markers
|
86
|
+
|
87
|
+
#define LEFT_JUSTIFIED -1
|
88
|
+
#define CENTERED 0
|
89
|
+
#define RIGHT_JUSTIFIED 1
|
90
|
+
|
91
|
+
#define ALIGNED_AT_TOP 0
|
92
|
+
#define ALIGNED_AT_MIDHEIGHT 1
|
93
|
+
#define ALIGNED_AT_BASELINE 2
|
94
|
+
#define ALIGNED_AT_BOTTOM 3
|
95
|
+
|
96
|
+
// Rendering Modes
|
97
|
+
|
98
|
+
#define FILL 0
|
99
|
+
#define STROKE 1
|
100
|
+
#define FILL_AND_STROKE 2
|
101
|
+
#define DISCARD 3
|
102
|
+
#define FILL_AND_CLIP 4
|
103
|
+
#define STROKE_AND_CLIP 5
|
104
|
+
#define FILL_STROKE_AND_CLIP 6
|
105
|
+
#define CLIP 7
|
106
|
+
|
107
|
+
typedef struct {
|
108
|
+
|
109
|
+
/* page attributes */
|
110
|
+
bool root_figure;
|
111
|
+
bool in_subplot;
|
112
|
+
double page_left, page_bottom, page_top, page_right, page_width, page_height;
|
113
|
+
// in output units. READ ONLY from Ruby.
|
114
|
+
|
115
|
+
/* frame and bounds attributes. READ ONLY from Ruby. */
|
116
|
+
// frame location as fractions of page width & height.
|
117
|
+
double frame_left, frame_right, frame_top, frame_bottom, frame_width, frame_height;
|
118
|
+
// bounds in figure coords.
|
119
|
+
double bounds_left, bounds_right, bounds_top, bounds_bottom;
|
120
|
+
double bounds_xmin, bounds_xmax, bounds_ymin, bounds_ymax;
|
121
|
+
double bounds_width, bounds_height;
|
122
|
+
bool xaxis_reversed, yaxis_reversed;
|
123
|
+
|
124
|
+
/* text attributes */
|
125
|
+
int justification;
|
126
|
+
int alignment;
|
127
|
+
|
128
|
+
double default_font_size; // in points
|
129
|
+
double default_text_scale;
|
130
|
+
double default_text_height_dx; // in figure coords. READ ONLY from Ruby. set when change default_text_scale.
|
131
|
+
double default_text_height_dy; // in figure coords. READ ONLY from Ruby. set when change default_text_scale.
|
132
|
+
|
133
|
+
double label_left_margin; // as fraction of frame width
|
134
|
+
double label_right_margin; // as fraction of frame width
|
135
|
+
double label_top_margin; // as fraction of frame height
|
136
|
+
double label_bottom_margin; // as fraction of frame height
|
137
|
+
|
138
|
+
double text_shift_on_left; // default shift for text on LEFT side of frame
|
139
|
+
double text_shift_on_right; // default shift for text on RIGHT side of frame
|
140
|
+
double text_shift_on_top; // default shift for text on TOP side of frame
|
141
|
+
double text_shift_on_bottom; // default shift for text on BOTTOM side of frame
|
142
|
+
double text_shift_from_x_origin; // default shift for text away from y axis at x origin
|
143
|
+
double text_shift_from_y_origin; // default shift for text away from x axis at y origin
|
144
|
+
|
145
|
+
/* graphics attributes */
|
146
|
+
|
147
|
+
/* color attributes */
|
148
|
+
VALUE stroke_color; // [r, g, b]
|
149
|
+
VALUE fill_color; // [r, g, b]
|
150
|
+
|
151
|
+
/* stroke attributes */
|
152
|
+
double default_line_scale; // multipler for line_width
|
153
|
+
double line_width; // in points (prior to multiplication by default_line_scale)
|
154
|
+
int line_cap;
|
155
|
+
int line_join;
|
156
|
+
double miter_limit;
|
157
|
+
VALUE line_type; // [ dashArray dashPhase ] in points
|
158
|
+
|
159
|
+
/* transparency */
|
160
|
+
double stroke_opacity;
|
161
|
+
double fill_opacity;
|
162
|
+
|
163
|
+
/* Title */
|
164
|
+
VALUE title; // text
|
165
|
+
bool title_visible;
|
166
|
+
int title_side;
|
167
|
+
double title_position;
|
168
|
+
|
169
|
+
double title_scale;
|
170
|
+
double title_shift; // in char heights, positive for out from edge (or toward larger x or y value)
|
171
|
+
double title_angle;
|
172
|
+
int title_alignment;
|
173
|
+
int title_justification;
|
174
|
+
VALUE title_color;
|
175
|
+
|
176
|
+
/* X label */
|
177
|
+
VALUE xlabel; // text
|
178
|
+
bool xlabel_visible;
|
179
|
+
double xlabel_position; // xlabel side is given by xaxis_loc
|
180
|
+
|
181
|
+
double xlabel_scale;
|
182
|
+
double xlabel_shift; // in char heights, positive for out from edge (or toward larger x or y value)
|
183
|
+
double xlabel_angle;
|
184
|
+
int xlabel_side;
|
185
|
+
int xlabel_alignment;
|
186
|
+
int xlabel_justification;
|
187
|
+
VALUE xlabel_color;
|
188
|
+
|
189
|
+
/* Y label */
|
190
|
+
VALUE ylabel; // text
|
191
|
+
bool ylabel_visible;
|
192
|
+
double ylabel_position; // ylabel side is given by yaxis_loc
|
193
|
+
|
194
|
+
double ylabel_scale;
|
195
|
+
double ylabel_shift; // in char heights, positive for out from edge (or toward larger x or y value)
|
196
|
+
double ylabel_angle;
|
197
|
+
int ylabel_side;
|
198
|
+
int ylabel_alignment;
|
199
|
+
int ylabel_justification;
|
200
|
+
VALUE ylabel_color;
|
201
|
+
|
202
|
+
/* X axis */
|
203
|
+
bool xaxis_visible;
|
204
|
+
int xaxis_type;
|
205
|
+
int xaxis_loc;
|
206
|
+
// line
|
207
|
+
double xaxis_line_width; // for axis line
|
208
|
+
VALUE xaxis_stroke_color; // for axis line and tick marks
|
209
|
+
// tick marks
|
210
|
+
double xaxis_major_tick_width; // same units as line_width
|
211
|
+
double xaxis_minor_tick_width; // same units as line_width
|
212
|
+
double xaxis_major_tick_length; // in units of numeric label char heights
|
213
|
+
double xaxis_minor_tick_length; // in units of numeric label char heights
|
214
|
+
bool xaxis_log_values;
|
215
|
+
bool xaxis_ticks_inside; // inside frame or toward larger x or y value for specific location
|
216
|
+
bool xaxis_ticks_outside; // inside frame or toward smaller x or y value for specific location
|
217
|
+
double xaxis_tick_interval; // set to 0 to use default
|
218
|
+
double xaxis_min_between_major_ticks; // in units of numeric label char heights
|
219
|
+
int xaxis_number_of_minor_intervals; // set to 0 to use default
|
220
|
+
VALUE xaxis_locations_for_major_ticks; // set to nil to use defaults
|
221
|
+
VALUE xaxis_locations_for_minor_ticks; // set to nil to use defaults
|
222
|
+
// numeric labels on major ticks
|
223
|
+
bool xaxis_use_fixed_pt;
|
224
|
+
int xaxis_digits_max;
|
225
|
+
VALUE xaxis_tick_labels; // set to nil to use defaults. else must have a label for each major tick
|
226
|
+
int xaxis_numeric_label_decimal_digits; // set to negative to use default
|
227
|
+
double xaxis_numeric_label_scale;
|
228
|
+
double xaxis_numeric_label_shift; // in char heights, positive for out from edge (or toward larger x or y value)
|
229
|
+
double xaxis_numeric_label_angle;
|
230
|
+
int xaxis_numeric_label_alignment;
|
231
|
+
int xaxis_numeric_label_justification;
|
232
|
+
// note that the top and bottom edges and drawn in addition to the x axis.
|
233
|
+
// if the edge type specifies ticks, the ticks match those of the x axis.
|
234
|
+
bool top_edge_visible;
|
235
|
+
int top_edge_type;
|
236
|
+
bool bottom_edge_visible;
|
237
|
+
int bottom_edge_type;
|
238
|
+
|
239
|
+
/* Y axis */
|
240
|
+
bool yaxis_visible;
|
241
|
+
int yaxis_type;
|
242
|
+
int yaxis_loc;
|
243
|
+
// line
|
244
|
+
double yaxis_line_width; // for axis line
|
245
|
+
VALUE yaxis_stroke_color; // for axis line and tick marks
|
246
|
+
// tick marks
|
247
|
+
double yaxis_major_tick_width; // same units as line_width
|
248
|
+
double yaxis_minor_tick_width; // same units as line_width
|
249
|
+
double yaxis_major_tick_length; // in units of numeric label char heights
|
250
|
+
double yaxis_minor_tick_length; // in units of numeric label char heights
|
251
|
+
bool yaxis_log_values;
|
252
|
+
bool yaxis_ticks_inside; // inside frame or toward larger x or y value for specific location
|
253
|
+
bool yaxis_ticks_outside; // inside frame or toward smaller x or y value for specific location
|
254
|
+
double yaxis_tick_interval; // set to 0 to use default
|
255
|
+
double yaxis_min_between_major_ticks; // in units of numeric label char heights
|
256
|
+
int yaxis_number_of_minor_intervals; // set to 0 to use default
|
257
|
+
VALUE yaxis_locations_for_major_ticks; // set to nil to use defaults
|
258
|
+
VALUE yaxis_locations_for_minor_ticks; // set to nil to use defaults
|
259
|
+
// numeric labels on major ticks
|
260
|
+
bool yaxis_use_fixed_pt;
|
261
|
+
int yaxis_digits_max;
|
262
|
+
VALUE yaxis_tick_labels; // set to nil to use defaults. else must have a label for each major tick
|
263
|
+
int yaxis_numeric_label_decimal_digits; // set to negative to use default
|
264
|
+
double yaxis_numeric_label_scale;
|
265
|
+
double yaxis_numeric_label_shift; // in char heights, positive for out from edge (or toward larger x or y value)
|
266
|
+
double yaxis_numeric_label_angle;
|
267
|
+
int yaxis_numeric_label_alignment;
|
268
|
+
int yaxis_numeric_label_justification;
|
269
|
+
// note that the left and right edges and drawn in addition to the y axis.
|
270
|
+
// if the edge type specifies ticks, the ticks match those of the y axis.
|
271
|
+
int left_edge_type;
|
272
|
+
bool left_edge_visible;
|
273
|
+
int right_edge_type;
|
274
|
+
bool right_edge_visible;
|
275
|
+
|
276
|
+
/* Legend */
|
277
|
+
// units are text heights for x and y for locations and sizes
|
278
|
+
double legend_line_x0; // x location of start of line
|
279
|
+
double legend_line_x1; // x location of end of line
|
280
|
+
double legend_line_dy; // move the line up by this amount from the text baseline
|
281
|
+
double legend_text_xstart; // x location of start of text
|
282
|
+
double legend_text_width; // in text heights measured from legend_text_xstart
|
283
|
+
double legend_text_ystart; // y location of first entry text
|
284
|
+
double legend_text_dy; // move down by this amount for subsequent legend entries
|
285
|
+
double legend_line_width; // for legend lines (or negative to use the weight from the plot)
|
286
|
+
double legend_scale; // scaling factor for size of legend text
|
287
|
+
int legend_alignment;
|
288
|
+
int legend_justification;
|
289
|
+
|
290
|
+
/* Debugging */
|
291
|
+
int debug_verbosity_level; // 0 turns off the trace info
|
292
|
+
|
293
|
+
/* Whether to complain about out non ok numbers in paths */
|
294
|
+
int croak_on_nonok_numbers;
|
295
|
+
|
296
|
+
/* PRIVATE -- not to be included in the Ruby interface */
|
297
|
+
double clip_left, clip_right, clip_top, clip_bottom; // in output coords
|
298
|
+
VALUE fm;
|
299
|
+
} FM;
|
300
|
+
|
301
|
+
typedef FM Figure_Maker;
|
302
|
+
|
303
|
+
extern VALUE cFM; /* class object for FigureMaker */
|
304
|
+
extern char *data_dir;
|
305
|
+
|
306
|
+
extern FM *Get_FM(VALUE fmkr);
|
307
|
+
extern bool Is_FM(VALUE fmkr);
|
308
|
+
|
309
|
+
#define SAVE_STATE FM saved = *p;
|
310
|
+
#define RESTORE_STATE *p = saved;
|
311
|
+
|
312
|
+
/*======================================================================*/
|
313
|
+
|
314
|
+
extern VALUE FM_set_device_pagesize(VALUE fmkr, VALUE width, VALUE height); // size in output coords (decipoints)
|
315
|
+
extern VALUE FM_set_frame_sides(VALUE fmkr, VALUE left, VALUE right, VALUE top, VALUE bottom); // in page coords [0..1]
|
316
|
+
|
317
|
+
extern VALUE FM_doing_subplot(VALUE fmkr);
|
318
|
+
extern VALUE FM_doing_subfigure(VALUE fmkr);
|
319
|
+
|
320
|
+
extern VALUE FM_no_title(VALUE fmkr);
|
321
|
+
extern VALUE FM_no_xlabel(VALUE fmkr);
|
322
|
+
extern VALUE FM_no_ylabel(VALUE fmkr);
|
323
|
+
extern VALUE FM_no_xaxis(VALUE fmkr);
|
324
|
+
extern VALUE FM_no_yaxis(VALUE fmkr);
|
325
|
+
extern VALUE FM_no_left_edge(VALUE fmkr);
|
326
|
+
extern VALUE FM_no_right_edge(VALUE fmkr);
|
327
|
+
extern VALUE FM_no_top_edge(VALUE fmkr);
|
328
|
+
extern VALUE FM_no_bottom_edge(VALUE fmkr);
|
329
|
+
|
330
|
+
extern VALUE FM_private_set_default_font_size(VALUE fmkr, VALUE size); // size in points
|
331
|
+
|
332
|
+
|
333
|
+
/* Colors */
|
334
|
+
|
335
|
+
/* in addition to RGB, colors are also often specified in terms of (HUE,LIGHTNESS,SATURATION) */
|
336
|
+
extern VALUE FM_hls_to_rgb(VALUE fmkr, VALUE hls_vec);
|
337
|
+
extern VALUE FM_rgb_to_hls(VALUE fmkr, VALUE rgb_vec);
|
338
|
+
/* hue is given as an angle from 0 to 360 around the color wheel.
|
339
|
+
0, 60, 120, 180, 240, and 300 are respectively red, yellow, green, cyan, blue, and magenta. */
|
340
|
+
/* lightness and saturation are given as numbers from 0 to 1 */
|
341
|
+
extern void c_hls_to_rgb(double h, double l, double s, double *p_r, double *p_g, double *p_b); // from plplot plctrl.c
|
342
|
+
extern void c_rgb_to_hls(double r, double g, double b, double *p_h, double *p_l, double *p_s); // from plplot plctrl.c
|
343
|
+
|
344
|
+
/*======================================================================*/
|
345
|
+
|
346
|
+
/* Miscellaneous */
|
347
|
+
|
348
|
+
extern void Init_pdf(void);
|
349
|
+
extern void Open_pdf(VALUE fmkr, char *filename, bool quiet_mode);
|
350
|
+
extern void Close_pdf(VALUE fmkr, bool quiet_mode);
|
351
|
+
extern void Rename_pdf(char *oldname, char *newname);
|
352
|
+
|
353
|
+
extern void Init_tex(void);
|
354
|
+
extern void Open_tex(VALUE fmkr, char *filename, bool quiet_mode);
|
355
|
+
extern void Close_tex(VALUE fmkr, bool quiet_mode);
|
356
|
+
extern void Rename_tex(char *oldname, char *newname);
|
357
|
+
|
358
|
+
extern void Create_wrapper(VALUE fmkr, char *filename, bool quiet_mode);
|
359
|
+
|
360
|
+
extern void Recalc_Font_Hts(FM *p);
|
361
|
+
|
362
|
+
extern VALUE FM_rescale_text(VALUE fmkr, VALUE scaling);
|
363
|
+
extern VALUE FM_rescale_lines(VALUE fmkr, VALUE scaling);
|
364
|
+
|
365
|
+
extern double bbox_llx, bbox_lly, bbox_urx, bbox_ury;
|
366
|
+
|
367
|
+
// ENLARGE = the conversion factor from "big points" to output units
|
368
|
+
#define ENLARGE 10.0
|
369
|
+
#define BIG_POINTS_PER_INCH 72.0
|
370
|
+
#define INCHES_PER_MM 0.0393700787
|
371
|
+
|
372
|
+
// 10 miles should be enough!
|
373
|
+
#define iMAX_DEV_COORD_ALLOWED (BIG_POINTS_PER_INCH*12*5280*10)
|
374
|
+
#define MAX_DEV_COORD_ALLOWED ((double)iMAX_DEV_COORD_ALLOWED)
|
375
|
+
|
376
|
+
#define convert_inches_to_output(inches) ((ENLARGE*BIG_POINTS_PER_INCH)*(inches))
|
377
|
+
#define convert_output_to_inches(output) ((output)/(ENLARGE*BIG_POINTS_PER_INCH))
|
378
|
+
|
379
|
+
extern VALUE FM_convert_inches_to_output(VALUE fmkr, VALUE value);
|
380
|
+
extern VALUE FM_convert_output_to_inches(VALUE fmkr, VALUE value);
|
381
|
+
|
382
|
+
#define convert_mm_to_output(mm) ((ENLARGE*BIG_POINTS_PER_INCH*INCHES_PER_MM)*(mm))
|
383
|
+
#define convert_output_to_mm(output) ((output)/(ENLARGE*BIG_POINTS_PER_INCH*INCHES_PER_MM))
|
384
|
+
|
385
|
+
extern VALUE FM_convert_mm_to_output(VALUE fmkr, VALUE value);
|
386
|
+
extern VALUE FM_convert_output_to_mm(VALUE fmkr, VALUE value);
|
387
|
+
|
388
|
+
#define convert_page_to_output_x(p,x) ((p)->page_left + (x)*(p)->page_width)
|
389
|
+
#define convert_page_to_output_y(p,y) ((p)->page_bottom + (y)*(p)->page_height)
|
390
|
+
#define convert_page_to_output_dx(p,dx) ((dx)*(p)->page_width)
|
391
|
+
#define convert_page_to_output_dy(p,dy) ((dy)*(p)->page_height)
|
392
|
+
|
393
|
+
extern VALUE FM_convert_page_to_output_x(VALUE fmkr, VALUE value);
|
394
|
+
extern VALUE FM_convert_page_to_output_y(VALUE fmkr, VALUE value);
|
395
|
+
extern VALUE FM_convert_page_to_output_dx(VALUE fmkr, VALUE value);
|
396
|
+
extern VALUE FM_convert_page_to_output_dy(VALUE fmkr, VALUE value);
|
397
|
+
|
398
|
+
#define convert_output_to_page_x(p,x) (((x) - (p)->page_left)/(p)->page_width)
|
399
|
+
#define convert_output_to_page_y(p,y) (((y) - (p)->page_bottom)/(p)->page_height)
|
400
|
+
#define convert_output_to_page_dx(p,dx) ((dx)/(p)->page_width)
|
401
|
+
#define convert_output_to_page_dy(p,dy) ((dy)/(p)->page_height)
|
402
|
+
|
403
|
+
extern VALUE FM_convert_output_to_page_x(VALUE fmkr, VALUE value);
|
404
|
+
extern VALUE FM_convert_output_to_page_y(VALUE fmkr, VALUE value);
|
405
|
+
extern VALUE FM_convert_output_to_page_dx(VALUE fmkr, VALUE value);
|
406
|
+
extern VALUE FM_convert_output_to_page_dy(VALUE fmkr, VALUE value);
|
407
|
+
|
408
|
+
#define convert_frame_to_page_x(p,x) ((p)->frame_left + (x)*(p)->frame_width)
|
409
|
+
#define convert_frame_to_page_y(p,y) ((p)->frame_bottom + (y)*(p)->frame_height)
|
410
|
+
#define convert_frame_to_page_dx(p,dx) ((dx)*(p)->frame_width)
|
411
|
+
#define convert_frame_to_page_dy(p,dy) ((dy)*(p)->frame_height)
|
412
|
+
|
413
|
+
extern VALUE FM_convert_frame_to_page_x(VALUE fmkr, VALUE value);
|
414
|
+
extern VALUE FM_convert_frame_to_page_y(VALUE fmkr, VALUE value);
|
415
|
+
extern VALUE FM_convert_frame_to_page_dx(VALUE fmkr, VALUE value);
|
416
|
+
extern VALUE FM_convert_frame_to_page_dy(VALUE fmkr, VALUE value);
|
417
|
+
|
418
|
+
#define convert_page_to_frame_x(p,x) (((x) - (p)->frame_left)/(p)->frame_width)
|
419
|
+
#define convert_page_to_frame_y(p,y) (((y) - (p)->frame_bottom)/(p)->frame_height)
|
420
|
+
#define convert_page_to_frame_dx(p,dx) ((dx)/(p)->frame_width)
|
421
|
+
#define convert_page_to_frame_dy(p,dy) ((dy)/(p)->frame_height)
|
422
|
+
|
423
|
+
extern VALUE FM_convert_page_to_frame_x(VALUE fmkr, VALUE value);
|
424
|
+
extern VALUE FM_convert_page_to_frame_y(VALUE fmkr, VALUE value);
|
425
|
+
extern VALUE FM_convert_page_to_frame_dx(VALUE fmkr, VALUE value);
|
426
|
+
extern VALUE FM_convert_page_to_frame_dy(VALUE fmkr, VALUE value);
|
427
|
+
|
428
|
+
#define convert_figure_to_frame_x(p,x) (\
|
429
|
+
((p)->bounds_left > (p)->bounds_right)? (1.0 - ((x)-(p)->bounds_xmin)/(p)->bounds_width) : ((x)-(p)->bounds_xmin)/(p)->bounds_width)
|
430
|
+
#define convert_figure_to_frame_y(p,y) (\
|
431
|
+
((p)->bounds_bottom > (p)->bounds_top)? (1.0 - ((y)-(p)->bounds_ymin)/(p)->bounds_height) : ((y)-(p)->bounds_ymin)/(p)->bounds_height)
|
432
|
+
#define convert_figure_to_frame_dx(p,dx) (\
|
433
|
+
((p)->bounds_left > (p)->bounds_right)? -(dx)/(p)->bounds_width : (dx)/(p)->bounds_width)
|
434
|
+
#define convert_figure_to_frame_dy(p,dy) (\
|
435
|
+
((p)->bounds_bottom > (p)->bounds_top)? -(dy)/(p)->bounds_height : (dy)/(p)->bounds_height)
|
436
|
+
|
437
|
+
extern VALUE FM_convert_figure_to_frame_x(VALUE fmkr, VALUE value);
|
438
|
+
extern VALUE FM_convert_figure_to_frame_y(VALUE fmkr, VALUE value);
|
439
|
+
extern VALUE FM_convert_figure_to_frame_dx(VALUE fmkr, VALUE value);
|
440
|
+
extern VALUE FM_convert_figure_to_frame_dy(VALUE fmkr, VALUE value);
|
441
|
+
|
442
|
+
#define convert_frame_to_figure_x(p,x) (\
|
443
|
+
((p)->bounds_left > (p)->bounds_right)? ((p)->bounds_left - (x)*(p)->bounds_width): ((p)->bounds_left + (x)*(p)->bounds_width))
|
444
|
+
#define convert_frame_to_figure_y(p,y) (\
|
445
|
+
((p)->bounds_bottom > (p)->bounds_top)? ((p)->bounds_bottom - (y)*(p)->bounds_height): ((p)->bounds_bottom + (y)*(p)->bounds_height))
|
446
|
+
#define convert_frame_to_figure_dx(p,dx) (\
|
447
|
+
((p)->bounds_left > (p)->bounds_right)? (-(dx)*(p)->bounds_width): ((dx)*(p)->bounds_width))
|
448
|
+
#define convert_frame_to_figure_dy(p,dy) (\
|
449
|
+
((p)->bounds_bottom > (p)->bounds_top)? (-(dy)*(p)->bounds_height): ((dy)*(p)->bounds_height))
|
450
|
+
|
451
|
+
extern VALUE FM_convert_frame_to_figure_x(VALUE fmkr, VALUE value);
|
452
|
+
extern VALUE FM_convert_frame_to_figure_y(VALUE fmkr, VALUE value);
|
453
|
+
extern VALUE FM_convert_frame_to_figure_dx(VALUE fmkr, VALUE value);
|
454
|
+
extern VALUE FM_convert_frame_to_figure_dy(VALUE fmkr, VALUE value);
|
455
|
+
|
456
|
+
extern double convert_figure_to_output_x(FM *p, double x);
|
457
|
+
extern double convert_figure_to_output_y(FM *p, double y);
|
458
|
+
extern double convert_figure_to_output_dy(FM *p, double dy);
|
459
|
+
extern double convert_figure_to_output_dx(FM *p, double dx);
|
460
|
+
|
461
|
+
extern VALUE FM_convert_figure_to_output_x(VALUE fmkr, VALUE value);
|
462
|
+
extern VALUE FM_convert_figure_to_output_y(VALUE fmkr, VALUE value);
|
463
|
+
extern VALUE FM_convert_figure_to_output_dx(VALUE fmkr, VALUE value);
|
464
|
+
extern VALUE FM_convert_figure_to_output_dy(VALUE fmkr, VALUE value);
|
465
|
+
|
466
|
+
extern double convert_output_to_figure_x(FM *p, double x);
|
467
|
+
extern double convert_output_to_figure_y(FM *p, double y);
|
468
|
+
extern double convert_output_to_figure_dy(FM *p, double dy);
|
469
|
+
extern double convert_output_to_figure_dx(FM *p, double dx);
|
470
|
+
|
471
|
+
extern VALUE FM_convert_output_to_figure_x(VALUE fmkr, VALUE value);
|
472
|
+
extern VALUE FM_convert_output_to_figure_y(VALUE fmkr, VALUE value);
|
473
|
+
extern VALUE FM_convert_output_to_figure_dx(VALUE fmkr, VALUE value);
|
474
|
+
extern VALUE FM_convert_output_to_figure_dy(VALUE fmkr, VALUE value);
|
475
|
+
|
476
|
+
extern double c_convert_to_degrees(FM *p, double dx, double dy);
|
477
|
+
extern VALUE FM_convert_to_degrees(VALUE fmkr, VALUE dx, VALUE dy);
|
478
|
+
|
479
|
+
extern void update_bbox(FM *p, double x, double y);
|
480
|
+
|
481
|
+
extern void c_set_bounds(FM *p, double left, double right, double top, double bottom);
|
482
|
+
extern VALUE FM_private_set_bounds(VALUE fmkr, VALUE left, VALUE right, VALUE top, VALUE bottom); /* in figure coords */
|
483
|
+
|
484
|
+
extern VALUE FM_private_context(VALUE fmkr, VALUE cmd);
|
485
|
+
|
486
|
+
extern void c_set_subframe(FM *p, double left_margin, double right_margin, double top_margin, double bottom_margin);
|
487
|
+
extern VALUE FM_private_set_subframe(VALUE fmkr, VALUE left_margin, VALUE right_margin, VALUE top_margin, VALUE bottom_margin);
|
488
|
+
|
489
|
+
/* TeX text */
|
490
|
+
|
491
|
+
extern VALUE FM_rescale_text(VALUE fmkr, VALUE scale); // updates char_height_dx and char_height_dy too
|
492
|
+
|
493
|
+
extern VALUE FM_show_rotated_text(VALUE fmkr, VALUE text, VALUE frame_side, VALUE shift,
|
494
|
+
VALUE fraction, VALUE scale, VALUE angle, VALUE justification, VALUE alignment);
|
495
|
+
|
496
|
+
extern VALUE FM_show_rotated_label(VALUE fmkr, VALUE text,
|
497
|
+
VALUE xloc, VALUE yloc, VALUE scale, VALUE angle, VALUE justification, VALUE alignment);
|
498
|
+
|
499
|
+
extern VALUE FM_check_label_clip(VALUE fmkr, VALUE xloc, VALUE yloc);
|
500
|
+
|
501
|
+
/* PDF graphics */
|
502
|
+
|
503
|
+
/* graphics attributes */
|
504
|
+
extern VALUE FM_stroke_color_set(VALUE fmkr, VALUE value);
|
505
|
+
extern VALUE FM_fill_color_set(VALUE fmkr, VALUE value);
|
506
|
+
extern VALUE FM_line_width_set(VALUE fmkr, VALUE value);
|
507
|
+
extern VALUE FM_stroke_scale_set(VALUE fmkr, VALUE value);
|
508
|
+
extern VALUE FM_line_cap_set(VALUE fmkr, VALUE value);
|
509
|
+
extern VALUE FM_line_join_set(VALUE fmkr, VALUE value);
|
510
|
+
extern VALUE FM_miter_limit_set(VALUE fmkr, VALUE value);
|
511
|
+
extern VALUE FM_line_type_set(VALUE fmkr, VALUE line_type);
|
512
|
+
extern VALUE FM_stroke_opacity_set(VALUE fmkr, VALUE value);
|
513
|
+
extern VALUE FM_fill_opacity_set(VALUE fmkr, VALUE value);
|
514
|
+
extern VALUE FM_marker_horizontal_scaling_set(VALUE fmkr, VALUE value); // as fraction of normal width
|
515
|
+
|
516
|
+
/*
|
517
|
+
Once start a path, must finish with it before going on to anything else.
|
518
|
+
So, do sequence of path producer operations followed by a single path consumer operation.
|
519
|
+
After the path consumer operation finishes, the current path is reset to empty.
|
520
|
+
Can't mix in other kinds of operations in the middle of this; once start constructing a path,
|
521
|
+
cannot do any other graphics operations until have finished producing the path and have consumed it.
|
522
|
+
*/
|
523
|
+
|
524
|
+
/* Path Producers */
|
525
|
+
|
526
|
+
/* path parameters are in figure coordinates */
|
527
|
+
/* are immediately converted to output coordinates; uneffected by later changes in figure coordinate system */
|
528
|
+
|
529
|
+
extern VALUE FM_move_to_point(VALUE fmkr, VALUE x, VALUE y); // x y m
|
530
|
+
extern VALUE FM_append_point_to_path(VALUE fmkr, VALUE x, VALUE y); // x y l
|
531
|
+
extern VALUE FM_append_curve_to_path(VALUE fmkr, VALUE x1, VALUE y1, VALUE x2, VALUE y2, VALUE x3, VALUE y3); // x1 y1 x2 y2 x3 y3 c
|
532
|
+
extern VALUE FM_close_path(VALUE fmkr); // h
|
533
|
+
|
534
|
+
extern VALUE FM_append_points_to_path(VALUE fmkr, VALUE x_vec, VALUE y_vec);
|
535
|
+
extern VALUE FM_private_append_points_with_gaps_to_path(VALUE fmkr, VALUE x_vec, VALUE y_vec, VALUE gaps, VALUE close_gaps);
|
536
|
+
|
537
|
+
extern VALUE FM_append_arc_to_path(VALUE fmkr, VALUE x_start, VALUE y_start, VALUE x_corner, VALUE y_corner,
|
538
|
+
VALUE x_end, VALUE y_end, VALUE dx, VALUE dy);
|
539
|
+
// dx and dy are converted to output coords and smaller is used as radius
|
540
|
+
|
541
|
+
extern VALUE FM_append_rect_to_path(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height); // x y w h re
|
542
|
+
extern VALUE FM_append_rounded_rect_to_path(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height, VALUE dx, VALUE dy);
|
543
|
+
// dx and dy are converted to output coords and smaller is used as radius
|
544
|
+
|
545
|
+
extern VALUE FM_append_circle_to_path(VALUE fmkr, VALUE x, VALUE y, VALUE dx);
|
546
|
+
extern VALUE FM_append_oval_to_path(VALUE fmkr, VALUE x, VALUE y, VALUE dx, VALUE dy, VALUE angle);
|
547
|
+
|
548
|
+
extern VALUE FM_append_frame_to_path(VALUE fmkr);
|
549
|
+
|
550
|
+
extern VALUE FM_update_bbox(VALUE fmkr, VALUE x, VALUE y);
|
551
|
+
|
552
|
+
extern VALUE FM_bbox_left(VALUE fmkr);
|
553
|
+
extern VALUE FM_bbox_right(VALUE fmkr);
|
554
|
+
extern VALUE FM_bbox_top(VALUE fmkr);
|
555
|
+
extern VALUE FM_bbox_bottom(VALUE fmkr);
|
556
|
+
|
557
|
+
/* Path Consumers */
|
558
|
+
|
559
|
+
extern VALUE FM_stroke(VALUE fmkr); // S
|
560
|
+
extern VALUE FM_close_and_stroke(VALUE fmkr); // s
|
561
|
+
extern VALUE FM_fill(VALUE fmkr); // f
|
562
|
+
extern VALUE FM_eofill(VALUE fmkr); // f*
|
563
|
+
extern VALUE FM_fill_and_stroke(VALUE fmkr); // B
|
564
|
+
extern VALUE FM_eofill_and_stroke(VALUE fmkr); // B*
|
565
|
+
extern VALUE FM_close_fill_and_stroke(VALUE fmkr); // b
|
566
|
+
extern VALUE FM_close_eofill_and_stroke(VALUE fmkr); // b*
|
567
|
+
extern VALUE FM_clip(VALUE fmkr); // W n
|
568
|
+
extern VALUE FM_eoclip(VALUE fmkr); // W* n
|
569
|
+
extern VALUE FM_discard_path(VALUE fmkr); // n
|
570
|
+
|
571
|
+
/* Combination Path Constructing and Using */
|
572
|
+
|
573
|
+
extern VALUE FM_stroke_line(VALUE fmkr, VALUE x1, VALUE y1, VALUE x2, VALUE y2);
|
574
|
+
|
575
|
+
extern VALUE FM_fill_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height);
|
576
|
+
extern VALUE FM_stroke_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height);
|
577
|
+
extern VALUE FM_fill_and_stroke_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height);
|
578
|
+
extern VALUE FM_clip_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height);
|
579
|
+
|
580
|
+
extern VALUE FM_fill_frame(VALUE fmkr);
|
581
|
+
extern VALUE FM_stroke_frame(VALUE fmkr);
|
582
|
+
extern VALUE FM_fill_and_stroke_frame(VALUE fmkr);
|
583
|
+
extern VALUE FM_clip_to_frame(VALUE fmkr);
|
584
|
+
|
585
|
+
extern VALUE FM_fill_oval(VALUE fmkr, VALUE x, VALUE y, VALUE dx, VALUE dy, VALUE angle);
|
586
|
+
extern VALUE FM_stroke_oval(VALUE fmkr, VALUE x, VALUE y, VALUE dx, VALUE dy, VALUE angle);
|
587
|
+
extern VALUE FM_fill_and_stroke_oval(VALUE fmkr, VALUE x, VALUE y, VALUE dx, VALUE dy, VALUE angle);
|
588
|
+
extern VALUE FM_clip_oval(VALUE fmkr, VALUE x, VALUE y, VALUE dx, VALUE dy, VALUE angle);
|
589
|
+
|
590
|
+
extern VALUE FM_fill_circle(VALUE fmkr, VALUE x, VALUE y, VALUE dx);
|
591
|
+
extern VALUE FM_stroke_circle(VALUE fmkr, VALUE x, VALUE y, VALUE dx);
|
592
|
+
extern VALUE FM_fill_and_stroke_circle(VALUE fmkr, VALUE x, VALUE y, VALUE dx);
|
593
|
+
extern VALUE FM_clip_circle(VALUE fmkr, VALUE x, VALUE y, VALUE dx);
|
594
|
+
|
595
|
+
extern VALUE FM_fill_rounded_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height, VALUE dx, VALUE dy);
|
596
|
+
extern VALUE FM_stroke_rounded_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height, VALUE dx, VALUE dy);
|
597
|
+
extern VALUE FM_fill_and_stroke_rounded_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height, VALUE dx, VALUE dy);
|
598
|
+
extern VALUE FM_clip_rounded_rect(VALUE fmkr, VALUE x, VALUE y, VALUE width, VALUE height, VALUE dx, VALUE dy);
|
599
|
+
|
600
|
+
/* Shading */
|
601
|
+
|
602
|
+
extern VALUE FM_private_axial_shading(VALUE fmkr, VALUE x0, VALUE y0,
|
603
|
+
VALUE x1, VALUE y1, VALUE colormap, VALUE extend_start, VALUE extend_end);
|
604
|
+
extern VALUE FM_private_radial_shading(VALUE fmkr, VALUE x0, VALUE y0, VALUE r0,
|
605
|
+
VALUE x1, VALUE y1, VALUE r1, VALUE colormap,
|
606
|
+
VALUE a, VALUE b, VALUE c, VALUE d,
|
607
|
+
VALUE extend_start, VALUE extend_end);
|
608
|
+
|
609
|
+
/* Markers */
|
610
|
+
|
611
|
+
// a marker is a [font number, character code]
|
612
|
+
// markers are filled with the current fill color and/or stroked with the current stroke color
|
613
|
+
// they are scaled by the current text_scale times the scale parameter passed to the drawing routine
|
614
|
+
// locations given in figure coords
|
615
|
+
|
616
|
+
extern VALUE FM_register_font(VALUE fmkr, VALUE font_name); // returns font number.
|
617
|
+
|
618
|
+
extern VALUE FM_private_show_marker(VALUE fmkr, VALUE integer_args, VALUE stroke_width, VALUE string,
|
619
|
+
VALUE x, VALUE y, VALUE x_vec, VALUE y_vec,
|
620
|
+
VALUE h_scale, VALUE v_scale, VALUE scale, VALUE it_angle, VALUE ascent_angle, VALUE angle,
|
621
|
+
VALUE fill_color, VALUE stroke_color);
|
622
|
+
|
623
|
+
extern VALUE FM_marker_string_info(VALUE fmkr, VALUE font_number, VALUE string, VALUE scale);
|
624
|
+
// [ width, llx, lly, urx, ury ] in figure coords
|
625
|
+
|
626
|
+
/* Images */
|
627
|
+
|
628
|
+
extern VALUE FM_private_show_jpg(VALUE fmkr, VALUE filename, VALUE width, VALUE height, VALUE image_destination, VALUE mask_xo_num);
|
629
|
+
extern VALUE FM_show_jp2(VALUE fmkr, VALUE filename, VALUE width, VALUE height, VALUE image_destination, VALUE mask_xo_num);
|
630
|
+
|
631
|
+
extern VALUE FM_private_show_rgb_image(VALUE fmkr, VALUE llx, VALUE lly, VALUE lrx, VALUE lry, VALUE ulx, VALUE uly,
|
632
|
+
VALUE interpolate, VALUE w, VALUE h, VALUE data, VALUE mask_xo_num);
|
633
|
+
|
634
|
+
extern VALUE FM_private_show_cmyk_image(VALUE fmkr, VALUE llx, VALUE lly, VALUE lrx, VALUE lry, VALUE ulx, VALUE uly,
|
635
|
+
VALUE interpolate, VALUE w, VALUE h, VALUE data, VALUE mask_xo_num);
|
636
|
+
|
637
|
+
extern VALUE FM_private_show_grayscale_image(VALUE fmkr, VALUE llx, VALUE lly, VALUE lrx, VALUE lry, VALUE ulx, VALUE uly,
|
638
|
+
VALUE interpolate, VALUE w, VALUE h, VALUE data, VALUE mask_xo_num);
|
639
|
+
|
640
|
+
extern VALUE FM_private_show_monochrome_image(VALUE fmkr, VALUE llx, VALUE lly, VALUE lrx, VALUE lry, VALUE ulx, VALUE uly,
|
641
|
+
VALUE interpolate, VALUE reversed, VALUE w, VALUE h, VALUE data, VALUE mask_xo_num);
|
642
|
+
|
643
|
+
extern VALUE FM_private_show_image(VALUE fmkr, VALUE llx, VALUE lly, VALUE lrx, VALUE lry, VALUE ulx, VALUE uly,
|
644
|
+
VALUE interpolate, VALUE w, VALUE h, VALUE data, VALUE value_mask_min, VALUE value_mask_max,
|
645
|
+
VALUE hival, VALUE lookup, VALUE mask_xo_num);
|
646
|
+
|
647
|
+
extern VALUE FM_private_create_image_data(VALUE fmkr, VALUE data,
|
648
|
+
VALUE first_row, VALUE last_row, VALUE first_column, VALUE last_column,
|
649
|
+
VALUE min_value, VALUE max_value, VALUE max_code, VALUE if_below_range, VALUE if_above_range);
|
650
|
+
|
651
|
+
extern VALUE FM_private_create_monochrome_image_data(VALUE fmkr, VALUE data,
|
652
|
+
VALUE first_row, VALUE last_row, VALUE first_column, VALUE last_column,
|
653
|
+
VALUE boundary, VALUE reverse);
|
654
|
+
|
655
|
+
/* Colormaps for Sampled Images */
|
656
|
+
|
657
|
+
extern VALUE FM_private_create_colormap(VALUE fmkr, VALUE rgb_flag,
|
658
|
+
VALUE length, VALUE Ps, VALUE C1s, VALUE C2s, VALUE C3s);
|
659
|
+
/*
|
660
|
+
create mappings from 'position' (0 to 1) to color (in HLS or RGB color spaces)
|
661
|
+
the length parameter determines the number of entries in the color map (any integer between 2 and 256).
|
662
|
+
for rgb, the colors are given as (red, green, blue) intensities from 0.0 to 1.0
|
663
|
+
for hls, the colors are given as (hue, lightness, saturation)
|
664
|
+
lightness and saturation given as values from 0.0 to 1.0
|
665
|
+
hue given as degrees (0 to 360) around the color wheel from red->green->blue->red
|
666
|
+
Ps are the locations in (0 to 1) for the control points -- in increasing order
|
667
|
+
must have Ps[0] == 0.0 and Ps[num_ps-1] == 1.0
|
668
|
+
*/
|
669
|
+
|
670
|
+
extern VALUE FM_convert_to_colormap(VALUE fmkr, VALUE Rs, VALUE Gs, VALUE Bs);
|
671
|
+
/* this creates an arbitrary mapping from positions to colors given as (r,g,b) triples */
|
672
|
+
/* the colormap size is set to the length of the vectors */
|
673
|
+
/* the Rs, Gs, and Bs are VALUEs from 0 to 1 representing the intensity of the color component */
|
674
|
+
|
675
|
+
extern VALUE FM_get_color_from_colormap(VALUE fmkr, VALUE color_map, VALUE color_position);
|
676
|
+
/* color_position is from 0 to 1. this returns a vector for the RGB color from the given colormap */
|
677
|
+
|
678
|
+
|
679
|
+
/*======================================================================*/
|
680
|
+
|
681
|
+
/* Axes Operations */
|
682
|
+
|
683
|
+
extern VALUE FM_show_axis(VALUE fmkr, VALUE loc);
|
684
|
+
extern VALUE FM_show_edge(VALUE fmkr, VALUE loc);
|
685
|
+
|
686
|
+
/*======================================================================*/
|
687
|
+
|
688
|
+
/* Line Builders */
|
689
|
+
|
690
|
+
extern VALUE FM_private_make_contour(VALUE fmkr,
|
691
|
+
VALUE dest_xs, VALUE dest_ys, VALUE gaps, // these Dvectors get the results
|
692
|
+
VALUE xs, VALUE ys, // data x coordinates and y coordinates
|
693
|
+
VALUE zs, VALUE z_level, // the Dtable of values and the desired contour level
|
694
|
+
VALUE legit, // the Dtable of flags (nonzero means okay)
|
695
|
+
VALUE method // int == 1 means use CONREC
|
696
|
+
);
|
697
|
+
|
698
|
+
extern VALUE FM_private_make_steps(VALUE fmkr, VALUE Xvec, VALUE Yvec, VALUE Xdata, VALUE Ydata,
|
699
|
+
VALUE xfirst, VALUE yfirst, VALUE xlast, VALUE ylast);
|
700
|
+
/* adds n_pts_to_add points to Xs and Ys for steps with the given parameters.
|
701
|
+
X_data and Y_data are arrays of n values where n_pts_to_add = 2*(n+1)
|
702
|
+
(xfirst,yfirst) and (xlast,ylast) are extra data points to fix the first and last steps.
|
703
|
+
The X_data plus xfirst and xlast determine the widths of the steps.
|
704
|
+
The Y_data plus yfirst and ylast determine the height of the steps.
|
705
|
+
The steps occur at locations midway between the given x locations. */
|
706
|
+
|
707
|
+
extern VALUE FM_private_make_spline_interpolated_points(VALUE fmkr, VALUE Xvec, VALUE Yvec, VALUE Xdata, VALUE Ydata,
|
708
|
+
VALUE start_slope, VALUE end_slope);
|
709
|
+
/* uses Xvec_data and Yvec_data to create a cubic spline interpolant.
|
710
|
+
once the spline interpolant is created, it is sampled at the n_pts_to_add in Xs.
|
711
|
+
Xvec entry i is set to the value of the spline at Yvec entry i.
|
712
|
+
Both the X_data and the Xs should be stored in ascending order.
|
713
|
+
There is a boundary condition choice to be made for each end concerning the slope.
|
714
|
+
If clamped is true, the corresponding slope argument value sets the slope.
|
715
|
+
If clamped is false (known as a "free" or "natural" spline),
|
716
|
+
the 2nd derivative is set to 0 and the slope is determined by the fit.
|
717
|
+
In this case, the corresponding slope argument is ignored.
|
718
|
+
*/
|
719
|
+
|
720
|
+
/*======================================================================*/
|
721
|
+
|
722
|
+
/* Some miscellaneous stuff */
|
723
|
+
|
724
|
+
extern void figure_moveto(FM *p, double x, double y); // figure coords
|
725
|
+
extern void figure_lineto(FM *p, double x, double y); // figure coords
|
726
|
+
extern void figure_join(FM *p, double x0, double y0, double x1, double y1); // figure coords
|
727
|
+
extern void figure_join_and_stroke(FM *p, double x0, double y0, double x1, double y1); // figure coords
|
728
|
+
|
729
|
+
extern double Get_double(VALUE obj, ID name_ID); // for instance variables of the obj
|
730
|
+
extern bool Get_bool(VALUE obj, ID name_ID);
|
731
|
+
extern int Get_int(VALUE obj, ID name_ID);
|
732
|
+
#define Get_value(obj, name_ID) rb_ivar_get(obj, name_ID)
|
733
|
+
|
734
|
+
|
735
|
+
extern VALUE FM_private_make(VALUE fmkr, VALUE name, VALUE cmd);
|
736
|
+
extern VALUE FM_get_save_filename(VALUE fmkr, VALUE name);
|
737
|
+
|
738
|
+
extern VALUE FM_private_make_portfolio(VALUE fmkr, VALUE name, VALUE fignums, VALUE fignames);
|
739
|
+
extern void private_make_portfolio(char *filename, VALUE fignums, VALUE fignames);
|
740
|
+
|
741
|
+
extern void Init_PlotAxis(void);
|
742
|
+
extern void Initialize_Figure(VALUE fmkr);
|
743
|
+
extern void c_setup_drawing(FM *p);
|
744
|
+
extern void Init_IDs(void);
|
745
|
+
extern void Initialize_Figure(VALUE fmkr);
|
746
|
+
|
747
|
+
extern void c_moveto(FM *p, double x, double y);
|
748
|
+
extern void c_lineto(FM *p, double x, double y);
|
749
|
+
extern void c_curveto(FM *p, double x1, double y1, double x2, double y2, double x3, double y3);
|
750
|
+
extern void c_line_width_set(FM *p, double line_width);
|
751
|
+
extern void c_line_cap_set(FM *p, int line_cap);
|
752
|
+
extern void c_line_join_set(FM *p, int line_cap);
|
753
|
+
extern void c_miter_limit_set(FM *p, double miter_limit);
|
754
|
+
extern void c_stroke_scale_set(FM *p, double stroke_scale);
|
755
|
+
extern void c_clip_rect(FM *p, double x, double y, double width, double height); // in output coords
|
756
|
+
|
757
|
+
extern int Blank_String(char *str);
|
758
|
+
extern char *Get_String(VALUE ary, int index);
|
759
|
+
|
760
|
+
extern void c_show_rotated_text(FM *p, char *text, int frame_side, double shift, double fraction,
|
761
|
+
double scale, double angle, int justification, int alignment);
|
762
|
+
extern void c_show_rotated_label(FM *p, char *text,
|
763
|
+
double xloc, double yloc, double scale, double angle, int justification, int alignment);
|
764
|
+
|
765
|
+
extern void pldtikmin(FM *p, double tick_min, double vmin, double vmax, double *tick, int *nsubt);
|
766
|
+
extern void draw_box_top_and_bottom(FM *p, char *xopt, double xtick, int nxsub);
|
767
|
+
extern void draw_box_left_and_right(FM *p, char *yopt, double ytick, int nysub);
|
768
|
+
|
769
|
+
extern VALUE do_cmd(VALUE fmkr, VALUE cmd);
|
770
|
+
|
771
|
+
extern char *Get_tex_preview_documentclass(VALUE fmkr);
|
772
|
+
extern char *Get_tex_preamble(VALUE fmkr);
|
773
|
+
extern char *Get_tex_xaxis_numeric_label(VALUE fmkr);
|
774
|
+
extern char *Get_tex_yaxis_numeric_label(VALUE fmkr);
|
775
|
+
extern char *Get_tex_preview_pagestyle(VALUE fmkr);
|
776
|
+
extern double Get_tex_xoffset(VALUE fmkr);
|
777
|
+
extern double Get_tex_yoffset(VALUE fmkr);
|
778
|
+
|
779
|
+
extern char *Get_tex_preview_paper_width(VALUE fmkr);
|
780
|
+
extern char *Get_tex_preview_paper_height(VALUE fmkr);
|
781
|
+
extern char *Get_tex_preview_hoffset(VALUE fmkr);
|
782
|
+
extern char *Get_tex_preview_voffset(VALUE fmkr);
|
783
|
+
extern char *Get_tex_preview_figure_width(VALUE fmkr);
|
784
|
+
extern char *Get_tex_preview_figure_height(VALUE fmkr);
|
785
|
+
extern char *Get_tex_preview_minwhitespace(VALUE fmkr);
|
786
|
+
extern bool Get_tex_preview_fullpage(VALUE fmkr);
|
787
|
+
|
788
|
+
extern char *Get_tex_preview_tiogafigure_command(VALUE fmkr);
|
789
|
+
|
790
|
+
extern char *Get_tex_fontsize(VALUE fmkr);
|
791
|
+
extern char *Get_tex_fontfamily(VALUE fmkr);
|
792
|
+
extern char *Get_tex_fontseries(VALUE fmkr);
|
793
|
+
extern char *Get_tex_fontshape(VALUE fmkr);
|
794
|
+
|
795
|
+
extern char *Get_tex_preview_generated_preamble(VALUE fmkr);
|
796
|
+
|
797
|
+
#ifndef USE_P
|
798
|
+
#define USE_P p = NULL;
|
799
|
+
#endif
|
800
|
+
#ifndef STRLEN
|
801
|
+
#define STRLEN 256
|
802
|
+
#endif
|
803
|
+
#ifndef PI
|
804
|
+
#define PI 3.1415926535897932384
|
805
|
+
#endif
|
806
|
+
#ifndef MAX
|
807
|
+
#define MAX(a,b) (((a) > (b)) ? (a) : (b))
|
808
|
+
#endif
|
809
|
+
#ifndef MIN
|
810
|
+
#define MIN(a,b) (((a) < (b)) ? (a) : (b))
|
811
|
+
#endif
|
812
|
+
#ifndef ABS
|
813
|
+
#define ABS(a) ((a)<0 ? -(a) : (a))
|
814
|
+
#endif
|
815
|
+
#ifndef ROUND
|
816
|
+
#define ROUND(a) (int)((a)<0.0 ? ((a)-0.5) : ((a)+0.5))
|
817
|
+
#endif
|
818
|
+
#ifndef SIGN
|
819
|
+
#define SIGN(a) ((a)<0 ? -1 : 1)
|
820
|
+
#endif
|
821
|
+
|
822
|
+
#define DBL_ATTR(attr) \
|
823
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return rb_float_new(p->attr); } \
|
824
|
+
static VALUE FM_##attr##_set(VALUE fmkr, VALUE val) { \
|
825
|
+
FM *p = Get_FM(fmkr); VALUE v = rb_Float(val); p->attr = NUM2DBL(v); return val; }
|
826
|
+
|
827
|
+
#define INT_ATTR(attr) \
|
828
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return INT2FIX(p->attr); } \
|
829
|
+
static VALUE FM_##attr##_set(VALUE fmkr, VALUE val) { \
|
830
|
+
FM *p = Get_FM(fmkr); VALUE v = rb_Integer(val); p->attr = NUM2INT(v); return val; }
|
831
|
+
|
832
|
+
#define VAL_ATTR(attr) \
|
833
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return p->attr; } \
|
834
|
+
static VALUE FM_##attr##_set(VALUE fmkr, VALUE val) { \
|
835
|
+
FM *p = Get_FM(fmkr); p->attr = val; return val; }
|
836
|
+
|
837
|
+
#define BOOL_ATTR(attr) \
|
838
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return (p->attr)? Qtrue : Qfalse; } \
|
839
|
+
static VALUE FM_##attr##_set(VALUE fmkr, VALUE val) { \
|
840
|
+
FM *p = Get_FM(fmkr); p->attr = (val != Qfalse); return val; }
|
841
|
+
|
842
|
+
#define RO_DBL_ATTR(attr) \
|
843
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return rb_float_new(p->attr); }
|
844
|
+
|
845
|
+
#define RO_INT_ATTR(attr) \
|
846
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return INT2FIX(p->attr); }
|
847
|
+
|
848
|
+
#define RO_VAL_ATTR(attr) \
|
849
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return p->attr; }
|
850
|
+
|
851
|
+
#define RO_BOOL_ATTR(attr) \
|
852
|
+
static VALUE FM_##attr##_get(VALUE fmkr) { FM *p = Get_FM(fmkr); return (p->attr)? Qtrue : Qfalse; }
|
853
|
+
|
854
|
+
#endif /* __figures_H__ */
|
855
|
+
|