aboutsummaryrefslogtreecommitdiff
path: root/noao/digiphot/apphot/polyphot/t_polymark.x
diff options
context:
space:
mode:
authorJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
committerJoe Hunkeler <jhunkeler@gmail.com>2015-08-11 16:51:37 -0400
commit40e5a5811c6ffce9b0974e93cdd927cbcf60c157 (patch)
tree4464880c571602d54f6ae114729bf62a89518057 /noao/digiphot/apphot/polyphot/t_polymark.x
downloadiraf-osx-40e5a5811c6ffce9b0974e93cdd927cbcf60c157.tar.gz
Repatch (from linux) of OSX IRAF
Diffstat (limited to 'noao/digiphot/apphot/polyphot/t_polymark.x')
-rw-r--r--noao/digiphot/apphot/polyphot/t_polymark.x240
1 files changed, 240 insertions, 0 deletions
diff --git a/noao/digiphot/apphot/polyphot/t_polymark.x b/noao/digiphot/apphot/polyphot/t_polymark.x
new file mode 100644
index 00000000..4eea5207
--- /dev/null
+++ b/noao/digiphot/apphot/polyphot/t_polymark.x
@@ -0,0 +1,240 @@
+include <gset.h>
+include <fset.h>
+include <imhdr.h>
+include "../lib/apphot.h"
+include "../lib/polyphot.h"
+
+define MAX_NVERTICES 100
+
+# T_POLYMARK -- Create a polygons list file interactively.
+
+procedure t_polymark()
+
+pointer image # pointer to name of image
+pointer polygons # pointer to the polygons file
+pointer coords # pointer to the coords file
+int cache # cache the input image pixels in memory
+pointer display # pointer to display device name
+pointer graphics # pointer to the graphics device
+
+pointer sp, cfname, pfname, im, py, id, gd, str
+int limlist, lplist, lclist, stat, pl, cl, root, pid, cid, wcs
+int imlist, plist, clist, newpy, newcoo, memstat, req_size, old_size
+int buf_size
+
+pointer gopen(), immap()
+int imtlen(), clplen(), imtgetim(), clgfil(), strncmp(), strlen()
+int fnldir(), ap_mkpylist(), imtopenp(), clpopnu(), open(), clgwrd()
+int access(), btoi(), ap_memstat(), sizeof()
+bool clgetb(), streq()
+errchk gopen()
+
+begin
+ # Allocate working space.
+ call smark (sp)
+ call salloc (image, SZ_FNAME, TY_CHAR)
+ call salloc (coords, SZ_FNAME, TY_CHAR)
+ call salloc (polygons, SZ_FNAME, TY_CHAR)
+ call salloc (display, SZ_FNAME, TY_CHAR)
+ call salloc (graphics, SZ_FNAME, TY_CHAR)
+ call salloc (cfname, SZ_FNAME, TY_CHAR)
+ call salloc (pfname, SZ_FNAME, TY_CHAR)
+ call salloc (str, SZ_LINE, TY_CHAR)
+
+ # Set STDOUT.
+ call fseti (STDOUT, F_FLUSHNL, YES)
+
+ # Get input and output file lists.
+ imlist = imtopenp ("image")
+ limlist = imtlen (imlist)
+ plist = clpopnu ("polygons")
+ lplist = clplen (plist)
+ clist = clpopnu ("coords")
+ lclist = clplen (clist)
+
+ # Check that image input and coords file list lengths match.
+ if (lclist > 0 && lclist != limlist) {
+ call imtclose (imlist)
+ call clpcls (plist)
+ call clpcls (clist)
+ call error (0, "Imcompatible image and coord file list lengths")
+ }
+
+ # Check that image input and polygons file list lengths match.
+ if (lplist != limlist) {
+ call imtclose (imlist)
+ call clpcls (plist)
+ call clpcls (clist)
+ call error (0, "Imcompatible image and polygons file list lengths")
+ }
+
+ cache = btoi (clgetb ("cache"))
+
+ # Open the graphics device.
+ call clgstr ("graphics", Memc[graphics], SZ_FNAME)
+ if (Memc[graphics] == EOS)
+ gd = NULL
+ else {
+ iferr {
+ gd = gopen (Memc[graphics], APPEND+AW_DEFER, STDGRAPH)
+ } then {
+ call eprintf ("Warning: Error opening graphics device.\n")
+ gd = NULL
+ }
+ }
+
+ # Open the display device.
+ call clgstr ("display", Memc[display], SZ_FNAME)
+ if (Memc[display] == EOS)
+ id = NULL
+ else if (streq (Memc[display], Memc[graphics])) {
+ id = gd
+ } else {
+ iferr {
+ id = gopen (Memc[display], APPEND, STDIMAGE)
+ } then {
+ call eprintf (
+ "Warning: Graphics overlay not available for display device.\n")
+ id = NULL
+ }
+ }
+
+ # Open the polymark structure.
+ call ap_ymkinit (py)
+
+ # Get the wcs information.
+ wcs = clgwrd ("wcsin", Memc[str], SZ_LINE, WCSINSTR)
+ if (wcs <= 0) {
+ call eprintf (
+ "Warning: Setting the input coordinate system to logical\n")
+ wcs = WCS_LOGICAL
+ }
+ call apseti (py, WCSIN, wcs)
+ wcs = clgwrd ("wcsout", Memc[str], SZ_LINE, WCSOUTSTR)
+ if (wcs <= 0) {
+ call eprintf (
+ "Warning: Setting the output coordinate system to logical\n")
+ wcs = WCS_LOGICAL
+ }
+ call apseti (py, WCSOUT, wcs)
+
+ # Mark polygons.
+ while (imtgetim (imlist, Memc[image], SZ_FNAME) != EOF) {
+
+ # Open image.
+ im = immap (Memc[image], READ_ONLY, 0)
+ call apimkeys (py, im, Memc[image])
+
+ # Establish the image display viewport and window.
+ if ((id != NULL) && (id != gd))
+ call ap_gswv (id, Memc[image], im, 4)
+
+ # Cache the input image pixels.
+ req_size = MEMFUDGE * IM_LEN(im,1) * IM_LEN(im,2) *
+ sizeof (IM_PIXTYPE(im))
+ memstat = ap_memstat (cache, req_size, old_size)
+ if (memstat == YES)
+ call ap_pcache (im, INDEFI, buf_size)
+
+ # Set the polygon file name.
+ if (lplist == 0)
+ pl = NULL
+ else {
+ stat = clgfil (plist, Memc[polygons], SZ_FNAME)
+ root = fnldir (Memc[polygons], Memc[pfname], SZ_FNAME)
+ if (strncmp ("default", Memc[polygons+root], 7) == 0 || root ==
+ strlen (Memc[polygons])) {
+ call apoutname (Memc[image], Memc[pfname], "ver",
+ Memc[pfname], SZ_FNAME)
+ lplist = limlist
+ } else if (stat != EOF)
+ call strcpy (Memc[polygons], Memc[pfname], SZ_FNAME)
+ if (access (Memc[pfname], READ_WRITE, TEXT_FILE) == YES) {
+ newpy = NO
+ pl = open (Memc[pfname], READ_WRITE, TEXT_FILE)
+ } else {
+ newpy = YES
+ pl = open (Memc[pfname], NEW_FILE, TEXT_FILE)
+ call close (pl)
+ pl = open (Memc[pfname], READ_WRITE, TEXT_FILE)
+ }
+ }
+ call apsets (py, PYNAME, Memc[pfname])
+
+ # Set the coord file name.
+ if (lclist == 0)
+ cl = NULL
+ else {
+ stat = clgfil (clist, Memc[coords], SZ_FNAME)
+ root = fnldir (Memc[coords], Memc[cfname], SZ_FNAME)
+ if (strncmp ("default", Memc[coords+root], 7) == 0 || root ==
+ strlen (Memc[coords])) {
+ call apoutname (Memc[image], Memc[cfname], "coo",
+ Memc[cfname], SZ_FNAME)
+ lclist = limlist
+ } else if (stat != EOF)
+ call strcpy (Memc[coords], Memc[cfname], SZ_FNAME)
+ if (access (Memc[cfname], READ_WRITE, TEXT_FILE) == YES) {
+ newcoo = NO
+ cl = open (Memc[cfname], READ_WRITE, TEXT_FILE)
+ } else {
+ newcoo = YES
+ cl = open (Memc[cfname], NEW_FILE, TEXT_FILE)
+ call close (cl)
+ cl = open (Memc[cfname], READ_WRITE, TEXT_FILE)
+ }
+ }
+ call apsets (py, CLNAME, Memc[cfname])
+
+ # Mark polygons on each image.
+ pid = 1
+ cid = 1
+ stat = ap_mkpylist (im, py, pl, cl, id, gd, pid, cid)
+
+ # Unmap the input image.
+ call imunmap (im)
+
+ # Close the polygon file.
+ if (pl != NULL) {
+ call close (pl)
+ if (newpy == YES && pid <= 1)
+ call delete (Memc[pfname])
+ }
+
+ # Close the coordinate file.
+ if (cl != NULL) {
+ if (cid > 1) {
+ call seek (cl, EOF)
+ call fprintf (cl, ";\n")
+ }
+ call close (cl)
+ if (newcoo == YES && cid <= 1)
+ call delete (Memc[cfname])
+ }
+
+ # Uncache memory.
+ call fixmem (old_size)
+
+ if (stat == YES)
+ break
+ }
+
+ # Close the graphics and image display devices.
+ if (id == gd && id != NULL)
+ call gclose (id)
+ else {
+ if (gd != NULL)
+ call gclose (gd)
+ if (id != NULL)
+ call gclose (id)
+ }
+
+ # Free the polymark structure.
+ call ap_ymkfree (py)
+
+ # Close image, polygon, and coordinate lists.
+ call imtclose (imlist)
+ call clpcls (plist)
+ call clpcls (clist)
+ call sfree (sp)
+end