/*============================================================================ PGSBOX 4.3 - an implementation of the FITS WCS standard. Copyright (C) 1997-2007, Mark Calabretta This file is part of PGSBOX. PGSBOX is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. PGSBOX is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with PGSBOX. If not, see . Correspondence concerning PGSBOX may be directed to: Internet email: mcalabre@atnf.csiro.au Postal address: Dr. Mark Calabretta Australia Telescope National Facility, CSIRO PO Box 76 Epping NSW 1710 AUSTRALIA Author: Mark Calabretta, Australia Telescope National Facility http://www.atnf.csiro.au/~mcalabre/index.html $Id: pgwcsl.h,v 4.3 2007/12/27 05:49:14 cal103 Exp $ *============================================================================= * * pgwcsl_() is an NLFUNC for PGSBOX that defines curvilinear celestial * coordinate systems by interfacing to WCSLIB 4.x. * * Since WCSLIB 4.x is a C library, pgwcsl_() is written in C. However, as * PGSBOX expects NLFUNC to be a FORTRAN subroutine, its interfaces * necessarily emulate those of a FORTRAN subroutine. Hence the trailing * underscore in the name of the function and the pointer (reference) * argument list. * * The wcsprm struct on which WCSLIB 4.x is based is passed as an integer * array of size WCSLEN at least (WCSLEN is defined in wcs.h). While the * contents of this array are not interpretable in FORTRAN, it may be * constructed and interrogated by service routines (WCSPUT and WCSGET) * provided with the FORTRAN wrappers for WCSLIB 4.x. The array is cast to * (struct wcsprm *) for use here and in WCSLIB. * * Given: * opcode int* Transformation code: * 2: Compute a set of pixel coordinates that * describe a path between this and the previous * pair of world coordinates remembered from the * last call with opcode == 1 || 2. * 1: Compute pixel coordinates from world * coordinates. * 0: Initialize. * -1: Compute world coordinates from pixel * coordinates. * * nlc int* Number of elements in nlcprm[] (not used). * * nli int* Number of elements in wcs (at least WCSLEN). * * nld int* Number of elements in nldprm (not used). * * nlcprm char[nlc] * Character array (not used). * * Given and/or returned: * wcs int[nli] Integer array that contains the wcsprm struct (see * below). * * nldprm double[nld] * Double precision array (not used). * * world double[2] * World coordinates. world[0] and world[1] are the * longitude and latitude, in degrees. Given if * opcode > 0, returned if opcode < 0. * * pixel double[2] * Pixel coordinates. Given if opcode < 0, returned if * opcode > 0. * * contrl int* Control flag for opcode == 2: * 0: Normal state * 1: A discontinuity has been encountered; force * PGSBOX to flush its plotting buffer and call * pgwcsl_() again with the same world * coordinates. * 2: Call pgwcsl_() again with the same world * coordinates. * * contxt double[20] * Context elements for opcode == 2. * * Returned: * ierr int* Status return value: * 0: Success. * 1: Invalid parameters. * 2: Invalid world coordinate. * 3: Invalid pixel coordinate. * * Notes * ----- * 1) pgwcsl_() assumes a simple 2-D image. * * 2) The wcsprm struct (contained in the wcs[] array) is maintained by * pgwcsl_() and WCSLIB and must not be disturbed by the caller after * initialization with opcode == 0. * * 3) pgwcsl_() doesn't properly handle discontinuities between the faces * of the quadcube projections nor in the polar region of the HPX * projection. * * *===========================================================================*/ #ifndef PGSBOX_PGWCSL #define PGSBOX_PGWCSL #include "cpgsbox.h" /* Fortran name mangling. */ #include #define pgwcsl_ F77_FUNC(pgwcsl, PGWCSL) #ifdef __cplusplus extern "C" { #endif nlfunc_t pgwcsl_; #ifdef __cplusplus } #endif #endif /* PGSBOX_PGWCSL */