LCOV - code coverage report
Current view: top level - graphics/GenericPlotter - SimplePlotter.cc (source / functions) Hit Total Coverage
Test: casa_coverage.info Lines: 0 503 0.0 %
Date: 2023-10-25 08:47:59 Functions: 0 103 0.0 %

          Line data    Source code
       1             : //# SimplePlotter.cc: Concrete plotting class for common or simple use cases.
       2             : //# Copyright (C) 2008
       3             : //# Associated Universities, Inc. Washington DC, USA.
       4             : //#
       5             : //# This library is free software; you can redistribute it and/or modify it
       6             : //# under the terms of the GNU Library General Public License as published by
       7             : //# the Free Software Foundation; either version 2 of the License, or (at your
       8             : //# option) any later version.
       9             : //#
      10             : //# This library is distributed in the hope that it will be useful, but WITHOUT
      11             : //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
      12             : //# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
      13             : //# License for more details.
      14             : //#
      15             : //# You should have received a copy of the GNU Library General Public License
      16             : //# along with this library; if not, write to the Free Software Foundation,
      17             : //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
      18             : //#
      19             : //# Correspondence concerning AIPS++ should be addressed as follows:
      20             : //#        Internet email: aips2-request@nrao.edu.
      21             : //#        Postal address: AIPS++ Project Office
      22             : //#                        National Radio Astronomy Observatory
      23             : //#                        520 Edgemont Road
      24             : //#                        Charlottesville, VA 22903-2475 USA
      25             : //#
      26             : //# $Id: $
      27             : #include <graphics/GenericPlotter/SimplePlotter.h>
      28             : #include <casacore/casa/BasicMath/Math.h>
      29             : #include <vector>
      30             : 
      31             : using namespace casacore;
      32             : namespace casa {
      33             : 
      34             : ///////////////////////////////
      35             : // SIMPLEPLOTTER DEFINITIONS //
      36             : ///////////////////////////////
      37             : 
      38             : // Constructors/Destructors //
      39             : 
      40           0 : SimplePlotter::SimplePlotter(PlotFactoryPtr factory): m_factory(factory) {
      41           0 :     if(!m_factory.null()) {
      42           0 :         m_plotter = m_factory->plotter();
      43           0 :         m_canvas = m_plotter->canvas();
      44           0 :         m_mouseTools = m_canvas->standardMouseTools();
      45             :         
      46             :         // Set up defaults
      47           0 :         m_line = factory->line("black", PlotLine::SOLID, 1.0);
      48           0 :         m_symbol = factory->symbol(PlotSymbol::DIAMOND);
      49           0 :         m_symbol->setLine(m_line);
      50           0 :         m_symbol->setAreaFill("blue");
      51           0 :         m_areaFill = factory->areaFill("black", PlotAreaFill::MESH3);
      52             :     } else {
      53             :         String error = "SimplePlotter::SimplePlotter(): Invalid plotter "
      54             :                        "implementation.  If you're trying to use qwt, make"
      55             :                        " sure you have the library installed and the "
      56           0 :                        "AIPS_HAS_QWT compiler flag turned on.";
      57           0 :         throw error;
      58             :     }
      59           0 : }
      60             : 
      61           0 : SimplePlotter::~SimplePlotter() { }
      62             : 
      63             : 
      64             : // Execution Methods //
      65             : 
      66           0 : int SimplePlotter::execLoop() { return m_factory->execLoop(); }
      67             : 
      68           0 : void SimplePlotter::holdDrawing() { m_canvas->holdDrawing(); }
      69             : 
      70           0 : void SimplePlotter::releaseDrawing() { m_canvas->releaseDrawing(); }
      71             : 
      72             : 
      73             : // Plotter Customization Methods //
      74             : 
      75           0 : void SimplePlotter::setWindowTitle(const String& windowTitle) {
      76           0 :     m_plotter->setWindowTitle(windowTitle);
      77           0 : }
      78             : 
      79           0 : void SimplePlotter::setCanvasTitle(const String& canvasTitle) {
      80           0 :     m_canvas->setTitle(canvasTitle);
      81           0 : }
      82             : 
      83           0 : void SimplePlotter::setAxesLabels(const String& xLabel, const String& yLabel) {
      84           0 :     m_canvas->setAxisLabel(X_BOTTOM, xLabel);
      85           0 :     m_canvas->setAxisLabel(Y_LEFT, yLabel);
      86           0 : }
      87             : 
      88           0 : void SimplePlotter::showCartesianAxes(bool show) {
      89           0 :     m_canvas->showCartesianAxes(show, show);
      90           0 : }
      91             : 
      92           0 : void SimplePlotter::setXAxisRange(double from, double to) {
      93           0 :     m_canvas->setAxisRange(X_BOTTOM, from, to);
      94           0 : }
      95             : 
      96           0 : void SimplePlotter::setYAxisRange(double from, double to) {
      97           0 :     m_canvas->setAxisRange(Y_LEFT, from, to);
      98           0 : }
      99             : 
     100           0 : void SimplePlotter::setAxesAutoRescale(bool on) {
     101           0 :     m_canvas->setAxesAutoRescale(on);
     102           0 : }
     103             : 
     104           0 : void SimplePlotter::rescaleAxes() {
     105           0 :     m_canvas->rescaleAxes();
     106           0 : }
     107             : 
     108             : 
     109             : // Plot/Shape Customization Methods //
     110             : 
     111           0 : void SimplePlotter::showLines(bool showLines) {
     112           0 :     m_line->setStyle(showLines ? PlotLine::SOLID : PlotLine::NOLINE);
     113           0 : }
     114             : 
     115           0 : void SimplePlotter::showSymbols(bool showSymbols) {
     116           0 :     m_symbol->setSymbol(showSymbols ? PlotSymbol::DIAMOND :
     117           0 :                                       PlotSymbol::NOSYMBOL);
     118           0 : }
     119             : 
     120           0 : void SimplePlotter::setLine(const String& color, PlotLine::Style style,
     121             :         double width) {
     122           0 :     m_line->setColor(color);
     123           0 :     m_line->setStyle(style);
     124           0 :     m_line->setWidth(width);
     125           0 : }
     126             : 
     127           0 : void SimplePlotter::setSymbol(PlotSymbol::Symbol symbol, const String& color,
     128             :         double size, bool outline) {
     129           0 :     m_symbol->setSymbol(symbol);
     130           0 :     m_symbol->setAreaFill(color, PlotAreaFill::FILL);
     131           0 :     m_symbol->setSize(size, size);
     132           0 :     m_symbol->setLine("black", (outline ? PlotLine::SOLID : PlotLine::NOLINE),
     133           0 :                       1.0);
     134           0 : }
     135             : 
     136           0 : void SimplePlotter::setAreaFill(const String& color,
     137             :         PlotAreaFill::Pattern pattern) {
     138           0 :     m_areaFill->setColor(color);
     139           0 :     m_areaFill->setPattern(pattern);
     140           0 : }
     141             : 
     142             : 
     143             : // Plot Methods //
     144             : 
     145           0 : ScatterPlotPtr SimplePlotter::plotxy(double*& x, double*& y, unsigned int n,
     146             :                                      bool overplot) {
     147           0 :     if(m_factory.null()) return ScatterPlotPtr();
     148           0 :     else return plotxy(m_factory->data(x, y, n), overplot);
     149             : }
     150             : 
     151           0 : ScatterPlotPtr SimplePlotter::plotxy(float*& x, float*& y, unsigned int n,
     152             :                                      bool overplot) {
     153           0 :     if(m_factory.null()) return ScatterPlotPtr();
     154           0 :     else return plotxy(m_factory->data(x, y, n), overplot);
     155             : }
     156             : 
     157           0 : ScatterPlotPtr SimplePlotter::plotxy(int*& x, int*& y, unsigned int n,
     158             :                                      bool overplot) {
     159           0 :     if(m_factory.null()) return ScatterPlotPtr();
     160           0 :     else return plotxy(m_factory->data(x, y, n), overplot);
     161             : }
     162             : 
     163           0 : ScatterPlotPtr SimplePlotter::plotxy(Vector<double>& x, Vector<double>& y,
     164             :                                      bool overplot) {
     165           0 :     if(m_factory.null()) return ScatterPlotPtr();
     166           0 :     else return plotxy(m_factory->data(x, y), overplot);
     167             : }
     168             : 
     169           0 : ScatterPlotPtr SimplePlotter::plotxy(Vector<float>& x, Vector<float>& y,
     170             :                                      bool overplot) {
     171           0 :     if(m_factory.null()) return ScatterPlotPtr();
     172           0 :     else return plotxy(m_factory->data(x, y), overplot);
     173             : }
     174             : 
     175           0 : ScatterPlotPtr SimplePlotter::plotxy(Vector<int>& x, Vector<int>& y,
     176             :                                      bool overplot) {
     177           0 :     if(m_factory.null()) return ScatterPlotPtr();
     178           0 :     else return plotxy(m_factory->data(x, y), overplot);
     179             : }
     180             : 
     181           0 : ScatterPlotPtr SimplePlotter::plotxy(PlotPointDataPtr data, bool overplot) {
     182           0 :     if(m_factory.null() || data.null() || !data->isValid())
     183           0 :         return ScatterPlotPtr();
     184             :     
     185           0 :     ScatterPlotPtr plot = m_factory->scatterPlot(data);
     186           0 :     plot->setLine(m_line);
     187           0 :     plot->setSymbol(m_symbol);    
     188           0 :     m_canvas->plot(plot, overplot);
     189             :     
     190           0 :     return plot;
     191             : }
     192             : 
     193           0 : ScatterPlotPtr SimplePlotter::ploty(double*& y, unsigned int n,
     194             :                                     bool overplot) {
     195           0 :     if(m_factory.null()) return ScatterPlotPtr();
     196           0 :     else return ploty(m_factory->data(y, n), overplot);
     197             : }
     198             : 
     199           0 : ScatterPlotPtr SimplePlotter::ploty(float*& y, unsigned int n,
     200             :                                     bool overplot) {
     201           0 :     if(m_factory.null()) return ScatterPlotPtr();
     202           0 :     else return ploty(m_factory->data(y, n), overplot);
     203             : }
     204             : 
     205           0 : ScatterPlotPtr SimplePlotter::ploty(int*& y, unsigned int n,
     206             :                                     bool overplot) {
     207           0 :     if(m_factory.null()) return ScatterPlotPtr();
     208           0 :     else return ploty(m_factory->data(y, n), overplot);
     209             : }
     210             : 
     211           0 : ScatterPlotPtr SimplePlotter::ploty(Vector<double>& y, bool overplot) {
     212           0 :     if(m_factory.null()) return ScatterPlotPtr();
     213           0 :     else return ploty(m_factory->data(y), overplot);
     214             : }
     215             : 
     216           0 : ScatterPlotPtr SimplePlotter::ploty(Vector<float>& y, bool overplot) {
     217           0 :     if(m_factory.null()) return ScatterPlotPtr();
     218           0 :     else return ploty(m_factory->data(y), overplot);
     219             : }
     220             : 
     221           0 : ScatterPlotPtr SimplePlotter::ploty(Vector<int>& y, bool overplot) {
     222           0 :     if(m_factory.null()) return ScatterPlotPtr();
     223           0 :     else return ploty(m_factory->data(y), overplot);
     224             : }
     225             : 
     226           0 : ScatterPlotPtr SimplePlotter::ploty(PlotPointDataPtr data, bool overplot) {
     227           0 :     if(m_factory.null() || data.null() || !data->isValid())
     228           0 :         return ScatterPlotPtr();
     229             :     
     230           0 :     ScatterPlotPtr plot = m_factory->scatterPlot(data);
     231           0 :     plot->setLine(m_line);
     232           0 :     plot->setSymbol(m_symbol);    
     233           0 :     m_canvas->plot(plot, overplot);
     234             :     
     235           0 :     return plot;
     236             : }
     237             : 
     238           0 : BarPlotPtr SimplePlotter::barPlot(double*& x, double*& y, unsigned int n,
     239             :                                   bool overplot) {
     240           0 :     if(m_factory.null()) return BarPlotPtr();
     241           0 :     else return barPlot(m_factory->data(x, y, n), overplot);
     242             : }
     243             : 
     244           0 : BarPlotPtr SimplePlotter::barPlot(float*& x, float*& y, unsigned int n,
     245             :                                   bool overplot) {
     246           0 :     if(m_factory.null()) return BarPlotPtr();
     247           0 :     else return barPlot(m_factory->data(x, y, n), overplot);
     248             : }
     249             : 
     250           0 : BarPlotPtr SimplePlotter::barPlot(int*& x, int*& y, unsigned int n,
     251             :                                   bool overplot) {
     252           0 :     if(m_factory.null()) return BarPlotPtr();
     253           0 :     else return barPlot(m_factory->data(x, y, n), overplot);
     254             : }
     255             : 
     256           0 : BarPlotPtr SimplePlotter::barPlot(Vector<double>& x, Vector<double>& y,
     257             :                                   bool overplot) {
     258           0 :     if(m_factory.null()) return BarPlotPtr();
     259           0 :     else return barPlot(m_factory->data(x, y), overplot);
     260             : }
     261             : 
     262           0 : BarPlotPtr SimplePlotter::barPlot(Vector<float>& x, Vector<float>& y,
     263             :                                   bool overplot) {
     264           0 :     if(m_factory.null()) return BarPlotPtr();
     265           0 :     else return barPlot(m_factory->data(x, y), overplot);
     266             : }
     267             : 
     268           0 : BarPlotPtr SimplePlotter::barPlot(Vector<int>& x, Vector<int>& y,
     269             :                                   bool overplot) {
     270           0 :     if(m_factory.null()) return BarPlotPtr();
     271           0 :     else return barPlot(m_factory->data(x, y), overplot);
     272             : }
     273             : 
     274           0 : BarPlotPtr SimplePlotter::barPlot(PlotPointDataPtr data, bool overplot) {
     275           0 :     if(data.null()|| !data->isValid() || m_factory.null()) return BarPlotPtr();
     276             :     
     277           0 :     BarPlotPtr bar = m_factory->barPlot(data);
     278           0 :     bar->setLine(m_line);
     279           0 :     bar->setAreaFill(m_areaFill);
     280           0 :     if(!overplot) m_canvas->clearPlots();
     281           0 :     m_canvas->plot(bar);
     282           0 :     return bar;
     283             : }
     284             : 
     285           0 : BarPlotPtr SimplePlotter::histogramPlot(double*& data, unsigned int n,
     286             :         unsigned int bins, bool overplot) {
     287           0 :     if(m_factory.null()) return BarPlotPtr();
     288           0 :     else return barPlot(m_factory->histogramData(data, n, bins), overplot);
     289             : }
     290             : 
     291           0 : BarPlotPtr SimplePlotter::histogramPlot(float*& data, unsigned int n,
     292             :         unsigned int bins, bool overplot) {
     293           0 :     if(m_factory.null()) return BarPlotPtr();
     294           0 :     else return barPlot(m_factory->histogramData(data, n, bins), overplot);
     295             : }
     296             : 
     297           0 : BarPlotPtr SimplePlotter::histogramPlot(int*& data, unsigned int n,
     298             :         unsigned int bins, bool overplot) {
     299           0 :     if(m_factory.null()) return BarPlotPtr();
     300           0 :     else return barPlot(m_factory->histogramData(data, n, bins), overplot);
     301             : }
     302             : 
     303           0 : BarPlotPtr SimplePlotter::histogramPlot(Vector<double>& data,
     304             :         unsigned int bins, bool overplot) {
     305           0 :     if(m_factory.null()) return BarPlotPtr();
     306           0 :     else return barPlot(m_factory->histogramData(data, bins), overplot);
     307             : }
     308             : 
     309           0 : BarPlotPtr SimplePlotter::histogramPlot(Vector<float>& data,
     310             :         unsigned int bins, bool overplot) {
     311           0 :     if(m_factory.null()) return BarPlotPtr();
     312           0 :     else return barPlot(m_factory->histogramData(data, bins), overplot);
     313             : }
     314             : 
     315           0 : BarPlotPtr SimplePlotter::histogramPlot(Vector<int>& data,
     316             :         unsigned int bins, bool overplot) {
     317           0 :     if(m_factory.null()) return BarPlotPtr();
     318           0 :     else return barPlot(m_factory->histogramData(data, bins), overplot);
     319             : }
     320             : 
     321           0 : BarPlotPtr SimplePlotter::histogramPlot(PlotSingleDataPtr data,
     322             :         unsigned int bins, bool overplot) {
     323           0 :     if(m_factory.null()) return BarPlotPtr();
     324           0 :     else return barPlot(m_factory->histogramData(data, bins), overplot);
     325             : }
     326             : 
     327           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<double>& d, bool overplot) {
     328           0 :     if(m_factory.null()) return RasterPlotPtr();
     329           0 :     else return rasterPlot(PlotRasterDataPtr(new PlotRasterMatrixData<double>(
     330           0 :             d)), overplot);
     331             : }
     332             : 
     333           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<float>& d, bool overplot) {
     334           0 :     if(m_factory.null()) return RasterPlotPtr();
     335           0 :     else return rasterPlot(PlotRasterDataPtr(new PlotRasterMatrixData<float>(
     336           0 :             d)), overplot);
     337             : }
     338             : 
     339           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<int>& data, bool overplot) {
     340           0 :     if(m_factory.null()) return RasterPlotPtr();
     341           0 :     else return rasterPlot(PlotRasterDataPtr(new PlotRasterMatrixData<int>(
     342           0 :             data)), overplot);
     343             : }
     344             : 
     345           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<uInt>& data, bool overplot) {
     346           0 :     if(m_factory.null()) return RasterPlotPtr();
     347           0 :     else return rasterPlot(PlotRasterDataPtr(new PlotRasterMatrixData<uInt>(
     348           0 :             data)), overplot);
     349             : }
     350             : 
     351           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<double>& data, double fromX,
     352             :         double toX, double fromY, double toY, bool overplot) {
     353           0 :     if(m_factory.null()) return RasterPlotPtr();
     354             :     
     355           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<double>(data));
     356           0 :     d->setXRange(fromX, toX);
     357           0 :     d->setYRange(fromY, toY);
     358           0 :     return rasterPlot(d, overplot);
     359             : }
     360             : 
     361           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<float>& data, double fromX,
     362             :         double toX, double fromY, double toY, bool overplot) {
     363           0 :     if(m_factory.null()) return RasterPlotPtr();
     364             :     
     365           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<float>(data));
     366           0 :     d->setXRange(fromX, toX);
     367           0 :     d->setYRange(fromY, toY);
     368           0 :     return rasterPlot(d, overplot);
     369             : }
     370             : 
     371           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<int>& data, double fromX,
     372             :         double toX, double fromY, double toY, bool overplot) {
     373           0 :     if(m_factory.null()) return RasterPlotPtr();
     374             :     
     375           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<int>(data));
     376           0 :     d->setXRange(fromX, toX);
     377           0 :     d->setYRange(fromY, toY);
     378           0 :     return rasterPlot(d, overplot);
     379             : }
     380             : 
     381           0 : RasterPlotPtr SimplePlotter::rasterPlot(Matrix<uInt>& data, double fromX,
     382             :         double toX, double fromY, double toY, bool overplot) {
     383           0 :     if(m_factory.null()) return RasterPlotPtr();
     384             :     
     385           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<uInt>(data));
     386           0 :     d->setXRange(fromX, toX);
     387           0 :     d->setYRange(fromY, toY);
     388           0 :     return rasterPlot(d, overplot);
     389             : }
     390             : 
     391           0 : RasterPlotPtr SimplePlotter::rasterPlot(PlotRasterDataPtr data, bool overplot){
     392           0 :     if(data.null() || !data->isValid() || m_factory.null())
     393           0 :         return RasterPlotPtr();
     394             :     
     395           0 :     RasterPlotPtr raster = m_factory->rasterPlot(data);
     396           0 :     raster->setLine(m_line);
     397           0 :     m_canvas->plot(raster, overplot);
     398           0 :     return raster;
     399             : }
     400             : 
     401           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<double>& d,
     402             :         Vector<double>& contours, bool overplot) {
     403           0 :     if(m_factory.null()) return RasterPlotPtr();
     404             :     
     405           0 :     std::vector<double> v(contours.size());
     406           0 :     for(unsigned int i = 0; i < v.size(); i++)
     407           0 :         v[i] = static_cast<double>(contours[i]);
     408           0 :     return contourPlot(PlotRasterDataPtr(new PlotRasterMatrixData<double>(d)),
     409           0 :                        v, overplot);
     410             : }
     411             : 
     412           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<float>& d,
     413             :         Vector<float>& contours, bool overplot) {
     414           0 :     if(m_factory.null()) return RasterPlotPtr();
     415             :     
     416           0 :     std::vector<double> v(contours.size());
     417           0 :     for(unsigned int i = 0; i < v.size(); i++)
     418           0 :         v[i] = static_cast<double>(contours[i]);
     419           0 :     return contourPlot(PlotRasterDataPtr(new PlotRasterMatrixData<float>(d)),
     420           0 :                        v, overplot);
     421             : }
     422             : 
     423           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<int>& data,
     424             :         Vector<int>& contours, bool overplot) {
     425           0 :     if(m_factory.null()) return RasterPlotPtr();
     426             :     
     427           0 :     std::vector<double> v(contours.size());
     428           0 :     for(unsigned int i = 0; i < v.size(); i++)
     429           0 :         v[i] = static_cast<double>(contours[i]);
     430           0 :     return contourPlot(PlotRasterDataPtr(new PlotRasterMatrixData<int>(data)),
     431           0 :                        v, overplot);
     432             : }
     433             : 
     434           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<uInt>& data,
     435             :         Vector<uInt>& contours, bool overplot) {
     436           0 :     if(m_factory.null()) return RasterPlotPtr();
     437             :     
     438           0 :     std::vector<double> v(contours.size());
     439           0 :     for(unsigned int i = 0; i < v.size(); i++)
     440           0 :         v[i] = static_cast<double>(contours[i]);
     441           0 :     return contourPlot(PlotRasterDataPtr(new PlotRasterMatrixData<uInt>(data)),
     442           0 :                        v, overplot);
     443             : }
     444             : 
     445           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<double>& data, double fromX,
     446             :         double toX, double fromY, double toY, Vector<double>& contours,
     447             :         bool overplot) {
     448           0 :     if(m_factory.null()) return RasterPlotPtr();
     449             :     
     450           0 :     std::vector<double> v(contours.size());
     451           0 :     for(unsigned int i = 0; i < v.size(); i++)
     452           0 :         v[i] = static_cast<double>(contours[i]);
     453           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<double>(data));
     454           0 :     d->setXRange(fromX, toX);
     455           0 :     d->setYRange(fromY, toY);
     456           0 :     return contourPlot(d, v, overplot);
     457             : }
     458             : 
     459           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<float>& data, double fromX,
     460             :         double toX, double fromY,double toY, Vector<float>& contours,
     461             :         bool overplot) {
     462           0 :     if(m_factory.null()) return RasterPlotPtr();
     463             :     
     464           0 :     std::vector<double> v(contours.size());
     465           0 :     for(unsigned int i = 0; i < v.size(); i++)
     466           0 :         v[i] = static_cast<double>(contours[i]);
     467           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<float>(data));
     468           0 :     d->setXRange(fromX, toX);
     469           0 :     d->setYRange(fromY, toY);
     470           0 :     return contourPlot(d, v, overplot);
     471             : }
     472             : 
     473           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<int>& data, double fromX,
     474             :         double toX, double fromY, double toY, Vector<int>& contours,
     475             :         bool overplot) {
     476           0 :     if(m_factory.null()) return RasterPlotPtr();
     477             :     
     478           0 :     std::vector<double> v(contours.size());
     479           0 :     for(unsigned int i = 0; i < v.size(); i++)
     480           0 :         v[i] = static_cast<double>(contours[i]);
     481           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<int>(data));
     482           0 :     d->setXRange(fromX, toX);
     483           0 :     d->setYRange(fromY, toY);
     484           0 :     return contourPlot(d, v, overplot);
     485             : }
     486             : 
     487           0 : RasterPlotPtr SimplePlotter::contourPlot(Matrix<uInt>& data, double fromX,
     488             :         double toX, double fromY, double toY, Vector<uInt>& contours,
     489             :         bool overplot) {
     490           0 :     if(m_factory.null()) return RasterPlotPtr();
     491             :     
     492           0 :     std::vector<double> v(contours.size());
     493           0 :     for(unsigned int i = 0; i < v.size(); i++)
     494           0 :         v[i] = static_cast<double>(contours[i]);
     495           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<uInt>(data));
     496           0 :     d->setXRange(fromX, toX);
     497           0 :     d->setYRange(fromY, toY);
     498           0 :     return contourPlot(d, v, overplot);
     499             : }
     500             : 
     501           0 : RasterPlotPtr SimplePlotter::contourPlot(PlotRasterDataPtr data,
     502             :         std::vector<double>& contours, bool overplot) {
     503           0 :     if(contours.size() == 0) return rasterPlot(data, overplot);
     504             :     
     505           0 :     if(data.null() || !data->isValid() || m_factory.null())
     506           0 :         return RasterPlotPtr();
     507             :     
     508           0 :     RasterPlotPtr raster = m_factory->rasterPlot(data);
     509           0 :     raster->setLine(m_line);
     510           0 :     raster->setContourLines(contours);
     511           0 :     m_canvas->plot(raster, overplot);
     512           0 :     return raster;
     513             : }
     514             : 
     515           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<double>& d,bool overplot){
     516           0 :     if(m_factory.null()) return RasterPlotPtr();
     517           0 :     else return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<double>(
     518           0 :             d)), overplot);
     519             : }
     520             : 
     521           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<float>& d, bool overplot){
     522           0 :     if(m_factory.null()) return RasterPlotPtr();
     523           0 :     else return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<float>(
     524           0 :             d)), overplot);
     525             : }
     526             : 
     527           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<int>& data,bool overplot){
     528           0 :     if(m_factory.null()) return RasterPlotPtr();
     529           0 :     else return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<int>(
     530           0 :             data)), overplot);
     531             : }
     532             : 
     533           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<uInt>& data,
     534             :         bool overplot) {
     535           0 :     if(m_factory.null()) return RasterPlotPtr();
     536           0 :     else return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<uInt>(
     537           0 :             data)), overplot);
     538             : }
     539             : 
     540           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<double>& data,
     541             :         double fromX, double toX, double fromY, double toY, bool overplot) {
     542           0 :     if(m_factory.null()) return RasterPlotPtr();
     543             :     
     544           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<double>(data));
     545           0 :     d->setXRange(fromX, toX);
     546           0 :     d->setYRange(fromY, toY);
     547           0 :     return spectrogram(d, overplot);
     548             : }
     549             : 
     550           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<float>& data,double fromX,
     551             :         double toX, double fromY, double toY, bool overplot) {
     552           0 :     if(m_factory.null()) return RasterPlotPtr();
     553             :     
     554           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<float>(data));
     555           0 :     d->setXRange(fromX, toX);
     556           0 :     d->setYRange(fromY, toY);
     557           0 :     return spectrogram(d, overplot);
     558             : }
     559             : 
     560           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<int>& data, double fromX,
     561             :         double toX, double fromY, double toY, bool overplot) {
     562           0 :     if(m_factory.null()) return RasterPlotPtr();
     563             :     
     564           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<int>(data));
     565           0 :     d->setXRange(fromX, toX);
     566           0 :     d->setYRange(fromY, toY);
     567           0 :     return spectrogram(d, overplot);
     568             : }
     569             : 
     570           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<uInt>& data, double fromX,
     571             :         double toX, double fromY, double toY, bool overplot) {
     572           0 :     if(m_factory.null()) return RasterPlotPtr();
     573             :     
     574           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<uInt>(data));
     575           0 :     d->setXRange(fromX, toX);
     576           0 :     d->setYRange(fromY, toY);
     577           0 :     return spectrogram(d, overplot);
     578             : }
     579             : 
     580           0 : RasterPlotPtr SimplePlotter::spectrogram(PlotRasterDataPtr data,
     581             :         bool overplot) {
     582           0 :     if(data.null() || !data->isValid() || m_factory.null())
     583           0 :         return RasterPlotPtr();
     584             :     
     585           0 :     RasterPlotPtr spect = m_factory->spectrogramPlot(data);
     586           0 :     spect->setLine(m_line);
     587           0 :     m_canvas->plot(spect, overplot);
     588           0 :     return spect;
     589             : }
     590             : 
     591           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<double>& d,
     592             :         Vector<double>& contours, bool overplot) {
     593           0 :     if(m_factory.null()) return RasterPlotPtr();
     594             :     
     595           0 :     std::vector<double> v(contours.size());
     596           0 :     for(unsigned int i = 0; i < v.size(); i++)
     597           0 :         v[i] = static_cast<double>(contours[i]);
     598           0 :     return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<double>(d)),
     599           0 :                        v, overplot);
     600             : }
     601             : 
     602           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<float>& d,
     603             :         Vector<float>& contours, bool overplot) {
     604           0 :     if(m_factory.null()) return RasterPlotPtr();
     605             :     
     606           0 :     std::vector<double> v(contours.size());
     607           0 :     for(unsigned int i = 0; i < v.size(); i++)
     608           0 :         v[i] = static_cast<double>(contours[i]);
     609           0 :     return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<float>(d)),
     610           0 :                        v, overplot);
     611             : }
     612             : 
     613           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<int>& data,
     614             :         Vector<int>& contours, bool overplot) {
     615           0 :     if(m_factory.null()) return RasterPlotPtr();
     616             :     
     617           0 :     std::vector<double> v(contours.size());
     618           0 :     for(unsigned int i = 0; i < v.size(); i++)
     619           0 :         v[i] = static_cast<double>(contours[i]);
     620           0 :     return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<int>(data)),
     621           0 :                        v, overplot);
     622             : }
     623             : 
     624           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<uInt>& data,
     625             :         Vector<uInt>& contours, bool overplot) {
     626           0 :     if(m_factory.null()) return RasterPlotPtr();
     627             :     
     628           0 :     std::vector<double> v(contours.size());
     629           0 :     for(unsigned int i = 0; i < v.size(); i++)
     630           0 :         v[i] = static_cast<double>(contours[i]);
     631           0 :     return spectrogram(PlotRasterDataPtr(new PlotRasterMatrixData<uInt>(data)),
     632           0 :                        v, overplot);
     633             : }
     634             : 
     635           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<double>& da, double fromX,
     636             :         double toX, double fromY, double toY, Vector<double>& contours,
     637             :         bool overplot) {
     638           0 :     if(m_factory.null()) return RasterPlotPtr();
     639             :     
     640           0 :     std::vector<double> v(contours.size());
     641           0 :     for(unsigned int i = 0; i < v.size(); i++)
     642           0 :         v[i] = static_cast<double>(contours[i]);
     643           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<double>(da));
     644           0 :     d->setXRange(fromX, toX);
     645           0 :     d->setYRange(fromY, toY);
     646           0 :     return spectrogram(d, v, overplot);
     647             : }
     648             : 
     649           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<float>& data,double fromX,
     650             :         double toX, double fromY,double toY, Vector<float>& contours,
     651             :         bool overplot) {
     652           0 :     if(m_factory.null()) return RasterPlotPtr();
     653             :     
     654           0 :     std::vector<double> v(contours.size());
     655           0 :     for(unsigned int i = 0; i < v.size(); i++)
     656           0 :         v[i] = static_cast<double>(contours[i]);
     657           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<float>(data));
     658           0 :     d->setXRange(fromX, toX);
     659           0 :     d->setYRange(fromY, toY);
     660           0 :     return spectrogram(d, v, overplot);
     661             : }
     662             : 
     663           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<int>& data, double fromX,
     664             :         double toX, double fromY, double toY, Vector<int>& contours,
     665             :         bool overplot) {
     666           0 :     if(m_factory.null()) return RasterPlotPtr();
     667             :     
     668           0 :     std::vector<double> v(contours.size());
     669           0 :     for(unsigned int i = 0; i < v.size(); i++)
     670           0 :         v[i] = static_cast<double>(contours[i]);
     671           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<int>(data));
     672           0 :     d->setXRange(fromX, toX);
     673           0 :     d->setYRange(fromY, toY);
     674           0 :     return spectrogram(d, v, overplot);
     675             : }
     676             : 
     677           0 : RasterPlotPtr SimplePlotter::spectrogram(Matrix<uInt>& data, double fromX,
     678             :         double toX, double fromY, double toY, Vector<uInt>& contours,
     679             :         bool overplot) {
     680           0 :     if(m_factory.null()) return RasterPlotPtr();
     681             :     
     682           0 :     std::vector<double> v(contours.size());
     683           0 :     for(unsigned int i = 0; i < v.size(); i++)
     684           0 :         v[i] = static_cast<double>(contours[i]);
     685           0 :     PlotRasterDataPtr d(new PlotRasterMatrixData<uInt>(data));
     686           0 :     d->setXRange(fromX, toX);
     687           0 :     d->setYRange(fromY, toY);
     688           0 :     return spectrogram(d, v, overplot);
     689             : }
     690             : 
     691           0 : RasterPlotPtr SimplePlotter::spectrogram(PlotRasterDataPtr data,
     692             :         std::vector<double>& contours, bool overplot) {
     693           0 :     if(contours.size() == 0) return spectrogram(data, overplot);
     694             :     
     695           0 :     if(data.null() || !data->isValid() || m_factory.null())
     696           0 :         return RasterPlotPtr();
     697             :     
     698           0 :     RasterPlotPtr spect = m_factory->spectrogramPlot(data);
     699           0 :     spect->setLine(m_line);
     700           0 :     spect->setContourLines(contours);
     701           0 :     m_canvas->plot(spect, overplot);
     702           0 :     return spect;
     703             : }
     704             : 
     705           0 : PlotPointPtr SimplePlotter::plotPoint(double x, double y) {
     706           0 :     if(m_factory.null()) return PlotPointPtr();
     707             :     
     708           0 :     PlotPointPtr point = m_factory->point(x, y);
     709           0 :     point->setSymbol(m_symbol);
     710           0 :     m_canvas->plotPoint(point);
     711           0 :     m_accumulatedPoints.push_back(point);
     712             :     
     713           0 :     return point;
     714             : }
     715             : 
     716             : 
     717             : // Shapes, Annotations, etc. //
     718             : 
     719           0 : PlotAnnotationPtr SimplePlotter::annotation(double x, double y,
     720             :         const String& text) {
     721           0 :     PlotAnnotationPtr annotation =  m_factory->annotation(text, x, y);
     722           0 :     m_canvas->drawAnnotation(annotation);
     723           0 :     return annotation;
     724             : }
     725             : 
     726           0 : PlotShapeRectanglePtr SimplePlotter::rectangle(double left, double top,
     727             :         double right, double bottom) {
     728           0 :     PlotShapeRectanglePtr rect = m_factory->shapeRectangle(left, top,
     729           0 :                                                            right, bottom);
     730           0 :     rect->setLine(m_line);
     731           0 :     rect->setAreaFill(m_areaFill);
     732           0 :     m_canvas->drawShape(rect);
     733           0 :     return rect;
     734             : }
     735             : 
     736           0 : PlotShapeEllipsePtr SimplePlotter::ellipse(double centerX, double centerY,
     737             :         double xRadius, double yRadius) {
     738           0 :     PlotShapeEllipsePtr ellipse = m_factory->shapeEllipse(centerX, centerY,
     739           0 :                                                           xRadius, yRadius);
     740           0 :     ellipse->setLine(m_line);
     741           0 :     ellipse->setAreaFill(m_areaFill);
     742           0 :     m_canvas->drawShape(ellipse);
     743           0 :     return ellipse;
     744             : }
     745             : 
     746           0 : PlotShapeEllipsePtr SimplePlotter::ellipse(double x, double y, double radius) {
     747           0 :     return ellipse(x, y, radius, radius);
     748             : }
     749             : 
     750           0 : PlotShapeLinePtr SimplePlotter::xLine(double value) {
     751           0 :     PlotShapeLinePtr line = m_factory->shapeLine(value, X_BOTTOM);
     752           0 :     line->setLine(m_line);
     753           0 :     m_canvas->drawShape(line);
     754           0 :     return line;
     755             : }
     756             : 
     757           0 : PlotShapeLinePtr SimplePlotter::yLine(double value) {
     758           0 :     PlotShapeLinePtr line = m_factory->shapeLine(value, Y_LEFT);
     759           0 :     line->setLine(m_line);
     760           0 :     m_canvas->drawShape(line);
     761           0 :     return line;
     762             : }
     763             : 
     764           0 : PlotShapeArrowPtr SimplePlotter::arrow(double xFrom, double yFrom,
     765             :                                        double xTo, double yTo) {
     766           0 :     PlotShapeArrowPtr arrow = m_factory->shapeArrow(xFrom, yFrom, xTo, yTo);
     767           0 :     arrow->setLine(m_line);
     768           0 :     arrow->setAreaFill(m_areaFill);
     769           0 :     m_canvas->drawShape(arrow);
     770           0 :     return arrow;
     771             : }
     772             : 
     773           0 : PlotShapeArrowPtr SimplePlotter::lineSegment(double xFrom, double yFrom,
     774             :                                              double xTo, double yTo) {
     775           0 :     PlotShapeArrowPtr line = m_factory->shapeLineSegment(xFrom, yFrom,
     776           0 :                                                          xTo, yTo);
     777           0 :     line->setLine(m_line);
     778           0 :     m_canvas->drawShape(line);
     779           0 :     return line;
     780             : }
     781             : 
     782             : 
     783             : // Clearing Methods //
     784             : 
     785           0 : void SimplePlotter::clear() {
     786           0 :     m_canvas->clearItems();
     787           0 :     m_accumulatedPoints.clear();
     788           0 : }
     789             : 
     790           0 : void SimplePlotter::clearPoints() {
     791           0 :     for(unsigned int i = 0; i < m_accumulatedPoints.size(); i++)
     792           0 :         m_canvas->removePoint(m_accumulatedPoints[i]);
     793           0 :     m_accumulatedPoints.clear();
     794           0 : }
     795             : 
     796             : 
     797             : // Interaction Methods //
     798             : 
     799           0 : void SimplePlotter::showDefaultHandTools(bool show) {
     800           0 :     m_plotter->showDefaultPanel(Plotter::HAND_TOOLS, show);
     801           0 : }
     802             : 
     803           0 : void SimplePlotter::showDefaultExportTools(bool show) {
     804           0 :     m_plotter->showDefaultPanel(Plotter::EXPORT_TOOLS, show);
     805           0 : }
     806             : 
     807           0 : std::vector<PlotRegion> SimplePlotter::allSelectedRegions() {
     808           0 :     return m_mouseTools->selectTool()->getSelectedRects();
     809             : }
     810             : 
     811           0 : void SimplePlotter::clearSelectedRegions() {
     812           0 :     m_mouseTools->selectTool()->clearSelectedRects();
     813           0 : }
     814             : 
     815             : 
     816             : // Export Methods //
     817             : 
     818           0 : String SimplePlotter::fileChooserDialog(const String& title,
     819             :         const String& directory) {
     820           0 :     return m_plotter->fileChooserDialog(title, directory);
     821             : }
     822             : 
     823           0 : bool SimplePlotter::exportPDF(const String& location, bool highQuality,
     824             :         int dpi) {
     825           0 :     PlotExportFormat format(PlotExportFormat::PDF, location);
     826           0 :     if(highQuality) format.resolution = PlotExportFormat::HIGH;
     827           0 :     else format.resolution = PlotExportFormat::SCREEN;
     828           0 :     format.dpi = dpi;
     829           0 :     return exportToFile(format);
     830             : }
     831             : 
     832           0 : bool SimplePlotter::exportPS(const String& location, bool highQuality,
     833             :         int dpi) {
     834           0 :     PlotExportFormat format(PlotExportFormat::PS, location);
     835           0 :     if(highQuality) format.resolution = PlotExportFormat::HIGH;
     836           0 :     else format.resolution = PlotExportFormat::SCREEN;
     837           0 :     format.dpi = dpi;
     838           0 :     return exportToFile(format);
     839             : }
     840             : 
     841           0 : bool SimplePlotter::exportJPG(const String& location, bool highQuality,
     842             :         int width, int height) {
     843           0 :     PlotExportFormat format(PlotExportFormat::JPG, location);
     844           0 :     if(highQuality) format.resolution = PlotExportFormat::HIGH;
     845           0 :     else format.resolution = PlotExportFormat::SCREEN;
     846           0 :     format.width = width;
     847           0 :     format.height = height;
     848           0 :     return exportToFile(format);
     849             : }
     850             : 
     851           0 : bool SimplePlotter::exportPNG(const String& location, bool highQuality,
     852             :         int width, int height) {
     853           0 :     PlotExportFormat format(PlotExportFormat::PNG, location);
     854           0 :     if(highQuality) format.resolution = PlotExportFormat::HIGH;
     855           0 :     else format.resolution = PlotExportFormat::SCREEN;
     856           0 :     format.width = width;
     857           0 :     format.height = height;
     858           0 :     return exportToFile(format);
     859             : }
     860             : 
     861           0 : bool SimplePlotter::exportToFile(const PlotExportFormat& format) {
     862           0 :     return m_canvas->exportToFile(format);
     863             : }
     864             : 
     865             : }

Generated by: LCOV version 1.16