00001 #ifndef _WINC_PLOT
00002 #define _WINC_PLOT
00003
00004 #include <WXP/ColorMap.h>
00005 #include <WXP/Date.h>
00006 #include <WXP/Domain.h>
00007 #include <WXP/DomainVal.h>
00008 #include <WXP/EarthPoint.h>
00009 #include <WXP/EarthPoints.h>
00010 #include <WXP/GeomBox.h>
00011 #include <WXP/Graph.h>
00012 #include <WXP/GridPoint.h>
00013 #include <WXP/Image.h>
00014 #include <WXP/Listener.h>
00015 #include <WXP/PlotAttr.h>
00016 #include <WXP/PlotLabel.h>
00017 #include <WXP/Point.h>
00018 #include <WXP/Points.h>
00019 #include <WXP/Rect.h>
00020 #include <WXP/String.h>
00021 #include <WXP/Timezone.h>
00022
00023 namespace WXP {
00024 class Plot : public Listener {
00025 Graph graph;
00026 ColorMap global_colormap;
00027 ColorMap colormap;
00028 Domain domain;
00029 Rect limits;
00030 Rect panel;
00031 String color_label;
00032
00033 int full;
00034 int output;
00035 bool draw[13];
00036 char title[80];
00037
00038 int line_color;
00039 int fill_color;
00040 int text_color;
00041 int mark_color;
00042
00043 int layer;
00044 char trans_color[20];
00045
00046 static const int max_label = 30;
00047 PlotLabel label[30];
00048 int num_label;
00049 char label_format[100];
00050 String logo;
00051 bool time_sync;
00052 char source[10];
00053 float fore_hour;
00054 Date date;
00055 Timezone tz;
00056
00057 public:
00058 Plot();
00059 Plot( const char *param );
00060 ~Plot();
00061 int init();
00062 int open( const char *param );
00063 int open();
00064 int close();
00065 int setParam( const char *param );
00066 int setLogo( const char *rlogo );
00067 int getDevice( String &str );
00068 void callback( const char *ev_str, const char *ev_data, const void *data );
00069 int setDomain( Rect &offset, float aspect, int halign, int valign );
00070 int setDomain( Rect &offset, float aspect );
00071 int setDomain( Rect &offset, Domain &ndomain );
00072 int setDomain( Domain &domain );
00073 int setDomain( DomainVal &dv );
00074 int setDomain( Rect &offset );
00075 int setDomain();
00076 DomainVal getDomainVal();
00077 Domain getDomain();
00078 int getProj();
00079 float getDomVert();
00080 float getDomAspect();
00081 inline float getDomCLat(){ return domain.getCLat(); }
00082 inline float getDomCLon(){ return domain.getCLon(); }
00083 inline int getDomNx(){ return domain.getNx(); }
00084 inline int getDomNy(){ return domain.getNy(); }
00085 inline float getDomDx(){ return domain.getDx(); }
00086 inline float getDomDy(){ return domain.getDy(); }
00087 inline float getVert(){ return domain.getVert(); }
00088 inline bool withinDomain( Point &pt ){ return domain.within(pt); }
00089 inline bool withinDomain( EarthPoint &ept ){ return domain.within(ept); }
00090 inline bool withinDomainExt( Point &pt, int ext ){ return domain.withinExt(pt, ext); }
00091 inline bool withinDomainExt( EarthPoint &ept, int ext ){ return domain.withinExt(ept, ext); }
00092 inline int whereDomain( Point &pt ){ return domain.where(pt); }
00093 inline int whereDomain( EarthPoint &ept ){ return domain.where(ept); }
00094
00095 int newPanel( const char *params );
00096 int clear();
00097 int clearRect( Rect &rect );
00098 int update();
00099 int manage();
00100 inline bool isManaged(){ return graph.isManaged(); };
00101 int end();
00102
00103 inline bool isTimeSync(){ return time_sync; };
00104 inline int setTimeSync( bool val ){ time_sync = val; return 1; };
00105 inline int setDate( Date &rdate ){ date = rdate; return 1; };
00106 inline bool isDateSet(){ return date.isSet(); };
00107 inline int setForeHour( float val ){ fore_hour = val; return 1; };
00108 int setDataSource( const char *str );
00109
00110 ColorMap getColorMap();
00111 int allocColor( int ind );
00112 int setColorMap( ColorMap &cmap );
00113 int setColorMap();
00114 int getColorRGB( int ind, float &r, float &g, float &b );
00115 int getColorValue( const char *name );
00116
00117 int cropLine( Point &pt1, Point &pt2 );
00118 int cropLine( Points &pts );
00119 int drawLine( float x1, float y1, float x2, float y2 );
00120 int drawLine( Point &pt1, Point &pt2 );
00121 int drawLine( EarthPoint &ept1, EarthPoint &ept2 );
00122 int drawLine( GridPoint &gpt1, GridPoint &gpt2 );
00123 int drawLine( Points &pts );
00124 int drawLine( EarthPoints &data );
00125 int drawSpline( Points &data );
00126 int drawSpline( EarthPoints &data );
00127 int drawRect( float x1, float y1, float x2, float y2 );
00128 int drawRect( Rect &rect );
00129 int drawCircle( Point &pt, float rad );
00130 int drawCircle( EarthPoint &ept, float rad );
00131 int setLineColor( const char *name );
00132 int setLineColor( int ind );
00133 int setLineWidth( float width );
00134 int setLineStyle( int style );
00135 int setLine();
00136 int setLine( PlotAttr &plot );
00137 int setLine( const char *str );
00138
00139 int drawFill( Points &pts );
00140 int drawFill( EarthPoints &data );
00141 int drawFill( Rect &data );
00142 int drawFillarea( Points &data );
00143 int setFillColor( const char *name );
00144 int setFillColor( int ind );
00145 int setFillStyle( int index );
00146 int setFill();
00147 int setFill( PlotAttr &plot );
00148 int setFill( const char *str );
00149
00150 int drawText( float x, float y, const char *text );
00151 int drawText( Point &pt, const char *text );
00152 int drawText( EarthPoint &ept, const char *text );
00153 int drawText( GridPoint &gpt, const char *text );
00154 int drawFormText( Point &pt, const char *format, ... );
00155 int drawFormText( EarthPoint &ept, const char *format, ... );
00156 int setTextHeight( float height );
00157 int setTextWidth( float width );
00158 int setTextAlign( int hor, int vert );
00159 int setTextColor( const char *name );
00160 int setTextColor( int ind );
00161 int setTextExpansion( float expansion );
00162 int setTextSpacing( float space );
00163 int setTextCharWidth( float width );
00164 int setTextDirection( float x, float y );
00165 int setFont( const char *str );
00166 inline int setDropShadow( int val ){ return graph.setDropShadow( val ); };
00167 inline int getDropShadow(){ return graph.getDropShadow(); };
00168 int setText();
00169 int setText( PlotAttr &plot );
00170 int setText( PlotAttr &plot, float scale );
00171 int setText( const char *str );
00172
00173 int drawMark( float x, float y );
00174 int drawMark( Point &pt );
00175 int drawMark( EarthPoint &ept );
00176 int drawMark( GridPoint &gpt );
00177 int setMarkColor( const char *name );
00178 int setMarkColor( int ind );
00179 int setMarkType( const char *type );
00180 int setMarkType( int type );
00181 int setMarkSize( float size );
00182 int setMarkWidth( float width );
00183 int setMark();
00184 int setMark( PlotAttr &plot );
00185 int setMark( PlotAttr &plot, float scale );
00186 int setMark( const char *str );
00187
00188 inline int setSymbol( const char *symbol ){
00189 return graph.setSymbol( symbol );
00190 }
00191
00192 inline int drawSymbol( Point pt, const char *string, float size ){
00193 return graph.drawSymbol( pt, string, size );
00194 }
00195
00196 int setImageAlign( int h, int v );
00197 int drawImage( Image &image );
00198 int drawImage( Image &image, int bgcolor );
00199
00200 inline int drawImage( Image &image, float x, float y ){
00201 return graph.drawImage( image, x, y );
00202 }
00203
00204 inline int drawImage( Image &image, int bgcolor, float x, float y ){
00205 return graph.drawImage( image, bgcolor, x, y );
00206 }
00207
00208 int drawImage( const char *file, float x, float y );
00209 int drawImage( const char *file, float x, float y, const char *option );
00210
00211 inline int getTran(){
00212 return graph.getTran();
00213 }
00214
00215 inline int activateTran( int val ){
00216 return graph.activateTran( val );
00217 }
00218
00219 inline int setViewport( int num, Rect rect ){
00220 return graph.setViewport( num, rect );
00221 }
00222
00223 inline int getViewport( Rect &lim ){
00224 return graph.getViewport( lim );
00225 }
00226
00227 inline int setWindow( int num, Rect rect ){
00228 return graph.setWindow( num, rect );
00229 }
00230
00231 inline int getWindow( Rect &lim ){
00232 return graph.getWindow( lim );
00233 }
00234
00235 inline int tran( EarthPoint &ept, Point &pt ){
00236 return domain.tran( ept, pt );
00237 }
00238
00239 inline int tran( Point &pt, EarthPoint &ept ){
00240 return domain.tran( pt, ept );
00241 }
00242
00243 inline int tran( GridPoint &gpt, Point &pt ){
00244 return domain.tran( gpt, pt );
00245 }
00246
00247 inline int tran( Point &pt, GridPoint &gpt ){
00248 return domain.tran( pt, gpt );
00249 }
00250
00251 inline int tran( EarthPoint &ept, GridPoint &gpt ){
00252 return domain.tran( ept, gpt );
00253 }
00254
00255 inline int tran( GridPoint &gpt, EarthPoint &ept ){
00256 return domain.tran( gpt, ept );
00257 }
00258
00259 inline int tran( int val, Point &pt ){
00260 return domain.tran( val, pt );
00261 }
00262
00263 inline int tran( int val, GridPoint &gpt ){
00264 return domain.tran( val, gpt );
00265 }
00266
00267 inline int tran( int val, EarthPoint &ept ){
00268 return domain.tran( val, ept );
00269 }
00270
00271 inline int tran( Domain &dom, Point &pt1, Point &pt2 ){
00272 return Domain::translate( dom, domain, pt1, pt2 );
00273 }
00274
00275 inline int tranPlotWindow( float x1, float y1, float &x2, float &y2 ){
00276 return graph.tranPlotWindow( x1, y1, x2, y2 );
00277 }
00278
00279 inline int tranWindow( int tran1, Point &pt1, int tran2, Point &pt2 ){
00280 return graph.tranWindow( tran1, pt1, tran2, pt2 );
00281 }
00282
00283 inline int adjustDom( Point &pt ){
00284 return domain.adjust( pt );
00285 }
00286
00287 inline int adjustDom( Points &pts ){
00288 return domain.adjust( pts );
00289 }
00290
00291 inline float adjustDir( float dir, Point &pt ){
00292 return domain.adjustDir( dir, pt );
00293 }
00294
00295 inline int offsetPoint( Point pt, float dir, float rad, Point &opt ){
00296 return domain.offset( pt, dir, rad, opt );
00297 }
00298
00299 inline int offsetPoint( EarthPoint pt, float dir, float rad, EarthPoint &opt ){
00300 return domain.offsetLatLon( pt, dir, rad, opt );
00301 }
00302
00303 inline float getMapFactor( EarthPoint ept ){
00304 return domain.getMapFactor( ept );
00305 }
00306
00307 inline int getInverse(){
00308 return graph.getInverse();
00309 }
00310
00311 int addCallback( const char *ev, Listener *list, const void *data );
00312 int message( const char *str, ... );
00313
00314 int getViewDomain( Domain &domain );
00315 int drawBorder();
00316 int saveImage(const char *file, const char *type);
00317 int saveImage(const char *file);
00318 int getImage(Image &image);
00319 int setLabelColor( const char *str );
00320 int setLabelFormat( const char *str );
00321 int addLabel( const char *loc, const char *label );
00322 int setLabel( const char *loc, const char *label );
00323 int getLabelPosIndex( const char *str );
00324 int printLabels();
00325 int formatLabel( const char *form, char *str, int len );
00326 int clearLabels();
00327 int drawLabels();
00328 int setCursor( int type );
00329 int done();
00330 int newFrame();
00331 int clearFrame();
00332 int deleteFrame( int ind );
00333 int deleteAllFrames();
00334 int setFull( int val );
00335 int getFull();
00336 int setDrawing( const char *str );
00337 bool isDrawing( int ind );
00338 int printDrawing();
00339 inline int wrapLine( Points &pts ){ return domain.wrapLine( pts ); };
00340 inline int offsetLine( Points &pts, int flag ){ return domain.offsetLine( pts, flag ); };
00341
00342 inline int printTran(){ graph.printTran(); return 1; };
00343 inline int printDomain(){ domain.print(); return 1; };
00344
00345 static int decodeGeometryStr( const char *str, GeomBox &geom );
00346 static int decodePanelStr( Rect rect, const char *str, GeomBox &geom );
00347
00348
00349
00350
00351 enum Output {
00352 WINDOW,
00353 IMAGE,
00354 PRINT
00355 };
00356 enum DrawingType {
00357 DRAW_PLOT,
00358 DRAW_DATA,
00359 DRAW_MAP,
00360 DRAW_TEXT_UL,
00361 DRAW_TEXT_UC,
00362 DRAW_TEXT_UR,
00363 DRAW_TEXT_LL,
00364 DRAW_TEXT_LC,
00365 DRAW_TEXT_LR,
00366 DRAW_BORD
00367 };
00368 enum TranType {
00369 TRAN_BASE,
00370 TRAN_PROJ,
00371 TRAN_OVER
00372 };
00373
00374 };
00375 }
00376 #endif