aboutsummaryrefslogtreecommitdiff
path: root/src/projects.h
diff options
context:
space:
mode:
authorPiyush Agram <piyush.agram@jpl.nasa.gov>2015-09-10 21:44:23 -0700
committerPiyush Agram <piyush.agram@jpl.nasa.gov>2015-10-23 14:47:04 -0700
commit757a2c8f946faccf9d094d76cb79e6ebe0006564 (patch)
treedede64baec7ef629e7938cd43c99a2b0b3248408 /src/projects.h
parentb5d0d2d4dd1d2431f3e88e5d26e6105ce9a5c6bf (diff)
downloadPROJ-757a2c8f946faccf9d094d76cb79e6ebe0006564.tar.gz
PROJ-757a2c8f946faccf9d094d76cb79e6ebe0006564.zip
- API Extension to include fwd3d / inv3d
- New SCH coordinate system for radar imaging systems
Diffstat (limited to 'src/projects.h')
-rw-r--r--src/projects.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/projects.h b/src/projects.h
index fe6a44c6..bbc6f2ca 100644
--- a/src/projects.h
+++ b/src/projects.h
@@ -147,13 +147,18 @@ typedef struct {
typedef struct { double u, v; } projUV;
typedef struct { double r, i; } COMPLEX;
+typedef struct { double u, v, w; } projUVW;
#ifndef PJ_LIB__
#define XY projUV
#define LP projUV
+#define XYZ projUVW
+#define LPZ projUVW
#else
typedef struct { double x, y; } XY;
typedef struct { double lam, phi; } LP;
+typedef struct { double x, y, z; } XYZ;
+typedef struct { double lam, phi, z; } LPZ;
#endif
typedef union { double f; int i; char *s; } PROJVALUE;
@@ -225,6 +230,8 @@ typedef struct PJconsts {
projCtx_t *ctx;
XY (*fwd)(LP, struct PJconsts *);
LP (*inv)(XY, struct PJconsts *);
+ XYZ (*fwd3d)(LPZ, struct PJconsts *);
+ LPZ (*inv3d)(XYZ, struct PJconsts *);
void (*spc)(LP, struct PJconsts *, struct FACTORS *);
void (*pfree)(struct PJconsts *);
const char *descr;
@@ -324,6 +331,7 @@ extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[];
if( (P = (PJ*) pj_malloc(sizeof(PJ))) != NULL) { \
memset( P, 0, sizeof(PJ) ); \
P->pfree = freeup; P->fwd = 0; P->inv = 0; \
+ P->fwd3d = 0; P->inv3d = 0; \
P->spc = 0; P->descr = des_##name;
#define ENTRYX } return P; } else {
#define ENTRY0(name) ENTRYA(name) ENTRYX
@@ -333,9 +341,13 @@ extern struct PJ_PRIME_MERIDIANS pj_prime_meridians[];
#define E_ERROR(err) { pj_ctx_set_errno( P->ctx, err); freeup(P); return(0); }
#define E_ERROR_0 { freeup(P); return(0); }
#define F_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xy); }
+#define F3_ERROR { pj_ctx_set_errno( P->ctx, -20); return(xyz); }
#define I_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lp); }
+#define I3_ERROR { pj_ctx_set_errno( P->ctx, -20); return(lpz); }
#define FORWARD(name) static XY name(LP lp, PJ *P) { XY xy = {0.0,0.0}
#define INVERSE(name) static LP name(XY xy, PJ *P) { LP lp = {0.0,0.0}
+#define FORWARD3D(name) static XYZ name(LPZ lpz, PJ *P) {XYZ xyz = {0.0, 0.0, 0.0}
+#define INVERSE3D(name) static LPZ name(XYZ xyz, PJ *P) {LPZ lpz = {0.0, 0.0, 0.0}
#define FREEUP static void freeup(PJ *P) {
#define SPECIAL(name) static void name(LP lp, PJ *P, struct FACTORS *fac)
#endif