cgwindow_setdefs.pro
22.9 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
; docformat = 'rst'
;
; NAME:
; cgWindow_SetDefs
;
; PURPOSE:
; Allows the user to set global defaults for resizeable cgWindow programs.
;
;******************************************************************************************;
; ;
; Copyright (c) 2011, by Fanning Software Consulting, Inc. All rights reserved. ;
; ;
; Redistribution and use in source and binary forms, with or without ;
; modification, are permitted provided that the following conditions are met: ;
; ;
; * Redistributions of source code must retain the above copyright ;
; notice, this list of conditions and the following disclaimer. ;
; * Redistributions in binary form must reproduce the above copyright ;
; notice, this list of conditions and the following disclaimer in the ;
; documentation and/or other materials provided with the distribution. ;
; * Neither the name of Fanning Software Consulting, Inc. nor the names of its ;
; contributors may be used to endorse or promote products derived from this ;
; software without specific prior written permission. ;
; ;
; THIS SOFTWARE IS PROVIDED BY FANNING SOFTWARE CONSULTING, INC. ''AS IS'' AND ANY ;
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES ;
; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT ;
; SHALL FANNING SOFTWARE CONSULTING, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, ;
; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;
; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; ;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ;
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ;
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;
;******************************************************************************************;
;
;+
; Allows the user to set global defaults for resizeable cgWindow programs.
;
; :Categories:
; Graphics
;
; :Keywords:
; adjustsize: in, optional, type=boolean, default=0
; Set this keyword to have the default text size adjusted to fit the size of the
; display window.
; aspect: in, optional, type=float, default=0.0
; Set the aspect ratio of the window. If set to 0, the normal "default" window
; aspect ratio is used and nothing special is done when the window is resize.
; If aspect is not 0, then the window is confined to this aspect ratio.
; background: in, optional, type=string
; The background color of the window. Only use if the ERASEIT property is also set.
; delay: in, optional, type=float, default=0
; Set this keyword to the amount of delay desired between command execution. 0
; eraseit: in, optional, type=boolean
; If this property is set, the cgWindow erases with the background color before
; displaying the commands in the window's command list.
; im_density: in, optional, type=integer, default=300
; Set this keyword to the sampling density when ImageMagick creates raster image
; file from PostScript output.
; im_png8: in, optional, type=boolean, default=0
; Set this keyword to create an 8-bit PNG file rather than the normal 24-bit PNG file.
; im_options: in, optional, type=string, default=""
; Set this keyword to any ImageMagick options you would like to pass along to the
; ImageMagick convert command when creating raster image files from PostScript output.
; im_raster: in, optional, type=boolean, default=1 (if ImageMagick is found)
; When raster files are created programmatically, this keyword determines if the
; raster file is created directly in IDL (value =0) or is created from a PostScript
; intermediate file via ImageMagick (value =1). The default is via ImageMagick if the
; convert program can be found on the machine running the program.
; im_resize: in, optional, type=integer, default=25
; Set this keyword to percentage that the raster image file created my ImageMagick
; from PostScript output should be resized.
; im_tiff_depth: in, optional, type=integer, default=8
; Set this keyword to the number of bits per channel in TIFF file output. Allowed values
; are 8, 16, and 32.
; im_transparent: in, optional, type=boolean, default=0
; Set this keyword to allow ImageMagick to create transparent backgrounds when it
; makes raster image files from PostScript output.
; im_width: in, optional, type=integer
; Set this keyword to the width of the output raster file in pixel units. The height of the raster
; file is set to preserve the aspect ratio of the output image. Applies only to raster images (eg
; PNG, JPEG, TIFF, etc.) created from PostScript files with ImageMagick.
; multi: in, optional, type=Intarr(5)
; Set this keyword to the !P.MULTI setting you want to use for the window.
; !P.MULTI is set to this setting before command execution, and set back to
; it's default value when the commands are finished executing.
; palette: in, optional, type=byte
; Use this keyword to pass in an N-by-3 (or 3-by-N) byte array containing the
; R, G, and B vectors of a color table. It is probably easier to use cgLoadCT or
; XCOLORS to load color tables for the window, but this is provided as another option.
; pdf_path: out, optional, type=string
; Set this keyword to the name of the path to the Ghostscript command for converting PS to PDF.
; pdf_unix_convert_cmd: out, optional, type=string
; Set this keyword to the name of an alternative UNIX command to convert PostScript to PDF.
; ps_charsize: in, optional, type=float, default=0.0
; Set this value to the !P.Charsize value to use when creating PostScript output. This
; value is not used if !P.Charsize is set to anything other than 0.0.
; ps_decomposed: in, optional, type=boolean
; If set, use decomposed color in the PostScript device.
; ps_delete: in, optional, type=boolean, default=1
; Set this keyword to zero if you want to keep the PostScript output ImageMagick creates
; when making raster file output.
; ps_encapsulated: in, optional, type=boolean, default=0
; Set this keyword to configure cgPS_Config to produce encapsulated PostScript output by default.
; ps_font: in, optional, type=integer, default=0
; Set this to the !P.Font value to use for creating PostScript files.
; ps_metric: in, optional, type=boolean, default=0
; Set this keyword to configure cgPS_Config to use metric values and A4 page size in its interface.
; ps_quiet: in, optional, type=boolean, default=0
; Set this keyword to suppress output messages from cgPS_Open and cgPS_Close.
; ps_scale_factor: in, optional, type=float, default=1.0
; Set this keyword to the PostScript scale factor you want to use for PostScript output.
; ps_tt_font: in, optional, type=string, default="Helvetica"
; Set this keyword to the name of the PostScript true-type font to use for PostScript output.
; Not used, unless !P.Font=1.
; reset: in, optional, type=boolean, default=0
; Set this keyword to reset all values to their default values.
; title: in, optional, type=boolean
; If this keyword is set, the selection is assumed to be a window title. All
; matching is done in uppercase characters.
; xomargin: in, optional, type=intarr(2)
; Set this keyword to set !X.OMargin to this value for multiplots.
; xpos: in, optional, type=integer
; Set this keyword to the X offset of the window from the upper-left corner of the display.
; xsize: in, optional, type=integer, default=640
; Set this keyword to the starting X size of the window.
; yomargin: in, optional, type=intarr(2)
; Set this keyword to set !Y.OMargin to this value for multiplots.
; ypos: in, optional, type=integer
; Set this keyword to the Y offset of the window from the upper-left corner of the display.
; ysize: in, optional, type=integer, default=512
; Set this keyword to the starting Y size of the window.
;
; :Examples:
; Used to set cgWindow global properties::
; IDL> cgLoadCT, 5, RGB_TABLE=palette
; IDL> cgWindow_SetDefs, PALETTE=palette, $
; ERASEIT=1, XSIZE=800, YSIZE=400, XPOS=100, YPOS=200, $
; PS_ENCAPSULATED=1, PS_METRIC=1
; IDL> cgImage, cgDemoData(7), /WINDOW, MARGIN=0.1
;
; :Author:
; FANNING SOFTWARE CONSULTING::
; David W. Fanning
; 1645 Sheely Drive
; Fort Collins, CO 80526 USA
; Phone: 970-221-0438
; E-mail: david@idlcoyote.com
; Coyote's Guide to IDL Programming: http://www.idlcoyote.com
;
; :History:
; Change History::
; Written, 29 January 2011. DWF.
; Small bug fixes, and addition of PS_QUIET keyword. 17 Feb 2011. DWF.
; Added Raster_IM, 18 February 2011. Jeremy Bailin.
; Added the ability to set and unset adjustable text size in
; cgWindow with ADJUSTSIZE keyword. 24 April 2011. DWF.
; Added PS_DECOMPOSED keyword to set the PostScript color mode. 30 Aug 2011. DWF.
; Added ASPECT keyword to allow getting/setting of window aspect ratio. 18 Nov 2011. DWF.
; Added PDF_UNIX_CONVERT_CMD and PDF_PATH keywords. 7 Dec 2011. DWF.
; Added IM_WIDTH keyword. 3 April 2012. DWF.
; Added IM_PNG8 keyword. 3 April 2012. DWF.
; Added IM_TIFF_DEPTH keyowrd. 14 May 2013. DWF.
;
; :Copyright:
; Copyright (c) 2011, Fanning Software Consulting, Inc.
;-
PRO cgWindow_SetDefs, $
AdjustSize = adjustsize, $ ; Adjusts text size to fit display window size.
Aspect = aspect, $ ; Set the aspect ratio of the window.
Background = background, $ ; The background color.
Delay = delay, $ ; The delay between command execution.
EraseIt = eraseit, $ ; Set this keyword to erase the display before executing the commands.
IM_Density = im_density, $ ; Sets the density parameter on ImageMagick convert command.
IM_PNG8 = im_png8, $ ; Set this keyword to create an 8-bit PNG file, rather than 24-bit.
IM_Options = im_options, $ ; Sets extra ImageMagick options on the ImageMagick convert command.
IM_Raster = im_raster, $ ; Sets thee raster via ImageMagick setting.
IM_Resize = im_resize, $ ; Sets the resize parameter on ImageMagick convert command.
IM_TIFF_Depth = im_tiff_depth, $ ; Set the channel depth of TIFF files on ImageMagick convert command.
IM_Transparent = im_transparent, $ ; Sets the "alpha" keyword on ImageMagick convert command.
IM_Width=im_width, $ ; Set the width of raster file output from PostScript files.
Multi = multi, $ ; Set this in the same way !P.Multi is used.
Palette = palette, $ ; The color table palette to use for the window.
PDF_Unix_Convert_Cmd = pdf_unix_convert_cmd, $ ; Command to convert PS to PDF.
PDF_Path = pdf_path, $ ; The path to the Ghostscript conversion command.
PS_Decomposed = ps_decomposed, $ ; If set, use decomposed color in PostScript.
PS_Delete = ps_delete, $ ; Delete the PostScript file when making IM files.
PS_Metric = ps_metric, $ ; Select metric measurements in PostScript output.
PS_Encapsulated = ps_encapsulated, $ ; Create Encapsulated PostScript output.
PS_FONT=ps_font, $ ; Select the font for PostScript output.
PS_CHARSIZE=ps_charsize, $ ; Select the character size for PostScript output.
PS_QUIET=ps_quiet, $ ; Select the QUIET keyword for cgPS_Open.
PS_SCALE_FACTOR=ps_scale_factor, $ ; Select the scale factor for PostScript output.
PS_TT_FONT=ps_tt_font, $ ; Select the true-type font to use for PostScript output.
Reset=reset, $ ; Reset to original values.
XOMargin = xomargin, $ ; Set the !X.OMargin. A two element array.
YOMargin = yomargin, $ ; Set the !Y.OMargin. A two element array
XSize = xsize, $ ; The X size of the cgWindow graphics window.
YSize = ysize, $ ; The Y size of the cgWindow graphics window.
Title = title, $ ; The window title.
XPos = xpos, $ ; The X offset of the window on the display.
YPos = ypos ; The Y offset of the window on the display.
Compile_Opt idl2
; Return to caller on error.
ON_Error, 2
; Does the defaults structure exist? If not, you have to create it.
DefSysV, '!FSC_WINDOW_DEFAULTS', EXISTS=exists
IF ~exists || Keyword_Set(reset) THEN BEGIN
; Check the various keywords. Create defaults.
IF N_Elements(adjustsize) EQ 0 THEN adjustsize = 0
IF N_Elements(aspect) EQ 0 THEN aspect = 0.0
IF N_Elements(background) EQ 0 THEN background = 'white'
IF N_Elements(delay) EQ 0 THEN delay = 0
IF N_Elements(eraseit) EQ 0 THEN eraseit = 0
IF N_Elements(multi) EQ 0 THEN multi = Intarr(5)
IF N_Elements(xomargin) EQ 0 THEN xomargin = FltArr(2)
IF N_Elements(yomargin) EQ 0 THEN yomargin = FltArr(2)
IF N_Elements(xsize) EQ 0 THEN xsize = 640
IF N_Elements(ysize) EQ 0 THEN ysize = 512
IF N_Elements(title) EQ 0 THEN title = 'Resizeable Graphics Window'
IF N_Elements(xpos) EQ 0 THEN xpos = -1
IF N_Elements(ypos) EQ 0 THEN ypos = -1
IF N_Elements(palette) EQ 0 THEN palette = BytArr(256,3)
IF N_Elements(im_density) EQ 0 THEN im_density = 300
im_png8 = Keyword_Set(im_png8)
IF N_Elements(im_options) EQ 0 THEN im_options = ""
IF N_Elements(im_raster) EQ 0 THEN BEGIN
IF cgHasImageMagick() THEN im_raster = 1 ELSE im_raster = 0
ENDIF
IF N_Elements(im_resize) EQ 0 THEN im_resize = 25
IF N_Elements(im_tiff_depth) EQ 0 THEN im_tiff_depth = 8
IF N_Elements(im_transparent) EQ 0 THEN im_transparent = 0
IF N_Elements(im_width) EQ 0 THEN im_width = 0
IF N_Elements(pdf_unix_convert_cmd) EQ 0 THEN pdf_unix_convert_cmd = ""
IF N_Elements(pdf_path) EQ 0 THEN pdf_path = ""
IF N_Elements(ps_charsize) EQ 0 THEN ps_charsize = 0.0
IF N_Elements(ps_encapsulated) EQ 0 THEN ps_encapsulated = 0
IF N_Elements(ps_font) EQ 0 THEN ps_font = 0
IF N_Elements(ps_decomposed) EQ 0 THEN ps_decomposed = 0 ; Index mode by default.
IF N_Elements(ps_delete) EQ 0 THEN ps_delete = 1
IF N_Elements(ps_metric) EQ 0 THEN ps_metric = 0
IF N_Elements(ps_quiet) EQ 0 THEN ps_quiet = 0
IF N_Elements(ps_scale_factor) EQ 0 THEN ps_scale_factor = 1.0
IF N_Elements(ps_tt_font) EQ 0 THEN ps_tt_font = 'Helvetica'
; Define the default structure.
fsc_window_defaults = { _$_FSC_WINDOW_DEFAULTS, $
Adjustsize:adjustsize, $ ; Adjust text size.
Aspect:aspect, $ ; The window aspect ratio.
Background:background, $ ; The background color.
Delay: delay, $ ; Set this keyword to the delay between command execution.
EraseIt:eraseit, $ ; Set this keyword to erase the display before executing the commands.
Multi:multi, $ ; Set this in the same way !P.Multi is used.
xomargin:xomargin, $ ; Set the !X.OMargin. A two element array.
yomargin:yomargin, $ ; Set the !Y.OMargin. A two element array
XSize:xsize, $ ; The X size of the cgWindow graphics window.
YSize:ysize, $ ; The Y size of the cgWindow graphics window.
Title:title, $ ; The window title.
XPos:xpos, $ ; The X offset of the window on the display.
YPos:ypos, $ ; The Y offset of the window on the display.
Palette:palette, $ ; The color table palette to use for the window.
IM_Density:im_density, $ ; Sets the density parameter on ImageMagick convert command.
IM_PNG8:im_png8, $ ; If set create 8-bit rather than 24-bit PNG files.
IM_Options:im_options, $ ; Sets extra ImageMagick options on the ImageMagick convert command.
IM_Raster:im_raster, $ ; Sets the raster via ImageMagick setting.
IM_Resize:im_resize, $ ; Sets the resize parameter on ImageMagick convert command.
IM_TIFF_Depth:im_tiff_depth, $ ; Sets the channel depth of TIFF files on ImageMagick convert command.
IM_Transparent:im_transparent, $ ; Sets the "alpha" keyword on ImageMagick convert command.
IM_Width:im_width, $ ; Sets the width of raster output on raster files created with ImageMagick.
PDF_UNIX_Convert_Cmd: pdf_unix_convert_cmd, $ ; Sets the PDF alternative conversion command.
PDF_Path: pdf_path, $ ; Set the path to the PDF conversion command.
PS_Decomposed:ps_decomposed, $ ; Sets the PostScript color mode.
PS_Delete:ps_delete, $ ; Delete the PostScript file when making IM files.
PS_Metric:ps_metric, $ ; Select metric measurements in PostScript output.
PS_Encapsulated:ps_encapsulated, $ ; Create Encapsulated PostScript output.
PS_Charsize:ps_charsize, $ ; PostScript character size.
PS_Font:ps_font, $ ; PostScript font to use.
PS_Quiet:ps_quiet, $ ; PostScript QUIET keyword on cgPS_Open.
PS_Scale_Factor:ps_scale_factor, $ ; PostScript scale_factor
PS_TT_Font:ps_tt_font } ; PostScript true-type font.
IF Keyword_Set(reset) THEN BEGIN
!FSC_WINDOW_DEFAULTS = fsc_window_defaults
ENDIF ELSE BEGIN
DefSysV, '!FSC_WINDOW_DEFAULTS', fsc_window_defaults
ENDELSE
ENDIF ELSE BEGIN
IF N_Elements(adjustsize) NE 0 THEN !FSC_WINDOW_DEFAULTS.adjustsize = adjustsize
IF N_Elements(aspect) NE 0 THEN !FSC_WINDOW_DEFAULTS.aspect = aspect
IF N_Elements(background) NE 0 THEN !FSC_WINDOW_DEFAULTS.background = background
IF N_Elements(delay) NE 0 THEN !FSC_WINDOW_DEFAULTS.delay = delay
IF N_Elements(eraseit) NE 0 THEN !FSC_WINDOW_DEFAULTS.eraseit = eraseit
IF N_Elements(multi) NE 0 THEN !FSC_WINDOW_DEFAULTS.multi = multi
IF N_Elements(xomargin) NE 0 THEN !FSC_WINDOW_DEFAULTS.xomargin = xomargin
IF N_Elements(yomargin) NE 0 THEN !FSC_WINDOW_DEFAULTS.yomargin = oymargin
IF N_Elements(xsize) NE 0 THEN !FSC_WINDOW_DEFAULTS.xsize = xsize
IF N_Elements(ysize) NE 0 THEN !FSC_WINDOW_DEFAULTS.ysize = ysize
IF N_Elements(title) NE 0 THEN !FSC_WINDOW_DEFAULTS.title = title
IF N_Elements(xpos) NE 0 THEN !FSC_WINDOW_DEFAULTS.xpos = xpos
IF N_Elements(ypos) NE 0 THEN !FSC_WINDOW_DEFAULTS.ypos = ypos
IF N_Elements(palette) NE 0 THEN !FSC_WINDOW_DEFAULTS.palette = palette
IF N_Elements(im_density) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_density = im_density
IF N_Elements(im_png8) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_png8 = im_png8
IF N_Elements(im_options) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_options = im_options
IF N_Elements(im_raster) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_raster = im_raster
IF N_Elements(im_resize) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_resize = im_resize
IF N_Elements(im_tiff_depth) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_tiff_depth = im_tiff_depth
IF N_Elements(im_transparent) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_transparent = Keyword_Set(im_transparent)
IF N_Elements(im_width) NE 0 THEN !FSC_WINDOW_DEFAULTS.im_width = im_width
IF N_Elements(raster_im) NE 0 then !FSC_WINDOW_DEFAULTS.raster_im = raster_im
IF N_Elements(pdf_unix_convert_cmd) NE 0 THEN !FSC_WINDOW_DEFAULTS.pdf_unix_convert_cmd = pdf_unix_convert_cmd
IF N_Elements(pdf_path) NE 0 THEN !FSC_WINDOW_DEFAULTS.pdf_path = pdf_path
IF N_Elements(ps_decomposed) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_decomposed = Keyword_Set(ps_decomposed)
IF N_Elements(ps_delete) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_delete = Keyword_Set(ps_delete)
IF N_Elements(ps_metric) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_metric = Keyword_Set(ps_metric)
IF N_Elements(ps_encapsulated) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_encapsulated = Keyword_Set(ps_encapsulated)
IF N_Elements(ps_charsize) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_charsize = ps_charsize
IF N_Elements(ps_font) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_font = ps_font
IF N_Elements(ps_quiet) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_quiet = ps_quiet
IF N_Elements(ps_scale_factor) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_scale_factor = ps_scale_factor
IF N_Elements(ps_tt_font) NE 0 THEN !FSC_WINDOW_DEFAULTS.ps_tt_font = ps_tt_font
ENDELSE
END