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
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <gset.h>
include <imhdr.h>
include <time.h>
include "wdes.h"
include "crtpict.h"
# CRT_DRAW_GRAPHICS -- Draw histogram plots and id information at the bottom of
# the output print.
procedure crt_draw_graphics (gp, im, cl, wdes)
pointer gp # Pointer to graphics descriptor
pointer im # Pointer to input image
pointer cl # Pointer to cl parameter structure
pointer wdes # Pointer to window descriptor
pointer w1, w0
char text[SZ_LINE], system_id[SZ_LINE]
int ndev_rows, ndev_cols
real ndc_xs, ndc_xe, ndc_ys, ndc_ye # Graphics (NDC) viewport
real h_xs, h_xe, h_ys, h_ye # Histogram viewport
real tx1_xc, tx1_ly, tx2_xs, tx2_ly, tx3_xs, tx3_ly, tx4_xs, tx4_ly
real px1, px2, py1, py2, pxcenter, pycenter, yres
real vx1, vx2, vy1, vy2, tx_start, xrf, yrf
int junk
pointer sp, buf
int envfind(), envputs()
int strlen(), ggeti()
errchk strlen, ggeti, crt_plot_hgrams, ggwind, ggview
errchk gtext
begin
ndev_rows = ggeti (gp, "yr")
ndev_cols = ggeti (gp, "xr")
yres = (CRT_YE - CRT_YS) * ndev_rows
w0 = W_WC (wdes, 0)
w1 = W_WC (wdes, 1)
# The (NDC) device coordinates of the entire graphics viewport:
ndc_xs = CRT_XS
ndc_xe = CRT_XE
ndc_ys = CRT_YS
ndc_ye = CRT_YS + real (yres * GRAPHICS_FRACTION(cl) / ndev_rows)
# Working up from the bottom of the print, locations of various
# sections of the graphics are are calculated. String TEXT1 will
# be centered in x at tx1_xc and have lower y coordinate tx1_ly:
tx1_xc = (ndc_xe + ndc_xs) / 2.0
tx1_ly = ndc_ys
# The three histograms occupy the space calculated next. This
# space is broken into individual plots in a separate procedure.
h_xs = ndc_xs
h_xe = ndc_xe
h_ys = ndc_ys + ((ndc_ye - ndc_ys) * (TEXT1 + SPACE))
h_ye = h_ys + ((ndc_ye - ndc_ys) * HGRAMS)
# The left starting position of the text strings is calculated to
# line up with the leftmost histogram window:
tx_start = h_xs + ((h_xe - h_xs) / 6.0) - ((h_xe - h_xs) / 8.0)
# String TEXT2 has the following starting_x and lower_y coordinates:
tx2_xs = tx_start
tx2_ly = h_ye + ((ndc_ye - ndc_ys) * SPACE)
# String TEXT3 has these starting_x and lower_y coordinates:
tx3_xs = tx_start
tx3_ly = ndc_ys + ((TEXT1 + HGRAMS + TEXT2 + SPACE) * (ndc_ye - ndc_ys))
# String TEXT4 has these starting_x and lower_y coordinates:
tx4_xs = tx_start
tx4_ly = ndc_ys + ((TEXT1+HGRAMS+TEXT2+TEXT3+SPACE) * (ndc_ye - ndc_ys))
# Draw 3 plots describing transformation of image
call crt_plot_histograms (gp, cl, im, wdes, h_xs, h_xe, h_ys, h_ye)
# Set graphics WCS to WCS 0 for text plotting
call gseti (gp, G_WCS, 0)
# Text line 3 has the image filename and title string.
call sprintf (text, SZ_LINE, "%s: %s")
call pargstr (W_IMSECT(wdes))
call pargstr (IM_TITLE(im))
call gtext (gp, tx3_xs, tx3_ly, text, "s=0.5")
# Text line 2 contains image and transformation information; it
# is necessary to change to WCS_2 to retrieve the information:
call gseti (gp, G_WCS, 2)
call ggwind (gp, px1, px2, py1, py2)
call ggview (gp, vx1, vx2, vy1, vy2)
call gseti (gp, G_WCS, 0)
pxcenter = (px1 + px2) / 2.0
pycenter = (py1 + py2) / 2.0
xrf = ((vx2 * ndev_cols) - (vx1 * ndev_cols)) / (px2 - px1 + 1.0)
yrf = ((vy2 * ndev_rows) - (vy1 * ndev_rows)) / (py2 - py1 + 1.0)
call sprintf (text, SZ_LINE,
"ncols=%d nrows=%d zmin=%g zmax=%g xc=%0.2f yc=%0.2f")
call pargi (IM_LEN(im,1))
call pargi (IM_LEN(im,2))
call pargr (IM_MIN(im))
call pargr (IM_MAX(im))
call pargr (pxcenter)
call pargr (pycenter)
call sprintf (text[strlen(text)+1], SZ_LINE, " x_rep=%.2f y_rep=%.2f")
call pargr (xrf)
call pargr (yrf)
call gtext (gp, tx2_xs, tx2_ly, text, "s=0.35")
# Text line 1 gives the time and date the output was written
call sysid (system_id, SZ_LINE)
call gtext (gp, tx1_xc, tx1_ly, system_id, "h=c;s=0.45")
# Also output transformation information to STDOUT
call printf ("ncols=%d nrows=%d zmin=%g zmax=%g xc=%.2f yc=%.2f")
call pargi (IM_LEN(im,1))
call pargi (IM_LEN(im,2))
call pargr (IM_MIN(im))
call pargr (IM_MAX(im))
call pargr (pxcenter)
call pargr (pycenter)
call printf (" xrf=%.2f yrf=%.2f\n")
call pargr (xrf)
call pargr (yrf)
call printf ("%s \n")
call pargstr (system_id)
# The following was added 17Dec85 at the request of the photo lab.
# It allows the negative to be identified easily by user name in
# addition to the sequence number written by the 11/23 program.
call smark (sp)
call salloc (buf, SZ_LINE, TY_CHAR)
if (envfind ("userid", Memc[buf], SZ_LINE) <= 0) {
call getuid (Memc[buf], SZ_LINE)
junk = envputs ("userid", Memc[buf])
}
call gtext (gp, CRT_XE, 0.001, Memc[buf], "h=r;v=b;s=1.2")
call sfree (sp)
end
|