qwt_plot_curve.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  * Qwt Widget Library
3  * Copyright (C) 1997 Josef Wilgen
4  * Copyright (C) 2002 Uwe Rathmann
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the Qwt License, Version 1.0
8  *****************************************************************************/
9 
10 #include "qwt_plot_curve.h"
11 #include "qwt_point_data.h"
12 #include "qwt_math.h"
13 #include "qwt_clipper.h"
14 #include "qwt_painter.h"
15 #include "qwt_scale_map.h"
16 #include "qwt_plot.h"
18 #include "qwt_symbol.h"
19 #include "qwt_point_mapper.h"
20 #include "qwt_text.h"
21 #include "qwt_graphic.h"
22 
23 #include <qpainter.h>
24 #include <qpainterpath.h>
25 
26 #include <climits>
27 
28 static inline QRectF qwtIntersectedClipRect( const QRectF& rect, QPainter* painter )
29 {
30  QRectF clipRect = rect;
31  if ( painter->hasClipping() )
32  clipRect &= painter->clipBoundingRect();
33 
34  return clipRect;
35 }
36 
38 {
39  if ( curve->symbol() &&
41  {
42  QSize sz = curve->symbol()->boundingRect().size();
43  sz += QSize( 2, 2 ); // margin
44 
46  {
47  // Avoid, that the line is completely covered by the symbol
48 
49  int w = qwtCeil( 1.5 * sz.width() );
50  if ( w % 2 )
51  w++;
52 
53  sz.setWidth( qMax( 8, w ) );
54  }
55 
56  curve->setLegendIconSize( sz );
57  }
58 }
59 
60 static int qwtVerifyRange( int size, int& i1, int& i2 )
61 {
62  if ( size < 1 )
63  return 0;
64 
65  i1 = qBound( 0, i1, size - 1 );
66  i2 = qBound( 0, i2, size - 1 );
67 
68  if ( i1 > i2 )
69  qSwap( i1, i2 );
70 
71  return ( i2 - i1 + 1 );
72 }
73 
75 {
76  public:
79  , baseline( 0.0 )
80  , symbol( NULL )
81  , pen( Qt::black )
83  {
85  }
86 
88  {
89  delete symbol;
90  delete curveFitter;
91  }
92 
94  double baseline;
95 
96  const QwtSymbol* symbol;
98 
99  QPen pen;
100  QBrush brush;
101 
102  QwtPlotCurve::CurveAttributes attributes;
103  QwtPlotCurve::PaintAttributes paintAttributes;
104 
105  QwtPlotCurve::LegendAttributes legendAttributes;
106 };
107 
113  : QwtPlotSeriesItem( title )
114 {
115  init();
116 }
117 
122 QwtPlotCurve::QwtPlotCurve( const QString& title )
123  : QwtPlotSeriesItem( QwtText( title ) )
124 {
125  init();
126 }
127 
130 {
131  delete m_data;
132 }
133 
136 {
139 
140  m_data = new PrivateData;
141  setData( new QwtPointSeriesData() );
142 
143  setZ( 20.0 );
144 }
145 
148 {
150 }
151 
160 {
161  if ( on )
162  m_data->paintAttributes |= attribute;
163  else
164  m_data->paintAttributes &= ~attribute;
165 }
166 
172 {
173  return ( m_data->paintAttributes & attribute );
174 }
175 
184 {
185  if ( on != testLegendAttribute( attribute ) )
186  {
187  if ( on )
188  m_data->legendAttributes |= attribute;
189  else
190  m_data->legendAttributes &= ~attribute;
191 
192  qwtUpdateLegendIconSize( this );
193  legendChanged();
194  }
195 }
196 
202 {
203  return ( m_data->legendAttributes & attribute );
204 }
205 
212 void QwtPlotCurve::setLegendAttributes( LegendAttributes attributes )
213 {
214  if ( attributes != m_data->legendAttributes )
215  {
216  m_data->legendAttributes = attributes;
217 
218  qwtUpdateLegendIconSize( this );
219  legendChanged();
220  }
221 }
222 
227 QwtPlotCurve::LegendAttributes QwtPlotCurve::legendAttributes() const
228 {
229  return m_data->legendAttributes;
230 }
231 
239 {
240  if ( style != m_data->style )
241  {
242  m_data->style = style;
243 
244  legendChanged();
245  itemChanged();
246  }
247 }
248 
254 {
255  return m_data->style;
256 }
257 
269 {
270  if ( symbol != m_data->symbol )
271  {
272  delete m_data->symbol;
273  m_data->symbol = symbol;
274 
275  qwtUpdateLegendIconSize( this );
276 
277  legendChanged();
278  itemChanged();
279  }
280 }
281 
287 {
288  return m_data->symbol;
289 }
290 
304 void QwtPlotCurve::setPen( const QColor& color, qreal width, Qt::PenStyle style )
305 {
306  setPen( QPen( color, width, style ) );
307 }
308 
315 void QwtPlotCurve::setPen( const QPen& pen )
316 {
317  if ( pen != m_data->pen )
318  {
319  m_data->pen = pen;
320 
321  legendChanged();
322  itemChanged();
323  }
324 }
325 
330 const QPen& QwtPlotCurve::pen() const
331 {
332  return m_data->pen;
333 }
334 
350 void QwtPlotCurve::setBrush( const QBrush& brush )
351 {
352  if ( brush != m_data->brush )
353  {
354  m_data->brush = brush;
355 
356  legendChanged();
357  itemChanged();
358  }
359 }
360 
365 const QBrush& QwtPlotCurve::brush() const
366 {
367  return m_data->brush;
368 }
369 
383 void QwtPlotCurve::drawSeries( QPainter* painter,
384  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
385  const QRectF& canvasRect, int from, int to ) const
386 {
387  const size_t numSamples = dataSize();
388 
389  if ( !painter || numSamples <= 0 )
390  return;
391 
392  if ( to < 0 )
393  to = numSamples - 1;
394 
395  if ( qwtVerifyRange( numSamples, from, to ) > 0 )
396  {
397  painter->save();
398  painter->setPen( m_data->pen );
399 
400  /*
401  Qt 4.0.0 is slow when drawing lines, but it's even
402  slower when the painter has a brush. So we don't
403  set the brush before we really need it.
404  */
405 
406  drawCurve( painter, m_data->style, xMap, yMap, canvasRect, from, to );
407  painter->restore();
408 
409  if ( m_data->symbol &&
411  {
412  painter->save();
413  drawSymbols( painter, *m_data->symbol,
414  xMap, yMap, canvasRect, from, to );
415  painter->restore();
416  }
417  }
418 }
419 
431 void QwtPlotCurve::drawCurve( QPainter* painter, int style,
432  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
433  const QRectF& canvasRect, int from, int to ) const
434 {
435  switch ( style )
436  {
437  case Lines:
438  if ( testCurveAttribute( Fitted ) )
439  {
440  // we always need the complete
441  // curve for fitting
442  from = 0;
443  to = dataSize() - 1;
444  }
445  drawLines( painter, xMap, yMap, canvasRect, from, to );
446  break;
447  case Sticks:
448  drawSticks( painter, xMap, yMap, canvasRect, from, to );
449  break;
450  case Steps:
451  drawSteps( painter, xMap, yMap, canvasRect, from, to );
452  break;
453  case Dots:
454  drawDots( painter, xMap, yMap, canvasRect, from, to );
455  break;
456  case LinesAndDots: {
457  if (testCurveAttribute(Fitted)) {
458  from = 0;
459  to = dataSize() - 1;
460  }
461  drawLines(painter, xMap, yMap, canvasRect, from, to);
462 
463  QPen prev_pen = painter->pen();
464  QPen new_pen = prev_pen;
465  new_pen.setWidth(prev_pen.width() * 3);
466 
467  painter->setPen(new_pen);
468  drawDots(painter, xMap, yMap, canvasRect, from, to);
469  painter->setPen(prev_pen);
470  } break;
471 
472  case NoCurve:
473  default:
474  break;
475  }
476 }
477 
494 void QwtPlotCurve::drawLines( QPainter* painter,
495  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
496  const QRectF& canvasRect, int from, int to ) const
497 {
498  if ( from > to )
499  return;
500 
501  const bool doFit = ( m_data->attributes & Fitted ) && m_data->curveFitter;
502  const bool doAlign = !doFit && QwtPainter::roundingAlignment( painter );
503  const bool doFill = ( m_data->brush.style() != Qt::NoBrush )
504  && ( m_data->brush.color().alpha() > 0 );
505 
506  QRectF clipRect;
508  {
509  clipRect = qwtIntersectedClipRect( canvasRect, painter );
510 
511  const qreal pw = QwtPainter::effectivePenWidth( painter->pen() );
512  clipRect = clipRect.adjusted(-pw, -pw, pw, pw);
513  }
514 
515  QwtPointMapper mapper;
516 
517  if ( doAlign )
518  {
519  mapper.setFlag( QwtPointMapper::RoundPoints, true );
522  }
523 
527 
528  mapper.setBoundingRect( canvasRect );
529 
530  QPolygonF polyline = mapper.toPolygonF( xMap, yMap, data(), from, to );
531 
532  if ( doFill )
533  {
534  if ( doFit )
535  {
536  // it might be better to extend and draw the curvePath, but for
537  // the moment we keep an implementation, where we translate the
538  // path back to a polyline.
539 
540  polyline = m_data->curveFitter->fitCurve( polyline );
541  }
542 
543  if ( painter->pen().style() != Qt::NoPen )
544  {
545  // here we are wasting memory for the filled copy,
546  // do polygon clipping twice etc .. TODO
547 
548  QPolygonF filled = polyline;
549  fillCurve( painter, xMap, yMap, canvasRect, filled );
550  filled.clear();
551 
553  QwtClipper::clipPolygonF( clipRect, polyline, false );
554 
555  QwtPainter::drawPolyline( painter, polyline );
556  }
557  else
558  {
559  fillCurve( painter, xMap, yMap, canvasRect, polyline );
560  }
561  }
562  else
563  {
565  {
566  QwtClipper::clipPolygonF( clipRect, polyline, false );
567  }
568 
569  if ( doFit )
570  {
572  {
573  const QPainterPath curvePath =
574  m_data->curveFitter->fitCurvePath( polyline );
575 
576  painter->drawPath( curvePath );
577  }
578  else
579  {
580  polyline = m_data->curveFitter->fitCurve( polyline );
581  QwtPainter::drawPolyline( painter, polyline );
582  }
583  }
584  else
585  {
586  QwtPainter::drawPolyline( painter, polyline );
587  }
588  }
589 }
590 
603 void QwtPlotCurve::drawSticks( QPainter* painter,
604  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
605  const QRectF& canvasRect, int from, int to ) const
606 {
607  Q_UNUSED( canvasRect )
608 
609  painter->save();
610  painter->setRenderHint( QPainter::Antialiasing, false );
611 
612  const bool doAlign = QwtPainter::roundingAlignment( painter );
613 
614  double x0 = xMap.transform( m_data->baseline );
615  double y0 = yMap.transform( m_data->baseline );
616  if ( doAlign )
617  {
618  x0 = qRound( x0 );
619  y0 = qRound( y0 );
620  }
621 
622  const Qt::Orientation o = orientation();
623 
624  const QwtSeriesData< QPointF >* series = data();
625 
626  for ( int i = from; i <= to; i++ )
627  {
628  const QPointF sample = series->sample( i );
629  double xi = xMap.transform( sample.x() );
630  double yi = yMap.transform( sample.y() );
631  if ( doAlign )
632  {
633  xi = qRound( xi );
634  yi = qRound( yi );
635  }
636 
637  if ( o == Qt::Horizontal )
638  QwtPainter::drawLine( painter, x0, yi, xi, yi );
639  else
640  QwtPainter::drawLine( painter, xi, y0, xi, yi );
641  }
642 
643  painter->restore();
644 }
645 
658 void QwtPlotCurve::drawDots( QPainter* painter,
659  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
660  const QRectF& canvasRect, int from, int to ) const
661 {
662  const QColor color = painter->pen().color();
663 
664  if ( painter->pen().style() == Qt::NoPen || color.alpha() == 0 )
665  {
666  return;
667  }
668 
669  const bool doFill = ( m_data->brush.style() != Qt::NoBrush )
670  && ( m_data->brush.color().alpha() > 0 );
671  const bool doAlign = QwtPainter::roundingAlignment( painter );
672 
673  QwtPointMapper mapper;
674  mapper.setBoundingRect( canvasRect );
675  mapper.setFlag( QwtPointMapper::RoundPoints, doAlign );
676 
678  {
679  if ( ( color.alpha() == 255 )
680  && !( painter->renderHints() & QPainter::Antialiasing ) )
681  {
682  mapper.setFlag( QwtPointMapper::WeedOutPoints, true );
683  }
684  }
685 
686  if ( doFill )
687  {
688  mapper.setFlag( QwtPointMapper::WeedOutPoints, false );
689 
690  QPolygonF points = mapper.toPolygonF(
691  xMap, yMap, data(), from, to );
692 
693  QwtPainter::drawPoints( painter, points );
694  fillCurve( painter, xMap, yMap, canvasRect, points );
695  }
696  else if ( m_data->paintAttributes & ImageBuffer )
697  {
698  const QImage image = mapper.toImage( xMap, yMap,
699  data(), from, to, m_data->pen,
700  painter->testRenderHint( QPainter::Antialiasing ),
701  renderThreadCount() );
702 
703  painter->drawImage( canvasRect.toAlignedRect(), image );
704  }
705  else if ( m_data->paintAttributes & MinimizeMemory )
706  {
707  const QwtSeriesData< QPointF >* series = data();
708 
709  for ( int i = from; i <= to; i++ )
710  {
711  const QPointF sample = series->sample( i );
712 
713  double xi = xMap.transform( sample.x() );
714  double yi = yMap.transform( sample.y() );
715 
716  if ( doAlign )
717  {
718  xi = qRound( xi );
719  yi = qRound( yi );
720  }
721 
722  QwtPainter::drawPoint( painter, QPointF( xi, yi ) );
723  }
724  }
725  else
726  {
727  if ( doAlign )
728  {
729  const QPolygon points = mapper.toPoints(
730  xMap, yMap, data(), from, to );
731 
732  QwtPainter::drawPoints( painter, points );
733  }
734  else
735  {
736  const QPolygonF points = mapper.toPointsF(
737  xMap, yMap, data(), from, to );
738 
739  QwtPainter::drawPoints( painter, points );
740  }
741  }
742 }
743 
759 void QwtPlotCurve::drawSteps( QPainter* painter,
760  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
761  const QRectF& canvasRect, int from, int to ) const
762 {
763  const bool doAlign = QwtPainter::roundingAlignment( painter );
764 
765  QPolygonF polygon( 2 * ( to - from ) + 1 );
766  QPointF* points = polygon.data();
767 
768  bool inverted = orientation() == Qt::Vertical;
769  if ( m_data->attributes & Inverted )
770  inverted = !inverted;
771 
772  const QwtSeriesData< QPointF >* series = data();
773 
774  int i, ip;
775  for ( i = from, ip = 0; i <= to; i++, ip += 2 )
776  {
777  const QPointF sample = series->sample( i );
778  double xi = xMap.transform( sample.x() );
779  double yi = yMap.transform( sample.y() );
780  if ( doAlign )
781  {
782  xi = qRound( xi );
783  yi = qRound( yi );
784  }
785 
786  if ( ip > 0 )
787  {
788  const QPointF& p0 = points[ip - 2];
789  QPointF& p = points[ip - 1];
790 
791  if ( inverted )
792  {
793  p.rx() = p0.x();
794  p.ry() = yi;
795  }
796  else
797  {
798  p.rx() = xi;
799  p.ry() = p0.y();
800  }
801  }
802 
803  points[ip].rx() = xi;
804  points[ip].ry() = yi;
805  }
806 
808  {
809  QRectF clipRect = qwtIntersectedClipRect( canvasRect, painter );
810 
811  const qreal pw = QwtPainter::effectivePenWidth( painter->pen() );
812  clipRect = clipRect.adjusted(-pw, -pw, pw, pw);
813 
814  const QPolygonF clipped = QwtClipper::clippedPolygonF(
815  clipRect, polygon, false );
816 
817  QwtPainter::drawPolyline( painter, clipped );
818  }
819  else
820  {
821  QwtPainter::drawPolyline( painter, polygon );
822  }
823 
824  if ( m_data->brush.style() != Qt::NoBrush )
825  fillCurve( painter, xMap, yMap, canvasRect, polygon );
826 }
827 
828 
838 {
839  if ( bool( m_data->attributes & attribute ) == on )
840  return;
841 
842  if ( on )
843  m_data->attributes |= attribute;
844  else
845  m_data->attributes &= ~attribute;
846 
847  itemChanged();
848 }
849 
855 {
856  return m_data->attributes & attribute;
857 }
858 
877 {
878  delete m_data->curveFitter;
880 
881  itemChanged();
882 }
883 
891 {
892  return m_data->curveFitter;
893 }
894 
907 void QwtPlotCurve::fillCurve( QPainter* painter,
908  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
909  const QRectF& canvasRect, QPolygonF& polygon ) const
910 {
911  if ( m_data->brush.style() == Qt::NoBrush )
912  return;
913 
914  closePolyline( painter, xMap, yMap, polygon );
915  if ( polygon.count() <= 2 ) // a line can't be filled
916  return;
917 
918  QBrush brush = m_data->brush;
919  if ( !brush.color().isValid() )
920  brush.setColor( m_data->pen.color() );
921 
923  {
924  const QRectF clipRect = qwtIntersectedClipRect( canvasRect, painter );
925  QwtClipper::clipPolygonF( clipRect, polygon, true );
926  }
927 
928  painter->save();
929 
930  painter->setPen( Qt::NoPen );
931  painter->setBrush( brush );
932 
933  QwtPainter::drawPolygon( painter, polygon );
934 
935  painter->restore();
936 }
937 
947 void QwtPlotCurve::closePolyline( QPainter* painter,
948  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
949  QPolygonF& polygon ) const
950 {
951  if ( polygon.size() < 2 )
952  return;
953 
954  const bool doAlign = QwtPainter::roundingAlignment( painter );
955 
956  double baseline = m_data->baseline;
957 
958  if ( orientation() == Qt::Vertical )
959  {
960  if ( yMap.transformation() )
962 
963  double refY = yMap.transform( baseline );
964  if ( doAlign && qAbs( refY ) < std::numeric_limits< int >::max() )
965  refY = qRound( refY );
966 
967  polygon += QPointF( polygon.last().x(), refY );
968  polygon += QPointF( polygon.first().x(), refY );
969  }
970  else
971  {
972  if ( xMap.transformation() )
974 
975  double refX = xMap.transform( baseline );
976  if ( doAlign && qAbs( refX ) < std::numeric_limits< int >::max() )
977  refX = qRound( refX );
978 
979  polygon += QPointF( refX, polygon.last().y() );
980  polygon += QPointF( refX, polygon.first().y() );
981  }
982 }
983 
997 void QwtPlotCurve::drawSymbols( QPainter* painter, const QwtSymbol& symbol,
998  const QwtScaleMap& xMap, const QwtScaleMap& yMap,
999  const QRectF& canvasRect, int from, int to ) const
1000 {
1001  QwtPointMapper mapper;
1003  QwtPainter::roundingAlignment( painter ) );
1006 
1007  const QRectF clipRect = qwtIntersectedClipRect( canvasRect, painter );
1008  mapper.setBoundingRect( clipRect );
1009 
1010  const int chunkSize = 500;
1011 
1012  for ( int i = from; i <= to; i += chunkSize )
1013  {
1014  const int n = qMin( chunkSize, to - i + 1 );
1015 
1016  const QPolygonF points = mapper.toPointsF( xMap, yMap,
1017  data(), i, i + n - 1 );
1018 
1019  if ( points.size() > 0 )
1020  symbol.drawSymbols( painter, points );
1021  }
1022 }
1023 
1040 void QwtPlotCurve::setBaseline( double value )
1041 {
1042  if ( m_data->baseline != value )
1043  {
1044  m_data->baseline = value;
1045  itemChanged();
1046  }
1047 }
1048 
1054 {
1055  return m_data->baseline;
1056 }
1057 
1069 int QwtPlotCurve::closestPoint( const QPointF& pos, double* dist ) const
1070 {
1071  const QwtPlot* plot = this->plot();
1072 
1073  if ( ( plot == NULL ) || !plot->isAxisValid( xAxis() ) || !plot->isAxisValid( yAxis() ) )
1074  return -1;
1075 
1076  const size_t numSamples = dataSize();
1077  if ( numSamples <= 0 )
1078  return -1;
1079 
1080  const QwtSeriesData< QPointF >* series = data();
1081 
1082  const QwtScaleMap xMap = plot->canvasMap( xAxis() );
1083  const QwtScaleMap yMap = plot->canvasMap( yAxis() );
1084 
1085  int index = -1;
1086  double dmin = 1.0e10;
1087 
1088  for ( uint i = 0; i < numSamples; i++ )
1089  {
1090  const QPointF sample = series->sample( i );
1091 
1092  const double cx = xMap.transform( sample.x() ) - pos.x();
1093  const double cy = yMap.transform( sample.y() ) - pos.y();
1094 
1095  const double f = qwtSqr( cx ) + qwtSqr( cy );
1096  if ( f < dmin )
1097  {
1098  index = i;
1099  dmin = f;
1100  }
1101  }
1102  if ( dist )
1103  *dist = std::sqrt( dmin );
1104 
1105  return index;
1106 }
1107 
1123 int QwtPlotCurve::adjacentPoint( Qt::Orientation orientation, qreal value ) const
1124 {
1125  const QwtSeriesData< QPointF >* data = this->data();
1126  if ( data == nullptr )
1127  return -1;
1128 
1129  if ( orientation == Qt::Horizontal )
1130  {
1131  struct compareX
1132  {
1133  inline bool operator()( const double x, const QPointF& pos ) const
1134  {
1135  return ( x < pos.x() );
1136  }
1137  };
1138 
1139  return qwtUpperSampleIndex< QPointF >( *data, value, compareX() );
1140  }
1141  else
1142  {
1143  struct compareY
1144  {
1145  inline bool operator()( const double y, const QPointF& pos ) const
1146  {
1147  return ( y < pos.y() );
1148  }
1149  };
1150 
1151  return qwtUpperSampleIndex< QPointF >( *data, value, compareY() );
1152  }
1153 
1154  return -1;
1155 }
1156 
1173 qreal QwtPlotCurve::interpolatedValueAt( Qt::Orientation orientation, double value ) const
1174 {
1175  const QRectF br = boundingRect();
1176  if ( br.width() <= 0.0 )
1177  return qQNaN();
1178 
1179  double v;
1180 
1181  if ( orientation == Qt::Horizontal )
1182  {
1183  if ( value < br.left() || value > br.right() )
1184  return qQNaN();
1185 
1186  const int index = adjacentPoint( orientation, value );
1187 
1188  if ( index == -1 )
1189  {
1190  const QPointF last = sample( dataSize() - 1 );
1191 
1192  if ( value != last.x() )
1193  return qQNaN();
1194 
1195  v = last.y();
1196  }
1197  else
1198  {
1199  const QLineF line( sample( index - 1 ), sample( index ) );
1200  v = line.pointAt( ( value - line.p1().x() ) / line.dx() ).y();
1201  }
1202  }
1203  else
1204  {
1205  if ( value < br.top() || value > br.bottom() )
1206  return qQNaN();
1207 
1208  const int index = adjacentPoint( orientation, value );
1209 
1210  if ( index == -1 )
1211  {
1212  const QPointF last = sample( dataSize() - 1 );
1213 
1214  if ( value != last.y() )
1215  return qQNaN();
1216 
1217  v = last.x();
1218  }
1219  else
1220  {
1221  const QLineF line( sample( index - 1 ), sample( index ) );
1222  v = line.pointAt( ( value - line.p1().y() ) / line.dy() ).x();
1223  }
1224  }
1225 
1226  return v;
1227 }
1228 
1238 QwtGraphic QwtPlotCurve::legendIcon( int index, const QSizeF& size ) const
1239 {
1240  Q_UNUSED( index );
1241 
1242  if ( size.isEmpty() )
1243  return QwtGraphic();
1244 
1245  QwtGraphic graphic;
1246  graphic.setDefaultSize( size );
1248 
1249  QPainter painter( &graphic );
1250  painter.setRenderHint( QPainter::Antialiasing,
1252 
1253  if ( m_data->legendAttributes == 0 ||
1255  {
1256  QBrush brush = m_data->brush;
1257 
1258  if ( brush.style() == Qt::NoBrush &&
1259  m_data->legendAttributes == 0 )
1260  {
1261  if ( style() != QwtPlotCurve::NoCurve )
1262  {
1263  brush = QBrush( pen().color() );
1264  }
1265  else if ( m_data->symbol &&
1266  ( m_data->symbol->style() != QwtSymbol::NoSymbol ) )
1267  {
1268  brush = QBrush( m_data->symbol->pen().color() );
1269  }
1270  }
1271 
1272  if ( brush.style() != Qt::NoBrush )
1273  {
1274  QRectF r( 0, 0, size.width(), size.height() );
1275  painter.fillRect( r, brush );
1276  }
1277  }
1278 
1280  {
1281  if ( pen() != Qt::NoPen )
1282  {
1283  QPen pn = pen();
1284  pn.setCapStyle( Qt::FlatCap );
1285 
1286  painter.setPen( pn );
1287 
1288  const double y = 0.5 * size.height();
1289  QwtPainter::drawLine( &painter, 0.0, y, size.width(), y );
1290  }
1291  }
1292 
1294  {
1295  if ( m_data->symbol )
1296  {
1297  QRectF r( 0, 0, size.width(), size.height() );
1298  m_data->symbol->drawSymbol( &painter, r );
1299  }
1300  }
1301 
1302  return graphic;
1303 }
1304 
1316 {
1317  setData( data );
1318 }
1319 
1328 {
1329  setData( new QwtPointSeriesData( samples ) );
1330 }
1331 
1347  const double* xData, const double* yData, int size )
1348 {
1349  setData( new QwtCPointerData< double >( xData, yData, size ) );
1350 }
1351 
1367  const float* xData, const float* yData, int size )
1368 {
1369  setData( new QwtCPointerData< float >( xData, yData, size ) );
1370 }
1371 
1388 void QwtPlotCurve::setRawSamples( const double* yData, int size )
1389 {
1390  setData( new QwtCPointerValueData< double >( yData, size ) );
1391 }
1392 
1409 void QwtPlotCurve::setRawSamples( const float* yData, int size )
1410 {
1411  setData( new QwtCPointerValueData< float >( yData, size ) );
1412 }
1413 
1426  const double* xData, const double* yData, int size )
1427 {
1428  setData( new QwtPointArrayData< double >( xData, yData, size ) );
1429 }
1430 
1443  const float* xData, const float* yData, int size )
1444 {
1445  setData( new QwtPointArrayData< float >( xData, yData, size ) );
1446 }
1447 
1457  const QVector< double >& yData )
1458 {
1459  setData( new QwtPointArrayData< double >( xData, yData ) );
1460 }
1461 
1471  const QVector< float >& yData )
1472 {
1473  setData( new QwtPointArrayData< float >( xData, yData ) );
1474 }
1475 
1487 void QwtPlotCurve::setSamples( const double* yData, int size )
1488 {
1489  setData( new QwtValuePointData< double >( yData, size ) );
1490 }
1491 
1503 void QwtPlotCurve::setSamples( const float* yData, int size )
1504 {
1505  setData( new QwtValuePointData< float >( yData, size ) );
1506 }
1507 
1519 {
1520  setData( new QwtValuePointData< double >( yData ) );
1521 }
1522 
1534 {
1535  setData( new QwtValuePointData< float >( yData ) );
1536 }
QwtPointArrayData
Interface for iterating over two QVector<T> objects.
Definition: qwt_point_data.h:22
QwtPlotCurve::Inverted
@ Inverted
Definition: qwt_plot_curve.h:120
color
color
Definition: color.h:16
qwt_graphic.h
qwtSqr
double qwtSqr(double x)
Return the square of a number.
Definition: qwt_math.h:195
QwtPlotCurve::legendAttributes
LegendAttributes legendAttributes() const
Definition: qwt_plot_curve.cpp:227
QwtPlotCurve::PrivateData::brush
QBrush brush
Definition: qwt_plot_curve.cpp:100
QwtPlotCurve::PrivateData::PrivateData
PrivateData()
Definition: qwt_plot_curve.cpp:77
QwtPlotCurve::Dots
@ Dots
Definition: qwt_plot_curve.h:98
QwtSeriesStore< QPointF >::sample
QPointF sample(int index) const
Definition: qwt_series_store.h:158
QwtCPointerValueData
Data class containing a pointer to memory of y coordinates.
Definition: qwt_point_data.h:89
QwtSymbol::drawSymbols
void drawSymbols(QPainter *, const QPolygonF &) const
Draw symbols at the specified points.
Definition: qwt_symbol.h:251
QwtPlotItem::legendChanged
virtual void legendChanged()
Definition: qwt_plot_item.cpp:491
QwtPlotSeriesItem
Base class for plot items representing a series of samples.
Definition: qwt_plot_seriesitem.h:24
QwtPlotCurve::FilterPointsAggressive
@ FilterPointsAggressive
Definition: qwt_plot_curve.h:233
QwtPlotCurve::closestPoint
virtual int closestPoint(const QPointF &pos, double *dist=NULL) const
Definition: qwt_plot_curve.cpp:1069
QwtGraphic
A paint device for scalable graphics.
Definition: qwt_graphic.h:75
QwtPainter::drawPolyline
static void drawPolyline(QPainter *, const QPolygonF &)
Wrapper for QPainter::drawPolyline()
Definition: qwt_painter.cpp:578
QwtPlotSeriesItem::orientation
Qt::Orientation orientation() const
Definition: qwt_plot_seriesitem.cpp:77
QwtPlotCurve::drawLines
virtual void drawLines(QPainter *, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
Draw lines.
Definition: qwt_plot_curve.cpp:494
QwtPlotCurve::setPen
void setPen(const QColor &, qreal width=0.0, Qt::PenStyle=Qt::SolidLine)
Definition: qwt_plot_curve.cpp:304
QwtPlotCurve::Lines
@ Lines
Definition: qwt_plot_curve.h:77
QwtPlotCurve::drawCurve
virtual void drawCurve(QPainter *, int style, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
Draw the line part (without symbols) of a curve interval.
Definition: qwt_plot_curve.cpp:431
QwtGraphic::setRenderHint
void setRenderHint(RenderHint, bool on=true)
Definition: qwt_graphic.cpp:443
QwtPlotCurve::setRawSamples
void setRawSamples(const double *xData, const double *yData, int size)
Initialize the data by pointing to memory blocks which are not managed by QwtPlotCurve.
Definition: qwt_plot_curve.cpp:1346
QVector
Definition: qwt_clipper.h:23
QwtPlotCurve::setBrush
void setBrush(const QBrush &)
Assign a brush.
Definition: qwt_plot_curve.cpp:350
QwtPlot
A 2-D plotting widget.
Definition: qwt_plot.h:78
QwtPlotCurve::m_data
PrivateData * m_data
Definition: qwt_plot_curve.h:349
QwtPlotCurve::setCurveFitter
void setCurveFitter(QwtCurveFitter *)
Definition: qwt_plot_curve.cpp:876
QwtSeriesStore< QPointF >::setData
void setData(QwtSeriesData< QPointF > *series)
Definition: qwt_series_store.h:164
QwtSymbol::boundingRect
virtual QRect boundingRect() const
Definition: qwt_symbol.cpp:1637
qwt_point_mapper.h
mqtt_test_proto.x
x
Definition: mqtt_test_proto.py:34
QwtPlotCurve::LegendAttribute
LegendAttribute
Definition: qwt_plot_curve.h:144
QwtPlotCurve::baseline
double baseline() const
Definition: qwt_plot_curve.cpp:1053
QwtPlotCurve::drawSeries
virtual void drawSeries(QPainter *, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const QWT_OVERRIDE
Definition: qwt_plot_curve.cpp:383
qwtUpdateLegendIconSize
static void qwtUpdateLegendIconSize(QwtPlotCurve *curve)
Definition: qwt_plot_curve.cpp:37
QwtPlotCurve::drawSymbols
virtual void drawSymbols(QPainter *, const QwtSymbol &, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
Definition: qwt_plot_curve.cpp:997
qwt_math.h
QwtPlotItem::Legend
@ Legend
The item is represented on the legend.
Definition: qwt_plot_item.h:150
QwtPlotCurve::PrivateData::symbol
const QwtSymbol * symbol
Definition: qwt_plot_curve.cpp:96
QwtPainter::roundingAlignment
static bool roundingAlignment()
Definition: qwt_painter.h:183
QwtPlotCurve::PrivateData::style
QwtPlotCurve::CurveStyle style
Definition: qwt_plot_curve.cpp:93
qwt_symbol.h
qwt_point_data.h
mqtt_test_proto.y
y
Definition: mqtt_test_proto.py:35
QwtPlotItem::xAxis
QwtAxisId xAxis() const
Return xAxis.
Definition: qwt_plot_item.cpp:553
QwtPlotCurve::Steps
@ Steps
Definition: qwt_plot_curve.h:90
QwtPlotCurve::drawSticks
virtual void drawSticks(QPainter *, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
Definition: qwt_plot_curve.cpp:603
QwtPointMapper::toPolygonF
QPolygonF toPolygonF(const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QwtSeriesData< QPointF > *series, int from, int to) const
Translate a series of points into a QPolygonF.
Definition: qwt_point_mapper.cpp:647
QwtPlotCurve::PrivateData::~PrivateData
~PrivateData()
Definition: qwt_plot_curve.cpp:87
f
f
qwtVerifyRange
static int qwtVerifyRange(int size, int &i1, int &i2)
Definition: qwt_plot_curve.cpp:60
QwtSymbol::NoSymbol
@ NoSymbol
No Style. The symbol cannot be drawn.
Definition: qwt_symbol.h:41
QwtPlotItem::plot
QwtPlot * plot() const
Return attached plot.
Definition: qwt_plot_item.cpp:142
QwtPlotCurve::setLegendAttributes
void setLegendAttributes(LegendAttributes)
Definition: qwt_plot_curve.cpp:212
QwtPlotCurve::closePolyline
void closePolyline(QPainter *, const QwtScaleMap &, const QwtScaleMap &, QPolygonF &) const
Complete a polygon to be a closed polygon including the area between the original polygon and the bas...
Definition: qwt_plot_curve.cpp:947
QwtPlotCurve::ImageBuffer
@ ImageBuffer
Definition: qwt_plot_curve.h:209
QwtPlotCurve::testPaintAttribute
bool testPaintAttribute(PaintAttribute) const
Definition: qwt_plot_curve.cpp:171
QwtPainter::drawPoint
static void drawPoint(QPainter *, const QPoint &)
Wrapper for QPainter::drawPoint()
Definition: qwt_painter.cpp:691
QwtPlotItem::AutoScale
@ AutoScale
Definition: qwt_plot_item.h:157
QwtPlotCurve::PrivateData::attributes
QwtPlotCurve::CurveAttributes attributes
Definition: qwt_plot_curve.cpp:102
QwtPlotCurve::fillCurve
virtual void fillCurve(QPainter *, const QwtScaleMap &, const QwtScaleMap &, const QRectF &canvasRect, QPolygonF &) const
Definition: qwt_plot_curve.cpp:907
nonstd::span_lite::size
span_constexpr std::size_t size(span< T, Extent > const &spn)
Definition: span.hpp:1554
QwtPlotCurve::testCurveAttribute
bool testCurveAttribute(CurveAttribute) const
Definition: qwt_plot_curve.cpp:854
QwtPlotCurve::ClipPolygons
@ ClipPolygons
Definition: qwt_plot_curve.h:185
QwtPointMapper
A helper class for translating a series of points.
Definition: qwt_point_mapper.h:32
QwtCPointerData
Data class containing two pointers to memory blocks of T.
Definition: qwt_point_data.h:43
QwtPlotCurve::CurveStyle
CurveStyle
Definition: qwt_plot_curve.h:65
QwtPlotCurve::Sticks
@ Sticks
Definition: qwt_plot_curve.h:83
QwtPointMapper::toPointsF
QPolygonF toPointsF(const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QwtSeriesData< QPointF > *series, int from, int to) const
Translate a series into a QPolygonF.
Definition: qwt_point_mapper.cpp:759
qwt_clipper.h
QwtGraphic::RenderPensUnscaled
@ RenderPensUnscaled
Definition: qwt_graphic.h:96
QwtPlotCurve::symbol
const QwtSymbol * symbol() const
Definition: qwt_plot_curve.cpp:286
QwtPlotCurve::PrivateData::curveFitter
QwtCurveFitter * curveFitter
Definition: qwt_plot_curve.cpp:97
qwt_scale_map.h
QwtText
A class representing a text.
Definition: qwt_text.h:51
QwtCurveFitter::fitCurve
virtual QPolygonF fitCurve(const QPolygonF &polygon) const =0
QwtSymbol
A class for drawing symbols.
Definition: qwt_symbol.h:31
QwtPlotCurve::rtti
virtual int rtti() const QWT_OVERRIDE
Definition: qwt_plot_curve.cpp:147
QwtPlotCurve::PrivateData::paintAttributes
QwtPlotCurve::PaintAttributes paintAttributes
Definition: qwt_plot_curve.cpp:103
QwtCurveFitter
Abstract base class for a curve fitter.
Definition: qwt_curve_fitter.h:21
QwtSymbol::drawSymbol
void drawSymbol(QPainter *, const QRectF &) const
Draw the symbol into a rectangle.
Definition: qwt_symbol.cpp:1434
QwtPlotItem::setZ
void setZ(double z)
Set the z value.
Definition: qwt_plot_item.cpp:165
QwtPlotCurve::PrivateData::pen
QPen pen
Definition: qwt_plot_curve.cpp:99
QwtSeriesData< QPointF >
QwtPainter::drawLine
static void drawLine(QPainter *, qreal x1, qreal y1, qreal x2, qreal y2)
Wrapper for QPainter::drawLine()
Definition: qwt_painter.h:154
QwtPlotCurve::setPaintAttribute
void setPaintAttribute(PaintAttribute, bool on=true)
Definition: qwt_plot_curve.cpp:159
QwtPlotCurve::setBaseline
void setBaseline(double)
Set the value of the baseline.
Definition: qwt_plot_curve.cpp:1040
QwtPlotCurve::setCurveAttribute
void setCurveAttribute(CurveAttribute, bool on=true)
Definition: qwt_plot_curve.cpp:837
QwtPlotCurve::setSymbol
void setSymbol(QwtSymbol *)
Assign a symbol.
Definition: qwt_plot_curve.cpp:268
QwtPointMapper::setBoundingRect
void setBoundingRect(const QRectF &)
Definition: qwt_point_mapper.cpp:612
QwtPlotCurve::~QwtPlotCurve
virtual ~QwtPlotCurve()
Destructor.
Definition: qwt_plot_curve.cpp:129
QwtPlotCurve::setStyle
void setStyle(CurveStyle style)
Definition: qwt_plot_curve.cpp:238
QwtClipper::clipPolygonF
QWT_EXPORT void clipPolygonF(const QRectF &, QPolygonF &, bool closePolygon=false)
Definition: qwt_clipper.cpp:404
QwtPlotCurve::CurveAttribute
CurveAttribute
Definition: qwt_plot_curve.h:114
QwtSeriesData::sample
virtual T sample(size_t i) const =0
QwtPlotCurve::pen
const QPen & pen() const
Definition: qwt_plot_curve.cpp:330
QwtPlotCurve::interpolatedValueAt
qreal interpolatedValueAt(Qt::Orientation, double) const
Definition: qwt_plot_curve.cpp:1173
QwtSeriesStore< QPointF >::data
QwtSeriesData< QPointF > * data()
Definition: qwt_series_store.h:146
QwtScaleMap::transform
double transform(double s) const
Definition: qwt_scale_map.h:137
qwtIntersectedClipRect
static QRectF qwtIntersectedClipRect(const QRectF &rect, QPainter *painter)
Definition: qwt_plot_curve.cpp:28
QwtPlotCurve::init
void init()
Initialize internal members.
Definition: qwt_plot_curve.cpp:135
QwtPlotItem::itemChanged
virtual void itemChanged()
Definition: qwt_plot_item.cpp:481
QwtCurveFitter::fitCurvePath
virtual QPainterPath fitCurvePath(const QPolygonF &polygon) const =0
QwtPlotCurve::style
CurveStyle style() const
Definition: qwt_plot_curve.cpp:253
QwtSeriesStore< QPointF >::dataSize
virtual size_t dataSize() const QWT_OVERRIDE
Definition: qwt_series_store.h:175
QwtScaleMap
A scale map.
Definition: qwt_scale_map.h:26
QwtPointMapper::WeedOutIntermediatePoints
@ WeedOutIntermediatePoints
Definition: qwt_point_mapper.h:68
color::black
@ black
compareX
Definition: customtracker.cpp:19
QwtPlotCurve::MinimizeMemory
@ MinimizeMemory
Definition: qwt_plot_curve.h:200
QwtPlotCurve::setLegendAttribute
void setLegendAttribute(LegendAttribute, bool on=true)
Definition: qwt_plot_curve.cpp:183
QwtPointMapper::RoundPoints
@ RoundPoints
Round points to integer values.
Definition: qwt_point_mapper.h:42
QwtPlotCurve::QwtPlotCurve
QwtPlotCurve(const QString &title=QString())
Definition: qwt_plot_curve.cpp:122
qwt_painter.h
QwtPointMapper::setFlag
void setFlag(TransformationFlag, bool on=true)
Definition: qwt_point_mapper.cpp:586
QwtValuePointData
Interface for iterating over a QVector<T>.
Definition: qwt_point_data.h:67
QwtPlotItem::setItemAttribute
void setItemAttribute(ItemAttribute, bool on=true)
Definition: qwt_plot_item.cpp:228
QwtSplineCurveFitter
A curve fitter using a spline interpolation.
Definition: qwt_spline_curve_fitter.h:25
QwtPlotCurve::curveFitter
QwtCurveFitter * curveFitter() const
Definition: qwt_plot_curve.cpp:890
QwtTransform::bounded
virtual double bounded(double value) const
Definition: qwt_transform.cpp:33
QwtPlotCurve::drawDots
virtual void drawDots(QPainter *, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
Definition: qwt_plot_curve.cpp:658
qwt_spline_curve_fitter.h
QwtPainter::effectivePenWidth
static qreal effectivePenWidth(const QPen &)
Definition: qwt_painter.h:201
QwtClipper::clippedPolygonF
QWT_EXPORT QPolygonF clippedPolygonF(const QRectF &, const QPolygonF &, bool closePolygon=false)
Definition: qwt_clipper.cpp:455
QwtCurveFitter::mode
Mode mode() const
Definition: qwt_curve_fitter.cpp:27
QwtPlotCurve::setSamples
void setSamples(const double *xData, const double *yData, int size)
Definition: qwt_plot_curve.cpp:1425
QwtPointMapper::toImage
QImage toImage(const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QwtSeriesData< QPointF > *series, int from, int to, const QPen &, bool antialiased, uint numThreads) const
Translate a series into a QImage.
Definition: qwt_point_mapper.cpp:883
QwtPainter::drawPoints
static void drawPoints(QPainter *, const QPolygon &)
Wrapper for QPainter::drawPoints()
Definition: qwt_painter.h:142
ip
#define ip
QwtSymbol::pen
const QPen & pen() const
Definition: qwt_symbol.cpp:1171
mqtt_test.data
dictionary data
Definition: mqtt_test.py:22
QwtPointMapper::WeedOutPoints
@ WeedOutPoints
Definition: qwt_point_mapper.h:48
qwtCeil
int qwtCeil(qreal value)
Definition: qwt_math.h:266
QwtPainter::drawPolygon
static void drawPolygon(QPainter *, const QPolygonF &)
Wrapper for QPainter::drawPolygon()
Definition: qwt_painter.cpp:561
QwtPlotSeriesItem::boundingRect
virtual QRectF boundingRect() const QWT_OVERRIDE
Definition: qwt_plot_seriesitem.cpp:97
QwtPlotCurve::LegendShowSymbol
@ LegendShowSymbol
Definition: qwt_plot_curve.h:161
qwt_plot_curve.h
QwtPlotCurve::PrivateData
Definition: qwt_plot_curve.cpp:74
QwtSymbol::style
Style style() const
Definition: qwt_symbol.cpp:1795
QwtPlotCurve::NoCurve
@ NoCurve
Definition: qwt_plot_curve.h:70
QwtPlotItem::testRenderHint
bool testRenderHint(RenderHint) const
Definition: qwt_plot_item.cpp:332
qwt_text.h
QwtPlotCurve::FilterPoints
@ FilterPoints
Definition: qwt_plot_curve.h:193
QwtPlot::isAxisValid
bool isAxisValid(QwtAxisId) const
Definition: qwt_plot_axis.cpp:132
QwtScaleMap::transformation
const QwtTransform * transformation() const
Get the transformation.
Definition: qwt_scale_map.cpp:88
QwtPlotCurve::testLegendAttribute
bool testLegendAttribute(LegendAttribute) const
Definition: qwt_plot_curve.cpp:201
QwtPointSeriesData
QwtArraySeriesData< QPointF > QwtPointSeriesData
Interface for iterating over an array of points.
Definition: qwt_series_data.h:214
QwtPlotItem::setLegendIconSize
void setLegendIconSize(const QSize &)
Definition: qwt_plot_item.cpp:373
QwtPlot::canvasMap
virtual QwtScaleMap canvasMap(QwtAxisId) const
Definition: qwt_plot.cpp:800
QwtPlotItem::RenderAntialiased
@ RenderAntialiased
Enable antialiasing.
Definition: qwt_plot_item.h:206
QwtGraphic::setDefaultSize
void setDefaultSize(const QSizeF &)
Set a default size.
Definition: qwt_graphic.cpp:553
QwtPlotItem::Rtti_PlotCurve
@ Rtti_PlotCurve
For QwtPlotCurve.
Definition: qwt_plot_item.h:93
QwtPlotCurve::Fitted
@ Fitted
Definition: qwt_plot_curve.h:132
QwtPlotCurve::PrivateData::baseline
double baseline
Definition: qwt_plot_curve.cpp:94
QwtPlotItem::yAxis
QwtAxisId yAxis() const
Return yAxis.
Definition: qwt_plot_item.cpp:559
QwtCurveFitter::Path
@ Path
Definition: qwt_curve_fitter.h:48
QwtPlotCurve::adjacentPoint
virtual int adjacentPoint(Qt::Orientation orientation, qreal value) const
Definition: qwt_plot_curve.cpp:1123
QwtPlotCurve::LegendShowBrush
@ LegendShowBrush
Definition: qwt_plot_curve.h:167
QwtPlotCurve::LinesAndDots
@ LinesAndDots
Definition: qwt_plot_curve.h:100
QwtPlotCurve
A plot item, that represents a series of points.
Definition: qwt_plot_curve.h:56
qwt_plot.h
QwtPlotCurve::legendIcon
virtual QwtGraphic legendIcon(int index, const QSizeF &) const QWT_OVERRIDE
Definition: qwt_plot_curve.cpp:1238
QwtPlotCurve::LegendShowLine
@ LegendShowLine
Definition: qwt_plot_curve.h:156
QwtPlotCurve::drawSteps
virtual void drawSteps(QPainter *, const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QRectF &canvasRect, int from, int to) const
Definition: qwt_plot_curve.cpp:759
QwtPointMapper::toPoints
QPolygon toPoints(const QwtScaleMap &xMap, const QwtScaleMap &yMap, const QwtSeriesData< QPointF > *series, int from, int to) const
Translate a series of points into a QPolygon.
Definition: qwt_point_mapper.cpp:833
QwtPlotCurve::PaintAttribute
PaintAttribute
Definition: qwt_plot_curve.h:178
QwtPlotCurve::brush
const QBrush & brush() const
Definition: qwt_plot_curve.cpp:365
QwtPlotCurve::PrivateData::legendAttributes
QwtPlotCurve::LegendAttributes legendAttributes
Definition: qwt_plot_curve.cpp:105
QwtPlotItem::renderThreadCount
uint renderThreadCount() const
Definition: qwt_plot_item.cpp:360


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Aug 11 2024 02:24:24