lfrspectrogram.cpp
66 lines
| 1.8 KiB
| text/x-c
|
CppLexer
/ gse_lesia / lfrspectrogram.cpp
r27 | #include "lfrspectrogram.h" | |||
class SpectrogramData: public QwtRasterData | ||||
{ | ||||
public: | ||||
SpectrogramData(): | ||||
QwtRasterData(QwtDoubleRect(-1.5, -1.5, 3.0, 3.0)) | ||||
{ | ||||
} | ||||
virtual QwtRasterData *copy() const | ||||
{ | ||||
return new SpectrogramData(); | ||||
} | ||||
virtual QwtDoubleInterval range() const | ||||
{ | ||||
return QwtDoubleInterval(0.0, 10.0); | ||||
} | ||||
virtual double value(double x, double y) const | ||||
{ | ||||
const double c = 0.842; | ||||
const double v1 = x * x + (y-c) * (y+c); | ||||
const double v2 = x * (y+c) + x * (y+c); | ||||
return 1.0 / (v1 * v1 + v2 * v2); | ||||
} | ||||
}; | ||||
LFRSpectrogram::LFRSpectrogram(QWidget *parent) : | ||||
QWidget(parent) | ||||
{ | ||||
mainLayout = new QVBoxLayout(); | ||||
plot_spectrogram = new QwtPlot(); | ||||
spectrogram = new QwtPlotSpectrogram(tr("spectrogram")); | ||||
QwtLinearColorMap colorMap(Qt::darkCyan, Qt::red); | ||||
colorMap.addColorStop(0.1, Qt::cyan); | ||||
colorMap.addColorStop(0.6, Qt::green); | ||||
colorMap.addColorStop(0.95, Qt::yellow); | ||||
spectrogram->setColorMap(colorMap); | ||||
spectrogram->setData( SpectrogramData() ); | ||||
spectrogram->attach(plot_spectrogram); | ||||
// A color bar on the right axis | ||||
QwtScaleWidget *rightAxis = plot_spectrogram->axisWidget(QwtPlot::yRight); | ||||
rightAxis->setTitle("Intensity"); | ||||
rightAxis->setColorBarEnabled(true); | ||||
rightAxis->setColorMap(spectrogram->data().range(), | ||||
spectrogram->colorMap()); | ||||
plot_spectrogram->setAxisScale(QwtPlot::yRight, | ||||
spectrogram->data().range().minValue(), | ||||
spectrogram->data().range().maxValue() ); | ||||
plot_spectrogram->enableAxis(QwtPlot::yRight); | ||||
plot_spectrogram->plotLayout()->setAlignCanvasToScales(true); | ||||
plot_spectrogram->replot(); | ||||
mainLayout->addWidget(plot_spectrogram); | ||||
this->setLayout(mainLayout); | ||||
} | ||||