/*
*
* This file is part of the Virtual Leaf.
*
* The Virtual Leaf is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* The Virtual Leaf is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with the Virtual Leaf. If not, see .
*
* Copyright 2010 Roeland Merks.
*
*/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "data_plot.h"
using namespace std;
static const string _module_id("$Id$");
//
// Initialize main window
//
DataPlot::DataPlot(QWidget *parent, const QString title, const QStringList curvenames ):
QwtPlot(parent),
d_interval(0),
d_timerId(-1)
{
// Number of curves is number of names given
ncurves = curvenames.size();
// allocate data and curves
d_t = new double[PLOT_SIZE];
d_x = new double *[ncurves];
d_x[0] = new double[ncurves*PLOT_SIZE];
for (int i=1;isetPaintAttribute(QwtPlotCanvas::PaintCached, false);
//canvas()->setPaintAttribute(QwtPlotCanvas::PaintPacked, false);
alignScales();
// Initialize data
for (int i = 0; i< PLOT_SIZE; i++) {
d_t[i] = 0.; // time axis
}
for (int i=0;iopen(QIODevice::WriteOnly | QIODevice::Text))
return;
datstream.setDevice(datfile);
*/
}
DataPlot::~DataPlot(void) {
delete[] d_t ;
delete[] d_x[0];
delete[] d_x;
delete[] curves;
}
//
// Set a plain canvas frame and align the scales to it
//
void DataPlot::alignScales()
{
// The code below shows how to align the scales to
// the canvas frame, but is also a good example demonstrating
// why the spreaded API needs polishing.
canvas()->setFrameStyle(QFrame::Box | QFrame::Plain );
canvas()->setLineWidth(1);
for ( int i = 0; i < QwtPlot::axisCnt; i++ )
{
QwtScaleWidget *scaleWidget = (QwtScaleWidget *)axisWidget(i);
if ( scaleWidget )
scaleWidget->setMargin(0);
QwtScaleDraw *scaleDraw = (QwtScaleDraw *)axisScaleDraw(i);
if ( scaleDraw )
scaleDraw->enableComponent(QwtAbstractScaleDraw::Backbone, false);
}
}
/* void DataPlot::setTimerInterval(double ms)
{
d_interval = qRound(ms);
if ( d_timerId >= 0 )
{
killTimer(d_timerId);
d_timerId = -1;
}
if (d_interval >= 0 )
d_timerId = startTimer(d_interval);
}
*/
// Generate new values
void DataPlot::AddValue(double t,double *x)
{
// std::cerr << "AddValue receives: " << t << ", " << y << ", " << z << std::endl;
// Plot slowly fills up, then shifts to the left
if ( data_pos >= PLOT_SIZE ) {
for ( int j = 0; j < PLOT_SIZE - 1; j++ )
d_t[j] = d_t[j+1];
for ( int i=0;iresize(400,300);
show();
}
PlotDialog::~PlotDialog(void) {
delete plot;
}