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
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <syserr.h>
include <gio.h>
# GRSCALE -- Rescale the world coordinates of either the X or Y axis to fit the
# data vector. This is done by taking the minimum and maximum of the current
# WCS limits and the data vector. May be called repeatedly to find the range
# of a family of vectors.
procedure grscale (gp, v, npts, axis)
pointer gp # graphics descriptor
real v[ARB] # data vector
int npts # length of data vector
int axis # asis to be scaled (1=X, 2=Y)
int start, i
real minval, maxval, pixval
pointer w
begin
# Find first definite valued pixel. If entire data vector is
# indefinite we merely ignore it, since the window is presumably
# already set.
for (start=1; start <= npts; start=start+1)
if (!IS_INDEF (v[start]))
break
if (start > npts)
return
minval = v[start]
maxval = minval
# Compute min and max values of data vector.
do i = start+1, npts {
pixval = v[i]
if (!IS_INDEF(pixval))
if (pixval < minval)
minval = pixval
else if (pixval > maxval)
maxval = pixval
}
w = GP_WCSPTR (gp, GP_WCS(gp))
# Update the window limits.
switch (axis) {
case 1:
WCS_WX1(w) = min (WCS_WX1(w), minval)
WCS_WX2(w) = max (WCS_WX2(w), maxval)
case 2:
WCS_WY1(w) = min (WCS_WY1(w), minval)
WCS_WY2(w) = max (WCS_WY2(w), maxval)
default:
call syserr (SYS_GSCALE)
}
WCS_FLAGS(w) = or (WCS_FLAGS(w), WF_DEFINED)
GP_WCSSTATE(gp) = MODIFIED
call gpl_reset()
end
|