1 #include "plot.h"
2 #include <qwt_color_map.h>
3 #include <qwt_plot_spectrogram.h>
4 #include <qwt_plot_layout.h>
5 #include <qwt_matrix_raster_data.h>
6 #include <qwt_scale_widget.h>
7 #include <qwt_plot_magnifier.h>
8 #include <qwt_plot_panner.h>
9 #include <qwt_plot_renderer.h>
10 #include <qwt_plot_grid.h>
11 #include <qwt_plot_canvas.h>
12
13 class RasterData: public QwtMatrixRasterData
14 {
15 public:
RasterData()16 RasterData()
17 {
18 const double matrix[] =
19 {
20 1, 2, 4, 1,
21 6, 3, 5, 2,
22 4, 2, 1, 5,
23 5, 4, 2, 3
24 };
25
26 QVector<double> values;
27 for ( uint i = 0; i < sizeof( matrix ) / sizeof( double ); i++ )
28 values += matrix[i];
29
30 const int numColumns = 4;
31 setValueMatrix( values, numColumns );
32
33 setInterval( Qt::XAxis,
34 QwtInterval( -0.5, 3.5, QwtInterval::ExcludeMaximum ) );
35 setInterval( Qt::YAxis,
36 QwtInterval( -0.5, 3.5, QwtInterval::ExcludeMaximum ) );
37 setInterval( Qt::ZAxis, QwtInterval( 1.0, 6.0 ) );
38 }
39 };
40
41 class ColorMap: public QwtLinearColorMap
42 {
43 public:
ColorMap()44 ColorMap():
45 QwtLinearColorMap( Qt::darkBlue, Qt::darkRed )
46 {
47 addColorStop( 0.2, Qt::blue );
48 addColorStop( 0.4, Qt::cyan );
49 addColorStop( 0.6, Qt::yellow );
50 addColorStop( 0.8, Qt::red );
51 }
52 };
53
Plot(QWidget * parent)54 Plot::Plot( QWidget *parent ):
55 QwtPlot( parent )
56 {
57 QwtPlotCanvas *canvas = new QwtPlotCanvas();
58 canvas->setBorderRadius( 10 );
59 setCanvas( canvas );
60
61 #if 0
62 QwtPlotGrid *grid = new QwtPlotGrid();
63 grid->setPen( Qt::DotLine );
64 grid->attach( this );
65 #endif
66
67 d_spectrogram = new QwtPlotSpectrogram();
68 d_spectrogram->setRenderThreadCount( 0 ); // use system specific thread count
69
70 d_spectrogram->setColorMap( new ColorMap() );
71
72 d_spectrogram->setData( new RasterData() );
73 d_spectrogram->attach( this );
74
75 const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis );
76 // A color bar on the right axis
77 QwtScaleWidget *rightAxis = axisWidget( QwtPlot::yRight );
78 rightAxis->setColorBarEnabled( true );
79 rightAxis->setColorBarWidth( 40 );
80 rightAxis->setColorMap( zInterval, new ColorMap() );
81
82 setAxisScale( QwtPlot::yRight, zInterval.minValue(), zInterval.maxValue() );
83 enableAxis( QwtPlot::yRight );
84
85 plotLayout()->setAlignCanvasToScales( true );
86
87 setAxisScale( QwtPlot::xBottom, 0.0, 3.0 );
88 setAxisMaxMinor( QwtPlot::xBottom, 0 );
89 setAxisScale( QwtPlot::yLeft, 0.0, 3.0 );
90 setAxisMaxMinor( QwtPlot::yLeft, 0 );
91
92 QwtPlotMagnifier *magnifier = new QwtPlotMagnifier( canvas );
93 magnifier->setAxisEnabled( QwtPlot::yRight, false );
94
95 QwtPlotPanner *panner = new QwtPlotPanner( canvas );
96 panner->setAxisEnabled( QwtPlot::yRight, false );
97 }
98
exportPlot()99 void Plot::exportPlot()
100 {
101 QwtPlotRenderer renderer;
102 renderer.exportTo( this, "rasterview.pdf" );
103 }
104
setResampleMode(int mode)105 void Plot::setResampleMode( int mode )
106 {
107 RasterData *rasterData = static_cast<RasterData *>( d_spectrogram->data() );
108 rasterData->setResampleMode(
109 static_cast<QwtMatrixRasterData::ResampleMode>( mode ) );
110
111 replot();
112 }
113