KChart

KChartAbstractGrid.cpp
1 /*
2  * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved.
3  *
4  * This file is part of the KD Chart library.
5  *
6  * SPDX-License-Identifier: GPL-2.0-or-later
7  */
8 
9 #include "KChartAbstractGrid.h"
10 #include "KChartPaintContext.h"
11 
12 #include "KChartMath_p.h"
13 
14 #include <qglobal.h>
15 
16 
17 using namespace KChart;
18 using namespace std;
19 
20 
21 static qreal _trunc( qreal v )
22 {
23  return (( v > 0.0 ) ? floor( v ) : ceil( v ));
24 }
25 
26 
27 AbstractGrid::AbstractGrid ()
28  : mPlane( nullptr )
29 {
30  // this block left empty intentionally
31 }
32 
33 AbstractGrid::~AbstractGrid()
34 {
35  // this block left empty intentionally
36 }
37 
39 {
40  mCachedRawDataDimensions.clear();
41 }
42 
44 {
45  if ( plane ) {
46  const DataDimensionsList rawDataDimensions( plane->getDataDimensionsList() );
47  // ### this could be dangerous because calculateGrid() looks at some data we are not checking
48  // for changes here.
49  if ( mCachedRawDataDimensions.empty() || ( rawDataDimensions != mCachedRawDataDimensions ) ) {
50  mCachedRawDataDimensions = rawDataDimensions;
51  mPlane = plane;
52  mDataDimensions = calculateGrid( rawDataDimensions );
53  }
54  }
55  return mDataDimensions;
56 }
57 
59 {
60  return isBoundariesValid( qMakePair( r.topLeft(), r.bottomRight() ) );
61 }
62 
64 {
65  return isValueValid( b.first.x() ) && isValueValid( b.first.y() ) &&
66  isValueValid( b.second.x() ) && isValueValid( b.second.y() );
67 }
68 
70 {
71  for (int i = 0; i < l.size(); ++i)
72  if ( ! isValueValid( l.at(i).start ) || ! isValueValid( l.at(i).end ) )
73  return false;
74  return true;
75 }
76 
77 bool AbstractGrid::isValueValid(const qreal& r )
78 {
79  return !(ISNAN(r) || ISINF(r));
80 }
81 
83  qreal& start, qreal& end,
84  qreal stepWidth,
85  bool adjustLower, bool adjustUpper )
86 {
87  const qreal startAdjust = ( start >= 0.0 ) ? 0.0 : -1.0;
88  const qreal endAdjust = ( end >= 0.0 ) ? 1.0 : 0.0;
89  if ( adjustLower && !qFuzzyIsNull( fmod( start, stepWidth ) ) )
90  start = stepWidth * (_trunc( start / stepWidth ) + startAdjust);
91  if ( adjustUpper && !qFuzzyIsNull( fmod( end, stepWidth ) ) )
92  end = stepWidth * (_trunc( end / stepWidth ) + endAdjust);
93 }
94 
96  const DataDimension& dim,
97  bool adjustLower, bool adjustUpper )
98 {
99  DataDimension result( dim );
101  result.start, result.end,
102  result.stepWidth,
103  adjustLower, adjustUpper );
104  return result;
105 }
DataDimensionsList updateData(AbstractCoordinatePlane *plane)
Returns the cached result of data calculation.
static bool isValueValid(const qreal &r)
Checks if r is neither NaN nor infinity.
static void adjustLowerUpperRange(qreal &start, qreal &end, qreal stepWidth, bool adjustLower, bool adjustUpper)
Adjusts start and/or end so that they are a multiple of stepWidth.
Q_SCRIPTABLE Q_NOREPLY void start()
Base class common for all coordinate planes, CartesianCoordinatePlane, PolarCoordinatePlane,...
bool empty() const const
int size() const const
QPointF topLeft() const const
QPointF bottomRight() const const
const T & at(int i) const const
void setNeedRecalculate()
Causes grid to be recalculated upon the next call of updateData().
static bool isBoundariesValid(const QRectF &r)
Checks whether both coordinates of r are valid according to isValueValid.
void clear()
static const DataDimension adjustedLowerUpperRange(const DataDimension &dim, bool adjustLower, bool adjustUpper)
Adjusts dim so that dim.start and/or dim.end are a multiple of dim.stepWidth.
Helper class for one dimension of data, e.g.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon May 8 2023 03:59:29 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.