STScI logoSTSDAS Help Pages
t_markdq t_markdq


include <fset.h>
include <gset.h>
include <imhdr.h>

# T_MARKDQ -- Mark dots on the image in the image display

procedure t_markdq ()

pointer	image1, image2	               	# pointer to name of the image

pointer	sp, im1, im2, iw
int	frame, color[15], dotsize, wcs_status

int	clgeti()
pointer	immap (), imd_mapframe(), iw_open()

begin
	# Set standard output to flush on newline.
	call fseti (STDOUT, F_FLUSHNL, YES)

	# Allocate working space.
	call smark (sp)
	call salloc (image1, SZ_FNAME, TY_CHAR)
	call salloc (image2, SZ_FNAME, TY_CHAR)

	# Get cl parameters
	call clgstr ("image", Memc[image1], SZ_FNAME)
	im1 = immap (Memc[image1], READ_ONLY, 0)
	frame = clgeti ("frame")
	dotsize = clgeti ("pointsize")
	color[1] = clgeti ("col1")
	color[2] = clgeti ("col2")
	color[3] = clgeti ("col3")
	color[4] = clgeti ("col4")
	color[5] = clgeti ("col5")
	color[6] = clgeti ("col6")
	color[7] = clgeti ("col7")
	color[8] = clgeti ("col8")
	color[9] = clgeti ("col9")
	color[10] = clgeti ("col10")
	color[11] = clgeti ("col11")
	color[12] = clgeti ("col12")
	color[13] = clgeti ("col13")
	color[14] = clgeti ("col14")
	color[15] = clgeti ("col15")

	# Make sure dotsize is an odd number
	if (mod (dotsize, 2) == 0)
	    dotsize = dotsize + 1
	dotsize = dotsize / 2

	# Open the display frame as an image.
	im2 = imd_mapframe (frame, READ_WRITE, YES)
	iw = iw_open (im2, frame, Memc[image2], SZ_FNAME, wcs_status)

	# Mark the image frame.
	call mk_bmark (im1, im2, iw, color, dotsize)

	# Close up the file lists and free memory.
	call iw_close (iw)
	call imunmap (im1)
	call imunmap (im2)

	call sfree (sp)
end

# MK_BMARK -- Procedure to mark symbols in the frame buffer given a coordinate
# list and a mark type.

procedure mk_bmark (im1, im2, iw, color, dotsize)

pointer	im1	# image descriptor
pointer	im2	# frame image descriptor
pointer iw	# pointer to the wcs structure
int	color[11]
int	dotsize

int	ncols, nlines, x1, x2, y1, y2
int	i, j, k
int	nx, ny
real	fx, fy
pointer	line
int	mk_plimits()
pointer	imgl2s()
bool	ands()
short	val

begin

	nx = IM_LEN(im1,1)
	ny = IM_LEN(im1,2)

	ncols  = IM_LEN(im2,1)
	nlines = IM_LEN(im2,2)

	call malloc (line, nx, TY_SHORT)

	# Loop over the image lines.
	do j = 1, ny {

	    # Load the line of the DQ image
	    call amovs (Mems[imgl2s(im1,j)], Mems[line], nx)

	    # Loop through the pixels in this line
	    do i = 1, nx {

		# Is the DQ non-zero for this pixel?
		if (Mems[line+i-1] > 0) {

		    # Check to see which DQ flags are set
		    do k = 1, 11 {
		       val = 2**(k-1)
		       if (ands(Mems[line+i-1],val) && color[k] != 0) {
		      
			   # Get the display x and y coords.
			   call iw_im2fb (iw, real(i), real(j), fx, fy)
			   if (mk_plimits (fx, fy, dotsize, ncols, nlines,
					   x1, x2, y1, y2) == YES)

			   # Draw a flag
			   call mk_drawpt (im2, x1, x2, y1, y2, color[k])
		       }
		    }
		}
	    }
	}

	call imflush (im2)
	call mfree (line, TY_SHORT)

end


# MK_DRAWPT -- Procedure to draw a  point into the frame buffer.

procedure mk_drawpt (im, x1, x2, y1, y2, graylevel)

pointer	im		# pointer to the frame image
int	x1, x2		# column limits
int	y1, y2		# line limits
int	graylevel	# color of dot to be marked

int	i, npix
pointer	vp
pointer	imps2s()

begin
	npix = (x2 - x1 + 1) * (y2 - y1 + 1)
	vp = imps2s (im, x1, x2, y1, y2)
	do i = 1, npix
	    Mems[vp+i-1] = graylevel
end


# MK_PLIMITS -- Compute the extent of a dot.

int procedure mk_plimits (fx, fy, szdot, ncols, nlines, x1, x2, y1, y2)

real	fx, fy		# frame buffer coordinates of point
int	szdot		# size of a dot
int	ncols, nlines	# dimensions of the frame buffer
int	x1, x2		# column limits
int	y1, y2		# line limits

begin
	x1 = nint (fx) - szdot
	x2 = x1 + 2 * szdot
	if (x1 > ncols || x2 < 1)
	    return (NO)
	x1 = max (1, min (ncols, x1))
	x2 = min (ncols, max (1, x2))

	y1 = nint (fy) - szdot
	y2 = y1 + 2 * szdot 
	if (y1 > nlines || y2 < 1)
	    return (NO)
	y1 = max (1, min (nlines, y1))
	y2 = min (nlines, max (1, y2))

	return (YES)
end


Source Code · Search Form · STSDAS

Maintained by the Science Software Group at STScI
This file last updated on 24 Feb 2011