// plot.cpp
#include <QFile>
#include <QDebug>
#include <qwt_raster_data.h>
#include <qprinter.h>
#include <qprintdialog.h>
#include <qwt_color_map.h>
#include <qwt_plot_spectrogram.h>
#include <qwt_scale_widget.h>
#include <qwt_scale_draw.h>
#include <qwt_plot_zoomer.h>
#include <qwt_plot_panner.h>
#include <qwt_plot_layout.h>
#include <qwt_plot_renderer.h>
#include "plot.h"
#include "SpectrogramData.h"
#include "CONST.h"
const qreal minX = -1.0; // if it will 0.0 we have the same result, just cut axis
//------------------------------------------------------------------------------------------
public:
setTrackerMode( AlwaysOn );
}
bg.setAlpha( 200 );
text.
setBackgroundBrush( QBrush( bg
) );
return text;
}
};
//------------------------------------------------------------------------------------------
private:
int maxX;
int maxY;
vecArray column;
Matrix detectionMatrix;
public:
SpectrogramData() {
maxX = 0;
maxY = 359;
setInterval(Qt::XAxis, QwtInterval(minX, maxX));
setInterval(Qt::YAxis, QwtInterval(minX, maxY));
setInterval(Qt::ZAxis, QwtInterval(minX, 10.0));
}
void setMaxXIncremet() {
++maxX;
setInterval(Qt::XAxis, QwtInterval(minX, maxX));
}
void setMaxX(const int val) {
setInterval(Qt::XAxis, QwtInterval(minX, val));
}
void setMaxY(const int val) {
setInterval(Qt::YAxis, QwtInterval(0.0, val));
}
void addColumn(const QVector<int> &col) {
detectionMatrix.push_back(col);
}
virtual double value(double x, double y) const {
int ix = qRound(x);
int iy = qRound(y);
if ( (ix >= 0) && (ix < maxX) && (iy >= 0) && (iy < maxY) ) {
// qDebug() << x;
return detectionMatrix[ix][iy];
}
return 0;
}
};
//------------------------------------------------------------------------------------------
public:
ColorMap():
addColorStop( 0.6, Qt::cyan );
// addColorStop( 0.6, Qt::green );
addColorStop( 0.9, Qt::yellow );
}
};
//------------------------------------------------------------------------------------------
sData = new SpectrogramData();
sDataFile = new SpectrogramDataFile();
d_spectrogram->setRenderThreadCount( 0 ); // use system specific thread count
d_spectrogram->setColorMap(new ColorMap());
d_spectrogram->setData( sData );
d_spectrogram->attach( this );
const QwtInterval zInterval = d_spectrogram->data()->interval( Qt::ZAxis );
rightAxis->setTitle(tr("Amplitude"));
rightAxis->setColorBarEnabled(true);
rightAxis->setColorMap(zInterval, new ColorMap());
setAxisScale
( QwtPlot::yRight, zInterval.
minValue(), zInterval.
maxValue() );
plotLayout()->setAlignCanvasToScales(true);
replot();
zoomer = new MyZoomer(canvas());
Qt::RightButton, Qt::ControlModifier );
/*Qt::Key_Delete*/Qt::RightButton );
panner
->setAxisEnabled
(QwtPlot::yRight,
false);
panner->setMouseButton(Qt::MidButton);
panner->setMouseTracking(true);
sd->setMinimumExtent( fm.width( "100.00" ) );
zoomer->setRubberBandPen(c);
zoomer->setTrackerPen(c);
}
//------------------------------------------------------------------------------------------
void Plot::addColumn(const QVector<int> &col) {
sData->addColumn(col);
sData->setMaxXIncremet();
const QwtInterval xInterval = d_spectrogram->data()->interval(Qt::XAxis);
const QwtInterval yInterval = d_spectrogram->data()->interval(Qt::YAxis);
zoomer->setZoomBase(rectTmp);
replot();
}
//------------------------------------------------------------------------------------------
void Plot::showSpectrogram( bool on ) {
d_spectrogram
->setDefaultContourPen
( on ?
QPen() : QPen( Qt
::NoPen ) );
replot();
}