aboutsummaryrefslogtreecommitdiff
path: root/pkg/plot/crtpict/drawgraph.x
blob: 5ee94045bdd73e921159a156a459716e789ba969 (plain) (blame)
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