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