Exemplo n.º 1
0
void MainWindow::onChartChanged(FilterResult* data)
{
    QwtPlotSpectrogram* curve = dynamic_cast<QwtPlotSpectrogram*>(qwtPlot->itemList()[0]);
    if(curve == nullptr)
        return;

    DataHelper* curveData = static_cast<DataHelper*>(curve->data());
    curveData->setData(data);
    qwtPlot->replot();
}
Exemplo n.º 2
0
QwtPlotSpectrogram * PlotViewWidget::addSpectrogramData(SpectrogramData *spectrogramData)
{
    QwtPlotSpectrogram *spectrogram = new QwtPlotSpectrogram();
    spectrogram->setRenderThreadCount( 0 ); // use system specific thread count

    QwtLinearColorMap * colorMap = new QwtLinearColorMap(Qt::white, Qt::black);
    spectrogram->setColorMap(colorMap);

    spectrogram->setCachePolicy( QwtPlotRasterItem::PaintCache );
    spectrogram->setData( spectrogramData );

    QRectF r = spectrogramData->boundingRect();
    setAxisScale( QwtPlot::yLeft , 0, 5000, 1000);
    setAxisScale( QwtPlot::yRight , 0, 5000, 1000);
    setAxisScale( QwtPlot::xBottom , r.left(), r.right(), 0.1);

    spectrogram->setDisplayMode( QwtPlotSpectrogram::ImageMode, true );
    spectrogram->setAlpha(100);

    maSpectrogramData << spectrogramData;

    maSpectrograms << spectrogram;
    spectrogram->attach( this );
    repaint();

    return spectrogram;
}
Exemplo n.º 3
0
void MainWindow::listenChanged(bool value)
{
    ui->actionStart->setEnabled(!value);
    ui->actionStop->setEnabled(value);
    ui->actionChange->setEnabled(!value);

    if(!value)
        return;
    QwtPlotSpectrogram* curve = dynamic_cast<QwtPlotSpectrogram*>(qwtPlot->itemList()[0]);
    if(curve == nullptr)
        return;
    DataHelper* curveData = static_cast<DataHelper*>(curve->data());

    curveData->clear();
}
Exemplo n.º 4
0
/**
 * @brief SpectrogramScopeConfig::loadConfiguration loads the plot configuration into the scope gadget widget
 * @param scopeGadgetWidget
 */
void SpectrogramScopeConfig::loadConfiguration(ScopeGadgetWidget *scopeGadgetWidget)
{
    preparePlot(scopeGadgetWidget);
    scopeGadgetWidget->setScope(this);
    scopeGadgetWidget->startTimer(m_refreshInterval);

    //There should be only one spectrogram per plot //TODO: Upgrade this to handle multiple spectrograms on a single axis
    if ( m_spectrogramSourceConfigs.length() != 1)
        return;

    Plot3dCurveConfiguration* spectrogramSourceConfigs = m_spectrogramSourceConfigs.front();
    QString uavObjectName = spectrogramSourceConfigs->uavObjectName;
    QString uavFieldName = spectrogramSourceConfigs->uavFieldName;

    // Get and store the units
    units = getUavObjectFieldUnits(uavObjectName, uavFieldName);

    SpectrogramData* spectrogramData = new SpectrogramData(uavObjectName, uavFieldName, samplingFrequency, windowWidth, timeHorizon);
    spectrogramData->setXMinimum(0);
    spectrogramData->setXMaximum(samplingFrequency/2);
    spectrogramData->setYMinimum(0);
    spectrogramData->setYMaximum(timeHorizon);
    spectrogramData->setZMaximum(zMaximum);
    spectrogramData->setScalePower(spectrogramSourceConfigs->yScalePower);
    spectrogramData->setMeanSamples(spectrogramSourceConfigs->yMeanSamples);
    spectrogramData->setMathFunction(spectrogramSourceConfigs->mathFunction);

    //Generate the waterfall name
    QString waterfallName = (spectrogramData->getUavoName()) + "." + (spectrogramData->getUavoFieldName());
    if(spectrogramData->getHaveSubFieldFlag())
        waterfallName = waterfallName.append("." + spectrogramData->getUavoSubFieldName());

    //Get the uav object
    ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
    UAVObjectManager *objManager = pm->getObject<UAVObjectManager>();
    UAVDataObject* obj = dynamic_cast<UAVDataObject*>(objManager->getObject((spectrogramData->getUavoName())));
    if(!obj) {
        qDebug() << "Object " << spectrogramData->getUavoName() << " is missing";
        return;
    }

    //Get the units
    QString units = getUavObjectFieldUnits(spectrogramData->getUavoName(), spectrogramData->getUavoFieldName());

    //Generate name with scaling factor appeneded
    QString waterfallNameScaled;
    if(spectrogramSourceConfigs->yScalePower == 0)
        waterfallNameScaled = waterfallName + "(" + units + ")";
    else
        waterfallNameScaled = waterfallName + "(x10^" + QString::number(spectrogramSourceConfigs->yScalePower) + " " + units + ")";

    //Create the waterfall plot
    QwtPlotSpectrogram* plotSpectrogram = new QwtPlotSpectrogram(waterfallNameScaled);
    plotSpectrogram->setRenderThreadCount( 0 ); // use system specific thread count
    plotSpectrogram->setRenderHint(QwtPlotItem::RenderAntialiased);
    plotSpectrogram->setColorMap(new ColorMap(colorMapType) );

    // Initial raster data

    QDateTime NOW = QDateTime::currentDateTime(); //TODO: Upgrade this to show UAVO time and not system time
    for ( uint i = 0; i < timeHorizon; i++ ){
        spectrogramData->timeDataHistory->append(NOW.toTime_t() + NOW.time().msec() / 1000.0 + i);
    }

    if (((double) windowWidth) * timeHorizon < (double) 10000000.0 * sizeof(spectrogramData->zDataHistory->front())){ //Don't exceed 10MB for memory
        for ( uint i = 0; i < windowWidth*timeHorizon; i++ ){
            spectrogramData->zDataHistory->append(0);
        }
    }
    else{
        qDebug() << "For some reason, we're trying to allocate a gigantic spectrogram. This probably represents a problem in the configuration file. TimeHorizion: "<< timeHorizon << ", windowWidth: "<< windowWidth;
        Q_ASSERT(0);
        return;
    }

    //Set up colorbar on right axis
    spectrogramData->rightAxis = scopeGadgetWidget->axisWidget( QwtPlot::yRight );
    spectrogramData->rightAxis->setTitle( "Intensity" );
    spectrogramData->rightAxis->setColorBarEnabled( true );
    spectrogramData->rightAxis->setColorMap( QwtInterval(0, zMaximum), new ColorMap(colorMapType));
    scopeGadgetWidget->setAxisScale( QwtPlot::yRight, 0, zMaximum);
    scopeGadgetWidget->enableAxis( QwtPlot::yRight );

    plotSpectrogram->setData(spectrogramData->getRasterData());

    plotSpectrogram->attach(scopeGadgetWidget);
    spectrogramData->setSpectrogram(plotSpectrogram);

    //Keep the curve details for later
    scopeGadgetWidget->insertDataSources(waterfallNameScaled, spectrogramData);

    // Connect the UAVO
    scopeGadgetWidget->connectUAVO(obj);

    mutex.lock();
    scopeGadgetWidget->replot();
    mutex.unlock();
}