00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef PLOT_H_
00028 #define PLOT_H_
00029
00030 #include <graphics/GenericPlotter/PlotData.h>
00031 #include <graphics/GenericPlotter/PlotItem.h>
00032
00033 #include <casa/BasicSL/String.h>
00034
00035 #include <casa/namespace.h>
00036
00037 namespace casa {
00038
00039
00040
00041
00042 class Plot : public virtual PlotItem {
00043 public:
00044 Plot() { }
00045
00046 virtual ~Plot() { }
00047
00048
00049
00050
00051
00052 virtual PlotDataPtr data() const = 0;
00053
00054
00055
00056 virtual void dataChanged() = 0;
00057
00058
00059
00060
00061
00062 virtual bool linesShown() const = 0;
00063
00064
00065
00066
00067 virtual void setLinesShown(bool linesShown = true) = 0;
00068
00069
00070
00071
00072 virtual PlotLinePtr line() const = 0;
00073
00074
00075
00076 virtual void setLine(const PlotLine& line) = 0;
00077
00078
00079
00080
00081
00082
00083 virtual void setLine(const PlotLinePtr line) {
00084 if(!line.null()) setLine(*line);
00085 else setLinesShown(false);
00086 }
00087 virtual void setLine(const String& color,
00088 PlotLine::Style style = PlotLine::SOLID,
00089 double width = 1.0) {
00090 PlotLinePtr l = line();
00091 l->setColor(color);
00092 l->setStyle(style);
00093 l->setWidth(width);
00094 setLine(*l);
00095 }
00096 virtual void setLineColor(const String& color) {
00097 PlotLinePtr l = line();
00098 l->setColor(color);
00099 setLine(*l);
00100 }
00101 virtual void setLineStyle(PlotLine::Style style) {
00102 PlotLinePtr l = line();
00103 l->setStyle(style);
00104 setLine(*l);
00105 }
00106 virtual void setLineWidth(double width) {
00107 PlotLinePtr l = line();
00108 l->setWidth(width);
00109 setLine(*l);
00110 }
00111
00112 };
00113
00114
00115
00116
00117
00118 class ScatterPlot : public virtual Plot {
00119 public:
00120 ScatterPlot() { }
00121
00122 virtual ~ScatterPlot() { }
00123
00124
00125
00126 virtual PlotDataPtr data() const { return pointData(); }
00127
00128
00129
00130 virtual ppoint_t pointAt(unsigned int i) const {
00131 PlotPointDataPtr data = pointData();
00132 if(!data.null()) return ppoint_t(data->xAt(i), data->yAt(i));
00133 else return ppoint_t(0, 0);
00134 }
00135
00136
00137
00138 virtual unsigned int drawCount() const { return pointData()->size(); }
00139
00140
00141
00142
00143
00144 virtual PlotPointDataPtr pointData() const = 0;
00145
00146
00147 virtual bool symbolsShown() const = 0;
00148
00149
00150
00151
00152 virtual void setSymbolsShown(bool symbolsShown = true) = 0;
00153
00154
00155
00156
00157 virtual PlotSymbolPtr symbol() const = 0;
00158
00159
00160
00161 virtual void setSymbol(const PlotSymbol& symbol) = 0;
00162
00163
00164
00165
00166
00167
00168 virtual void setSymbol(const PlotSymbolPtr symbol) {
00169 if(!symbol.null()) setSymbol(*symbol);
00170 else setSymbolsShown(false);
00171 }
00172 virtual void setSymbol(PlotSymbol::Symbol s) {
00173 PlotSymbolPtr sym = symbol();
00174 sym->setSymbol(s);
00175 setSymbol(*sym);
00176 }
00177 virtual void setSymbol(char s) {
00178 PlotSymbolPtr sym = symbol();
00179 sym->setSymbol(s);
00180 setSymbol(*sym);
00181 }
00182 virtual void setSymbolSize(double width, double height) {
00183 PlotSymbolPtr sym = symbol();
00184 sym->setSize(width, height);
00185 setSymbol(*sym);
00186 }
00187 virtual void setSymbolLine(const PlotLine& line) {
00188 PlotSymbolPtr sym = symbol();
00189 sym->setLine(line);
00190 setSymbol(*sym);
00191 }
00192 virtual void setSymbolLine(const PlotLinePtr line) {
00193 if(!line.null()) setSymbolLine(*line); }
00194 virtual void setSymbolLine(const String& color,
00195 PlotLine::Style style = PlotLine::SOLID, double width = 1.0) {
00196 PlotSymbolPtr sym = symbol();
00197 sym->setLine(color, style, width);
00198 setSymbol(*sym);
00199 }
00200 virtual void setSymbolAreaFill(const PlotAreaFill& fill) {
00201 PlotSymbolPtr sym = symbol();
00202 sym->setAreaFill(fill);
00203 setSymbol(*sym);
00204 }
00205 virtual void setSymbolAreaFill(const PlotAreaFillPtr fill) {
00206 if(!fill.null()) setSymbolAreaFill(*fill); }
00207 virtual void setSymbolAreaFill(const String& color,
00208 PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
00209 PlotSymbolPtr sym = symbol();
00210 sym->setAreaFill(color, pattern);
00211 setSymbol(*sym);
00212 }
00213
00214 };
00215
00216
00217
00218
00219
00220
00221 class MaskedScatterPlot : public virtual ScatterPlot {
00222 public:
00223 MaskedScatterPlot() { }
00224
00225 virtual ~MaskedScatterPlot() { }
00226
00227
00228
00229 virtual PlotPointDataPtr pointData() const { return maskedData(); }
00230
00231
00232
00233 virtual bool maskedAt(unsigned int index) const {
00234 PlotMaskedPointDataPtr data = maskedData();
00235 return !data.null() && data->maskedAt(index);
00236 }
00237
00238
00239
00240
00241
00242 virtual PlotMaskedPointDataPtr maskedData() const = 0;
00243
00244
00245
00246 virtual bool maskedLinesShown() const = 0;
00247
00248
00249
00250
00251 virtual void setMaskedLinesShown(bool linesShown = true) = 0;
00252
00253
00254
00255
00256 virtual PlotLinePtr maskedLine() const = 0;
00257
00258
00259
00260
00261 virtual void setMaskedLine(const PlotLine& line) = 0;
00262
00263
00264
00265 virtual void setMaskedLine(const PlotLinePtr line) {
00266 if(!line.null()) setMaskedLine(*line);
00267 else setMaskedLinesShown(false);
00268 }
00269 virtual void setMaskedLine(const String& color,
00270 PlotLine::Style style = PlotLine::SOLID,
00271 double width = 1.0) {
00272 PlotLinePtr l = maskedLine();
00273 l->setColor(color);
00274 l->setStyle(style);
00275 l->setWidth(width);
00276 setMaskedLine(*l);
00277 }
00278 virtual void setMaskedLineColor(const String& color) {
00279 PlotLinePtr l = maskedLine();
00280 l->setColor(color);
00281 setMaskedLine(*l);
00282 }
00283 virtual void setMaskedLineStyle(PlotLine::Style style) {
00284 PlotLinePtr l = maskedLine();
00285 l->setStyle(style);
00286 setMaskedLine(*l);
00287 }
00288 virtual void setMaskedLineWidth(double width) {
00289 PlotLinePtr l = maskedLine();
00290 l->setWidth(width);
00291 setMaskedLine(*l);
00292 }
00293
00294
00295
00296 virtual bool maskedSymbolsShown() const = 0;
00297
00298
00299
00300
00301 virtual void setMaskedSymbolsShown(bool symbolsShown = true) = 0;
00302
00303
00305
00306 virtual PlotSymbolPtr maskedSymbol() const = 0;
00307
00308
00309
00310
00311 virtual void setMaskedSymbol(const PlotSymbol& symbol) = 0;
00312
00313
00314
00315 virtual void setMaskedSymbol(const PlotSymbolPtr symbol) {
00316 if(!symbol.null()) setMaskedSymbol(*symbol);
00317 else setMaskedSymbolsShown(false);
00318 }
00319 virtual void setMaskedSymbol(PlotSymbol::Symbol s) {
00320 PlotSymbolPtr sym = maskedSymbol();
00321 sym->setSymbol(s);
00322 setMaskedSymbol(*sym);
00323 }
00324 virtual void setMaskedSymbol(char s) {
00325 PlotSymbolPtr sym = maskedSymbol();
00326 sym->setSymbol(s);
00327 setMaskedSymbol(*sym);
00328 }
00329 virtual void setMaskedSymbolSize(double width, double height) {
00330 PlotSymbolPtr sym = maskedSymbol();
00331 sym->setSize(width, height);
00332 setMaskedSymbol(*sym);
00333 }
00334 virtual void setMaskedSymbolLine(const PlotLine& line) {
00335 PlotSymbolPtr sym = maskedSymbol();
00336 sym->setLine(line);
00337 setMaskedSymbol(*sym);
00338 }
00339 virtual void setMaskedSymbolLine(const PlotLinePtr line) {
00340 if(!line.null()) setMaskedSymbolLine(*line); }
00341 virtual void setMaskedSymbolLine(const String& color,
00342 PlotLine::Style style = PlotLine::SOLID, double width = 1.0) {
00343 PlotSymbolPtr sym = maskedSymbol();
00344 sym->setLine(color, style, width);
00345 setMaskedSymbol(*sym);
00346 }
00347 virtual void setMaskedSymbolAreaFill(const PlotAreaFill& fill) {
00348 PlotSymbolPtr sym = maskedSymbol();
00349 sym->setAreaFill(fill);
00350 setMaskedSymbol(*sym);
00351 }
00352 virtual void setMaskedSymbolAreaFill(const PlotAreaFillPtr fill) {
00353 if(!fill.null()) setMaskedSymbolAreaFill(*fill); }
00354 virtual void setMaskedSymbolAreaFill(const String& color,
00355 PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
00356 PlotSymbolPtr sym = maskedSymbol();
00357 sym->setAreaFill(color, pattern);
00358 setMaskedSymbol(*sym);
00359 }
00360
00361 };
00362
00363
00364
00365
00366 class ErrorPlot : public virtual ScatterPlot {
00367 public:
00368 ErrorPlot() { }
00369
00370 virtual ~ErrorPlot() { }
00371
00372
00373
00374 virtual PlotPointDataPtr pointData() const { return errorData(); }
00375
00376
00377
00378
00379
00380 virtual PlotErrorDataPtr errorData() const = 0;
00381
00382
00383 virtual bool errorLineShown() const = 0;
00384
00385
00386
00387
00388 virtual void setErrorLineShown(bool show = true) = 0;
00389
00390
00391 virtual PlotLinePtr errorLine() const = 0;
00392
00393
00394 virtual void setErrorLine(const PlotLine& line) = 0;
00395
00396
00397
00398 virtual void setErrorLine(const PlotLinePtr line) {
00399 if(!line.null()) setErrorLine(*line);
00400 else setErrorLineShown(false);
00401 }
00402 virtual void setErrorLine(const String& color,
00403 PlotLine::Style style = PlotLine::SOLID,
00404 double width = 1.0) {
00405 PlotLinePtr line = errorLine();
00406 line->setColor(color);
00407 line->setStyle(style);
00408 line->setWidth(width);
00409 setErrorLine(*line);
00410 }
00411 virtual void setErrorLineColor(const String& color) {
00412 PlotLinePtr line = errorLine();
00413 line->setColor(color);
00414 setErrorLine(*line);
00415 }
00416 virtual void setErrorLineStyle(PlotLine::Style style) {
00417 PlotLinePtr line = errorLine();
00418 line->setStyle(style);
00419 setErrorLine(*line);
00420 }
00421 virtual void setErrorLineWidth(double width) {
00422 PlotLinePtr line = errorLine();
00423 line->setWidth(width);
00424 setErrorLine(*line);
00425 }
00426
00427
00428
00429
00430
00431 virtual unsigned int errorCapSize() const = 0;
00432
00433
00434 virtual void setErrorCapSize(unsigned int capSize) = 0;
00435 };
00436
00437
00438
00439
00440 class ColoredPlot : public virtual ScatterPlot {
00441 public:
00442
00443 ColoredPlot() { }
00444
00445
00446 virtual ~ColoredPlot() { }
00447
00448
00449
00450 virtual PlotPointDataPtr pointData() const { return binnedColorData(); }
00451
00452
00453
00454
00455
00456 virtual PlotBinnedDataPtr binnedColorData() const = 0;
00457
00458
00459
00460 virtual PlotColorPtr colorForBin(unsigned int bin) const = 0;
00461
00462
00463
00464 virtual void setColorForBin(unsigned int bin, const PlotColorPtr color) = 0;
00465 };
00466
00467
00468
00469
00470 class BarPlot : public virtual Plot {
00471 public:
00472 BarPlot() { }
00473
00474 virtual ~BarPlot() { }
00475
00476
00477
00478 PlotDataPtr data() const { return pointData(); }
00479
00480
00481
00482 virtual ppoint_t pointAt(unsigned int i) const {
00483 PlotPointDataPtr data = pointData();
00484 if(!data.null()) return ppoint_t(data->xAt(i), data->yAt(i));
00485 else return ppoint_t(0, 0);
00486 }
00487
00488
00489
00490 virtual unsigned int drawCount() const { return pointData()->size(); }
00491
00492
00493
00494
00495
00496 virtual PlotPointDataPtr pointData() const = 0;
00497
00498
00499 virtual bool areaIsFilled() const = 0;
00500
00501
00502
00503
00504 virtual void setAreaFilled(bool fill = true) = 0;
00505
00506
00507 virtual PlotAreaFillPtr areaFill() const = 0;
00508
00509
00510 virtual void setAreaFill(const PlotAreaFill& areaFill) = 0;
00511
00512
00513
00514
00515
00516
00517 virtual void setAreaFill(const PlotAreaFillPtr areaFill) {
00518 if(!areaFill.null()) setAreaFill(*areaFill);
00519 else setAreaFilled(false);
00520 }
00521 virtual void setAreaFill(const String& color,
00522 PlotAreaFill::Pattern pattern = PlotAreaFill::FILL) {
00523 PlotAreaFillPtr fill = areaFill();
00524 fill->setColor(color);
00525 fill->setPattern(pattern);
00526 setAreaFill(*fill);
00527 }
00528
00529 };
00530
00531
00532
00533
00534
00535
00536 class RasterPlot : public virtual Plot {
00537 public:
00538 RasterPlot() { }
00539
00540 virtual ~RasterPlot() { }
00541
00542
00543
00544 PlotDataPtr data() const { return rasterData(); }
00545
00546
00547
00548 virtual double valueAt(double x, double y) const {
00549 PlotRasterDataPtr data = rasterData();
00550 if(!data.null()) return data->valueAt(x, y);
00551 else return 0;
00552 }
00553
00554
00555
00556
00557
00558 virtual PlotRasterDataPtr rasterData() const = 0;
00559
00560
00561 virtual void setXRange(double from, double to) = 0;
00562
00563
00564 virtual void setYRange(double from, double to) = 0;
00565
00566
00567 virtual PlotRasterData::Format dataFormat() const = 0;
00568
00569
00570 virtual void setDataFormat(PlotRasterData::Format f) = 0;
00571
00572
00573 virtual PlotRasterData::Origin dataOrigin() const = 0;
00574
00575
00576 virtual void setDataOrigin(PlotRasterData::Origin o) = 0;
00577
00578
00579 virtual vector<double> contourLines() const = 0;
00580
00581
00582 virtual void setContourLines(const vector<double>& lines) = 0;
00583 };
00584
00585
00586
00587
00588 INHERITANCE_POINTER2(Plot, PlotPtr, PlotItem, PlotItemPtr)
00589 INHERITANCE_POINTER(ScatterPlot, ScatterPlotPtr, Plot, PlotPtr, PlotItem,
00590 PlotItemPtr)
00591 INHERITANCE_POINTER(MaskedScatterPlot, MaskedScatterPlotPtr, ScatterPlot,
00592 ScatterPlotPtr, PlotItem, PlotItemPtr)
00593 INHERITANCE_POINTER(ErrorPlot, ErrorPlotPtr, ScatterPlot, ScatterPlotPtr,
00594 PlotItem, PlotItemPtr)
00595 INHERITANCE_POINTER(ColoredPlot, ColoredPlotPtr, ScatterPlot, ScatterPlotPtr,
00596 PlotItem, PlotItemPtr)
00597 INHERITANCE_POINTER(BarPlot, BarPlotPtr, Plot, PlotPtr, PlotItem, PlotItemPtr)
00598 INHERITANCE_POINTER(RasterPlot, RasterPlotPtr, Plot, PlotPtr, PlotItem,
00599 PlotItemPtr)
00600
00601 }
00602
00603 #endif