void IncrementalPlot::appendPoint( const QPointF &point ) { CurveData *data = static_cast<CurveData *>( d_curve->data() ); data->append( point ); const bool doClip = !canvas()->testAttribute( Qt::WA_PaintOnScreen ); // if ( doClip ) // { // /* // Depending on the platform setting a clip might be an important // performance issue. F.e. for Qt Embedded this reduces the // part of the backing store that has to be copied out - maybe // to an unaccelerated frame buffer device. // */ // const QwtScaleMap xMap = canvasMap( d_curve->xAxis() ); // const QwtScaleMap yMap = canvasMap( d_curve->yAxis() ); // QRegion clipRegion; // const QSize symbolSize = d_curve->symbol()->size(); // QRect r( 0, 0, symbolSize.width() + 2, symbolSize.height() + 2 ); // const QPointF center = // QwtScaleMap::transform( xMap, yMap, point ); // r.moveCenter( center.toPoint() ); // clipRegion += r; // d_directPainter->setClipRegion( clipRegion ); // } d_directPainter->drawSeries( d_curve, data->size() - 1, data->size() - 1 ); }
void Wykres2d::aktualizuj() { CurveData *data = static_cast<CurveData *> (plot2dCurve->data()); data->clear(); for (int i = 0; i < punkty.size(); i++) { data->append(punkty[i]); } plot2d->replot(); }
void Plot::appendPoint1(double u) { double elapsed = d_clock.elapsed() / 1000.0; qDebug() << "d_clock1: " << elapsed; qDebug() << "udouble1: " << u; QPointF point(elapsed,(u*5/1024)); CurveData *data = static_cast<CurveData *>( d_curve1->data() ); data->append(point); RecToFile1(elapsed,u); const int numPoints = data->size(); if ( numPoints > d_paintedPoints1 ) { const bool doClip = !canvas()->testAttribute( Qt::WA_PaintOnScreen ); if ( doClip ) { /* Depending on the platform setting a clip might be an important performance issue. F.e. for Qt Embedded this reduces the part of the backing store that has to be copied out - maybe to an unaccelerated frame buffer device. */ const QwtScaleMap xMap = canvasMap( d_curve1->xAxis() ); const QwtScaleMap yMap = canvasMap( d_curve1->yAxis() ); QRectF br = qwtBoundingRect( *data, d_paintedPoints1 - 1, numPoints - 1 ); const QRect clipRect = QwtScaleMap::transform( xMap, yMap, br ).toRect(); d_directPainter0->setClipRegion( clipRect ); } d_directPainter0->drawSeries(d_curve1, d_paintedPoints1 - 1, numPoints - 1); d_paintedPoints1 = numPoints; } }
BrainPlot::BrainPlot(QWidget *parent, int nChannels, int Length, int Amplitude): QwtPlot( parent ), d_curves( nChannels ), d_zeros( nChannels ) { /*Set some attributes*/ minusExpectedAmplitude = -Amplitude; plotLength = Length; this->nChannels = nChannels; /*Start sample counter*/ sample = 0; /*Painter*/ d_directPainter = new QwtPlotDirectPainter( this ); if ( QwtPainter::isX11GraphicsSystem() ) { #if QT_VERSION < 0x050000 canvas()->setAttribute( Qt::WA_PaintOutsidePaintEvent, true ); #endif canvas()->setAttribute( Qt::WA_PaintOnScreen, true ); } /*Activates the legend for channel tracking*/ QwtLegend *legend = new QwtLegend; legend->setDefaultItemMode( QwtLegendData::ReadOnly); insertLegend( legend, QwtPlot::LeftLegend ); /*Instantiate the reference lines and the data curves for each channel*/ int Hfactor = 360/(nChannels+1);//different colors for each curve char name[15]; for(int c = 0; c < nChannels; c++) { /*Curve*/ sprintf(name, "Channel %d", c+1); d_curves[c] = new QwtPlotCurve( name); d_curves[c]->setData( new CurveData(plotLength, minusExpectedAmplitude*(2*c+1)) ); d_curves[c]->setPen( QColor::fromHsv ( Hfactor*c, 255, 255)); d_curves[c]->setStyle( QwtPlotCurve::Lines ); d_curves[c]->setSymbol( new QwtSymbol( QwtSymbol::NoSymbol)); d_curves[c]->attach( this ); /*Reference line*/ d_zeros[c] = new QwtPlotCurve; d_zeros[c]->setData( new CurveData() ); d_zeros[c]->setPen( QColor::fromHsv ( Hfactor*c, 255, 140)); d_zeros[c]->setStyle( QwtPlotCurve::Lines ); d_zeros[c]->setSymbol( new QwtSymbol( QwtSymbol::NoSymbol)); d_zeros[c]->setItemAttribute(QwtPlotItem::Legend, false); d_zeros[c]->attach( this ); /*Draw reference lines*/ CurveData *data = static_cast<CurveData *>( d_zeros[c]->data() ); data->append(QPointF(0, minusExpectedAmplitude*(2*c+1))); data->append(QPointF(plotLength, minusExpectedAmplitude*(2*c+1))); d_directPainter->drawSeries( d_zeros[c], 0, 1); } /*Sweeping line*/ d_sweep = new QwtPlotCurve; d_sweep->setData( new CurveData() ); d_sweep->setPen( Qt::black, plotLength/100, Qt::SolidLine); d_sweep->setStyle( QwtPlotCurve::Lines ); d_sweep->setSymbol( new QwtSymbol( QwtSymbol::NoSymbol)); d_sweep->setItemAttribute(QwtPlotItem::Legend, false); d_sweep->attach( this ); CurveData *data = static_cast<CurveData *>( d_sweep->data() ); data->append(QPointF(0, plotLength)); data->append(QPointF(0, 2*nChannels*minusExpectedAmplitude)); /*Axis*/ setAxisScale( xBottom, 0, plotLength ); setAxisScale( yLeft, 2*nChannels*minusExpectedAmplitude, 0 ); enableAxis(xBottom, false); enableAxis(yLeft, false); /*Frame*/ setFrameStyle( QFrame::NoFrame ); setLineWidth( 0 ); /*Canvas*/ plotLayout()->setAlignCanvasToScales( true ); plotLayout()->setCanvasMargin(100, QwtPlot::xBottom); plotLayout()->setCanvasMargin(100, QwtPlot::xTop); setCanvasBackground( Qt::black ); /*Grid*/ QwtPlotGrid *grid = new QwtPlotGrid; grid->setMajorPen( Qt::gray, 0, Qt::DotLine ); grid->setMinorPen( Qt::gray, 0, Qt::DotLine ); grid->enableYMin(true); grid->attach( this ); /*Optimizaion for real-time data collecting*/ setAutoReplot( false ); /*Show*/ replot(); }