summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data/qscatterdataproxy.cpp
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@qt.io>2016-11-14 11:15:00 +0200
committerTomi Korpipää <tomi.korpipaa@qt.io>2016-11-14 09:32:13 +0000
commit87339612d27fab342a01663bf00c15f5e92b3e40 (patch)
tree6a18b62ef4e1a900467c6737ac818686fbe4707c /src/datavisualization/data/qscatterdataproxy.cpp
parent90aff7026205d71efde65f1783a06af82e528287 (diff)
Ensure that the formatter is respected for zero and negative values
This also ensures that INF and NaN numbers are also handled correctly Task-number: QTBUG-57075 Change-Id: I8db693cb28303bc13f936c818147fe31b7ee1199 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
Diffstat (limited to 'src/datavisualization/data/qscatterdataproxy.cpp')
-rw-r--r--src/datavisualization/data/qscatterdataproxy.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/datavisualization/data/qscatterdataproxy.cpp b/src/datavisualization/data/qscatterdataproxy.cpp
index 167c074a..1fe5b3fc 100644
--- a/src/datavisualization/data/qscatterdataproxy.cpp
+++ b/src/datavisualization/data/qscatterdataproxy.cpp
@@ -29,6 +29,7 @@
#include "qscatterdataproxy_p.h"
#include "qscatter3dseries_p.h"
+#include "qabstract3daxis_p.h"
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -366,7 +367,9 @@ void QScatterDataProxyPrivate::removeItems(int index, int removeCount)
m_dataArray->remove(index, removeCount);
}
-void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues) const
+void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues,
+ QAbstract3DAxis *axisX, QAbstract3DAxis *axisY,
+ QAbstract3DAxis *axisZ) const
{
if (m_dataArray->isEmpty())
return;
@@ -385,19 +388,25 @@ void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV
const QVector3D &pos = m_dataArray->at(i).position();
float value = pos.x();
- if (minX > value)
+ if (qIsNaN(value) || qIsInf(value))
+ continue;
+ if (isValidValue(minX, value, axisX))
minX = value;
if (maxX < value)
maxX = value;
value = pos.y();
- if (minY > value)
+ if (qIsNaN(value) || qIsInf(value))
+ continue;
+ if (isValidValue(minY, value, axisY))
minY = value;
if (maxY < value)
maxY = value;
value = pos.z();
- if (minZ > value)
+ if (qIsNaN(value) || qIsInf(value))
+ continue;
+ if (isValidValue(minZ, value, axisZ))
minZ = value;
if (maxZ < value)
maxZ = value;
@@ -413,6 +422,14 @@ void QScatterDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV
maxValues.setZ(maxZ);
}
+bool QScatterDataProxyPrivate::isValidValue(float axisValue, float value,
+ QAbstract3DAxis *axis) const
+{
+ return (axisValue > value && (value > 0.0f
+ || (value == 0.0f && axis->d_ptr->allowZero())
+ || (value < 0.0f && axis->d_ptr->allowNegatives())));
+}
+
void QScatterDataProxyPrivate::setSeries(QAbstract3DSeries *series)
{
QAbstractDataProxyPrivate::setSeries(series);