00001 #ifndef _WINC_GRID
00002 #define _WINC_GRID
00003
00004 #include <WXP/Date.h>
00005 #include <WXP/DateVal.h>
00006 #include <WXP/Domain.h>
00007 #include <WXP/DomainVal.h>
00008 #include <WXP/EarthPoint.h>
00009 #include <WXP/ForeTime.h>
00010 #include <WXP/GridPoint.h>
00011 #include <WXP/GridSpec.h>
00012 #include <WXP/Level.h>
00013 #include <WXP/Point.h>
00014 #include <WXP/Range.h>
00015 #include <WXP/VarSpec.h>
00016 #include <WXP/Variable.h>
00017
00018 namespace WXP {
00019 class Grid {
00020 int type;
00021 int version;
00022 int source;
00023 char datim[50];
00024 char info[90];
00025 Date date;
00026 int nx, ny;
00027 int grid_type;
00028 Domain domain;
00029 int model;
00030 char gen_name[20];
00031 VarSpec var;
00032 float *data;
00033 float *xloc;
00034 float *yloc;
00035
00036 int initClass();
00037
00038 public:
00039 Grid();
00040 Grid( int rnx, int rny );
00041 Grid( const Grid &grid );
00042 ~Grid();
00043 int init();
00044 int copy( const Grid &grid );
00045 int copyInfo( const Grid &grid );
00046 int copyData( const Grid &grid );
00047 Grid operator=(const Grid &grid);
00048 int setType( int val );
00049 int getType();
00050 int setSource( int val );
00051 int getSource();
00052 int setVersion( int val );
00053 int getVersion();
00054 int setDatim( const char *str );
00055 const char *getDatim();
00056 int setInfo( const char *str );
00057 const char *getInfo();
00058 int setDate( Date &d );
00059 int setDate( DateVal &dv );
00060 inline Date getDate(){ return date; };
00061 inline Date getDate( Date &rdate ){ rdate = date; return 1; };
00062 DateVal getDateVal();
00063 int setSize( int x, int y );
00064 int getSize( int &x, int &y );
00065 int getNx();
00066 int getNy();
00067 float getDx();
00068 float getDy();
00069 inline int setGridType( int type ){ grid_type = type; return 1; };
00070 inline int getGridType(){ return grid_type; };
00071 int setDomain( DomainVal &dv );
00072 int setDomain( Domain &dom );
00073 DomainVal getDomainVal();
00074 Domain getDomain();
00075 int getDomain( Domain &dom );
00076 int getProj();
00077 int tran( EarthPoint ept, Point &pt );
00078 int tran( Point pt, EarthPoint &ept );
00079 int tran( GridPoint gpt, Point &pt );
00080 int tran( Point pt, GridPoint &gpt );
00081 int tran( EarthPoint ept, GridPoint &gpt );
00082 int tran( GridPoint gpt, EarthPoint &ept );
00083 int tran( Domain &dom, Point pt1, Point &pt2 );
00084 int tran( Point pt1, Domain &dom, Point &pt2 );
00085 inline int setModel( int val ){ model = val; return 1; };
00086 inline int getModel(){ return model; };
00087 int setGenName( const char *str );
00088 inline const char *getGenName(){ return gen_name; };
00089 inline int setVar( VarSpec v ){ var = v; return 1; };
00090 inline int getVar( VarSpec &v ){ v = var; return 1; };
00091 inline VarSpec getVarSpec(){ return var; };
00092 int setLevel( const char *str );
00093 int setLevel( Level &l );
00094 int getLevel( Level &l );
00095 Level getLevel();
00096 int getLevelType();
00097 int setForeTime( const char *str );
00098 int setForeTime( ForeTime &t );
00099 int getForeTime( ForeTime &t );
00100 ForeTime getForeTime();
00101 float getForeHour();
00102 int getForeSecs();
00103 int setVar( const char *str );
00104 int setVar( Variable &v );
00105 const char *getUnits();
00106 int setUnits( const char *units );
00107 Variable getVar();
00108 GridSpec getSpec();
00109 int getSpec(GridSpec &spec);
00110 int allocData();
00111 int allocLocate();
00112 int setValue( int x, int y, float val );
00113 float getValue( int x, int y );
00114 inline float getValue1( int x, int y ){ return data[y*nx+x]; };
00115 float getValue( GridPoint gpt );
00116 float getValue( EarthPoint ept );
00117 float getValue( Point pt );
00118 bool isLocate();
00119 bool isData();
00120 bool isValue();
00121 int setLocate( int x, int y, Point &pt );
00122 int getLocate( int x, int y, Point &pt );
00123 Point getLocate( int x, int y );
00124 float getAverage();
00125 int getRange( float &min, float &max );
00126 int getRange( Range &range );
00127 int scale( float scale );
00128 int offset( float offset );
00129 int print();
00130 int printInfo();
00131 int printStats();
00132 int printData();
00133
00134 static int copyInfo( Grid &grid1, const Grid &grid2 );
00135 static int copyData( Grid &grid1, const Grid &grid2 );
00136 static int copy( Grid &grid1, const Grid &grid2 );
00137 };
00138 }
00139 #endif