KD Chart 2  [rev.2.8]
KDChartPlotterDiagramCompressor.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2001-2021 Klaralvdalens Datakonsult AB. All rights reserved.
3 **
4 ** This file is part of the KD Chart library.
5 **
6 ** Licensees holding valid commercial KD Chart licenses may use this file in
7 ** accordance with the KD Chart Commercial License Agreement provided with
8 ** the Software.
9 **
10 **
11 ** This file may be distributed and/or modified under the terms of the
12 ** GNU General Public License version 2 and version 3 as published by the
13 ** Free Software Foundation and appearing in the file LICENSE.GPL.txt included.
14 **
15 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17 **
18 ** Contact info@kdab.com if any conditions of this licensing are not
19 ** clear to you.
20 **
21 **********************************************************************/
22 
23 #ifndef PLOTTERDIAGRAMCOMPRESSOR_H
24 #define PLOTTERDIAGRAMCOMPRESSOR_H
25 
26 #include <QtCore/QObject>
27 #include <QtCore/QAbstractItemModel>
28 #include <QtCore/QPointer>
29 #include <QtCore/QVector>
30 #include <QtCore/QDateTime>
31 
32 #include <cmath>
33 #include <limits>
34 
35 namespace KDChart
36 {
37 
38 
40 {
41  Q_OBJECT
42  Q_ENUMS( CompressionMode )
43 public:
44 
46  class DataPoint {
47  public:
49  : key( std::numeric_limits< qreal >::quiet_NaN() ),
50  value( std::numeric_limits< qreal >::quiet_NaN() ),
51  hidden( false )
52  {}
53  inline qreal distance( const DataPoint &other )
54  {
55  const qreal dx = key - other.key;
56  const qreal dy = value - other.value;
57  return std::sqrt( dx * dx + dy * dy );
58  }
59 
60  inline bool operator==( const DataPoint &other )
61  {
62  return key == other.key && value == other.value;
63  }
64 
65  inline bool operator!=( const DataPoint &other )
66  {
67  return !( *this == other );
68  }
69 
70  qreal key;
71  qreal value;
72  bool hidden;
73  QModelIndex index;
74  };
75 
76  class Iterator
77  {
79  public:
80  Iterator( int dataSet, PlotterDiagramCompressor *parent );
81  ~Iterator();
82  bool isValid() const;
84  Iterator operator++( int );
85  Iterator& operator += ( int value );
87  Iterator operator--( int );
88  Iterator& operator-=( int value );
90  bool operator==( const Iterator &other ) const;
91  bool operator!=( const Iterator &other ) const;
92  void invalidate();
93  protected:
94  Iterator( int dataSet, PlotterDiagramCompressor *parent, QVector< DataPoint > buffer );
95  private:
96  void handleSlopeForward( const DataPoint &dp );
97  QPointer< PlotterDiagramCompressor > m_parent;
98  QVector< DataPoint > m_buffer;
99  int m_index;
100  int m_dataset;
101  int m_bufferIndex;
102  int m_rebuffer;
103  QDateTime m_timeOfCreation;
104  };
105 
108  public:
110  : first( -1 ),
111  second( -1 )
112  {}
114  : first( first ),
115  second( second )
116  {}
117  int first;
118  int second;
119 
120  bool operator==( const CachePosition& rhs ) const
121  {
122  return first == rhs.first &&
123  second == rhs.second;
124  }
125  };
126  explicit PlotterDiagramCompressor(QObject *parent = 0);
127  ~PlotterDiagramCompressor() override;
128  Iterator begin( int dataSet );
129  Iterator end( int dataSet );
130  void setMergeRadius( qreal radius );
131  void setMergeRadiusPercentage( qreal radius );
132  void setModel( QAbstractItemModel *model );
133  QAbstractItemModel* model() const;
134  DataPoint data( const CachePosition& pos ) const;
135  int rowCount() const;
136  int datasetCount() const;
137  void setCompressionModel( CompressionMode value );
138  void setMaxSlopeChange( qreal value );
139  qreal maxSlopeChange() const;
140  void cleanCache();
142  void setForcedDataBoundaries( const QPair< qreal, qreal > &bounds, Qt::Orientation direction );
143 Q_SIGNALS:
146 
147 private:
148  class Private;
149  Private *d;
150 };
151 
152 }
153 
154 #endif // PLOTTERDIAGRAMCOMPRESSOR_H
KDChart::PlotterDiagramCompressor::CachePosition::CachePosition
CachePosition()
Definition: KDChartPlotterDiagramCompressor.h:109
KDChart::PlotterDiagramCompressor::DataPoint::value
qreal value
Definition: KDChartPlotterDiagramCompressor.h:71
KDChart::PlotterDiagramCompressor::BOTH
@ BOTH
Definition: KDChartPlotterDiagramCompressor.h:45
KDChart::PlotterDiagramCompressor::Iterator::operator-=
Iterator & operator-=(int value)
Definition: KDChartPlotterDiagramCompressor.cpp:383
KDChart::PlotterDiagramCompressor::begin
Iterator begin(int dataSet)
Definition: KDChartPlotterDiagramCompressor.cpp:926
KDChart::PlotterDiagramCompressor::data
DataPoint data(const CachePosition &pos) const
Definition: KDChartPlotterDiagramCompressor.cpp:841
KDChart::PlotterDiagramCompressor::Iterator::~Iterator
~Iterator()
Definition: KDChartPlotterDiagramCompressor.cpp:84
KDChart::PlotterDiagramCompressor::DataPoint::DataPoint
DataPoint()
Definition: KDChartPlotterDiagramCompressor.h:48
KDChart::PlotterDiagramCompressor::DataPoint::index
QModelIndex index
Definition: KDChartPlotterDiagramCompressor.h:73
KDChart::PlotterDiagramCompressor::DataPoint
Definition: KDChartPlotterDiagramCompressor.h:46
KDChart::PlotterDiagramCompressor::boundariesChanged
void boundariesChanged()
KDChart::PlotterDiagramCompressor::setMergeRadius
void setMergeRadius(qreal radius)
Definition: KDChartPlotterDiagramCompressor.cpp:860
KDChart
Definition: KDChartAbstractCartesianDiagram.h:30
KDChart::PlotterDiagramCompressor::setCompressionModel
void setCompressionModel(CompressionMode value)
Definition: KDChartPlotterDiagramCompressor.cpp:699
KDChart::PlotterDiagramCompressor::setModel
void setModel(QAbstractItemModel *model)
Definition: KDChartPlotterDiagramCompressor.cpp:821
KDChart::PlotterDiagramCompressor::Iterator::operator++
Iterator & operator++()
Definition: KDChartPlotterDiagramCompressor.cpp:315
KDChart::PlotterDiagramCompressor::DataPoint::key
qreal key
Definition: KDChartPlotterDiagramCompressor.h:70
KDChart::PlotterDiagramCompressor::DataPoint::distance
qreal distance(const DataPoint &other)
Definition: KDChartPlotterDiagramCompressor.h:53
KDChart::PlotterDiagramCompressor::Iterator::operator*
DataPoint operator*()
Definition: KDChartPlotterDiagramCompressor.cpp:389
KDChart::PlotterDiagramCompressor::DataPointVector
QVector< DataPoint > DataPointVector
Definition: KDChartPlotterDiagramCompressor.h:106
KDChart::PlotterDiagramCompressor::Iterator
Definition: KDChartPlotterDiagramCompressor.h:77
KDChart::PlotterDiagramCompressor::Iterator::invalidate
void invalidate()
Definition: KDChartPlotterDiagramCompressor.cpp:409
KDChart::PlotterDiagramCompressor::CachePosition::first
int first
Definition: KDChartPlotterDiagramCompressor.h:117
KDChart::PlotterDiagramCompressor::~PlotterDiagramCompressor
~PlotterDiagramCompressor() override
Definition: KDChartPlotterDiagramCompressor.cpp:795
KDChart::PlotterDiagramCompressor::setForcedDataBoundaries
void setForcedDataBoundaries(const QPair< qreal, qreal > &bounds, Qt::Orientation direction)
Definition: KDChartPlotterDiagramCompressor.cpp:801
KDChart::PlotterDiagramCompressor::DISTANCE
@ DISTANCE
Definition: KDChartPlotterDiagramCompressor.h:45
KDChart::PlotterDiagramCompressor::CachePosition::CachePosition
CachePosition(int first, int second)
Definition: KDChartPlotterDiagramCompressor.h:113
KDChart::PlotterDiagramCompressor::CachePosition
Definition: KDChartPlotterDiagramCompressor.h:107
KDChart::PlotterDiagramCompressor::datasetCount
int datasetCount() const
Definition: KDChartPlotterDiagramCompressor.cpp:903
KDChart::PlotterDiagramCompressor::dataBoundaries
QPair< QPointF, QPointF > dataBoundaries() const
Definition: KDChartPlotterDiagramCompressor.cpp:910
KDChart::PlotterDiagramCompressor::rowCount
int rowCount() const
Definition: KDChartPlotterDiagramCompressor.cpp:893
KDChart::PlotterDiagramCompressor::cleanCache
void cleanCache()
Definition: KDChartPlotterDiagramCompressor.cpp:898
KDChart::PlotterDiagramCompressor::CompressionMode
CompressionMode
Definition: KDChartPlotterDiagramCompressor.h:45
KDChart::PlotterDiagramCompressor::Iterator::operator+=
Iterator & operator+=(int value)
Definition: KDChartPlotterDiagramCompressor.cpp:363
KDChart::PlotterDiagramCompressor::DataPoint::operator!=
bool operator!=(const DataPoint &other)
Definition: KDChartPlotterDiagramCompressor.h:65
KDChart::PlotterDiagramCompressor::PlotterDiagramCompressor
PlotterDiagramCompressor(QObject *parent=0)
Definition: KDChartPlotterDiagramCompressor.cpp:789
KDChart::PlotterDiagramCompressor::setMaxSlopeChange
void setMaxSlopeChange(qreal value)
Definition: KDChartPlotterDiagramCompressor.cpp:870
KDChart::PlotterDiagramCompressor::Iterator::operator--
Iterator & operator--()
Definition: KDChartPlotterDiagramCompressor.cpp:369
KDChart::PlotterDiagramCompressor::model
QAbstractItemModel * model() const
Definition: KDChartPlotterDiagramCompressor.cpp:815
KDChart::PlotterDiagramCompressor::DataPoint::operator==
bool operator==(const DataPoint &other)
Definition: KDChartPlotterDiagramCompressor.h:60
KDChart::PlotterDiagramCompressor::SLOPE
@ SLOPE
Definition: KDChartPlotterDiagramCompressor.h:45
KDChart::PlotterDiagramCompressor::Iterator::isValid
bool isValid() const
Definition: KDChartPlotterDiagramCompressor.cpp:93
QPair
Definition: KDChartWidget.h:35
KDChart::PlotterDiagramCompressor::rowCountChanged
void rowCountChanged()
KDChart::PlotterDiagramCompressor::Iterator::operator==
bool operator==(const Iterator &other) const
Definition: KDChartPlotterDiagramCompressor.cpp:399
KDChart::PlotterDiagramCompressor
Definition: KDChartPlotterDiagramCompressor.h:40
KDChart::PlotterDiagramCompressor::DataPoint::hidden
bool hidden
Definition: KDChartPlotterDiagramCompressor.h:72
KDChart::PlotterDiagramCompressor::setMergeRadiusPercentage
void setMergeRadiusPercentage(qreal radius)
Definition: KDChartPlotterDiagramCompressor.cpp:884
KDChart::PlotterDiagramCompressor::maxSlopeChange
qreal maxSlopeChange() const
Definition: KDChartPlotterDiagramCompressor.cpp:879
KDChart::PlotterDiagramCompressor::CachePosition::operator==
bool operator==(const CachePosition &rhs) const
Definition: KDChartPlotterDiagramCompressor.h:120
QObject
QVector
Definition: KDChartWidget.h:34
KDChart::PlotterDiagramCompressor::CachePosition::second
int second
Definition: KDChartPlotterDiagramCompressor.h:118
KDChart::PlotterDiagramCompressor::Iterator::operator!=
bool operator!=(const Iterator &other) const
Definition: KDChartPlotterDiagramCompressor.cpp:404
KDChart::PlotterDiagramCompressor::Iterator::Iterator
Iterator(int dataSet, PlotterDiagramCompressor *parent)
Definition: KDChartPlotterDiagramCompressor.cpp:38
d
#define d
Definition: KDChartAbstractCartesianDiagram.cpp:54
KDChart::PlotterDiagramCompressor::end
Iterator end(int dataSet)
Definition: KDChartPlotterDiagramCompressor.cpp:932

Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/

https://www.kdab.com/development-resources/qt-tools/kd-chart/