diff options
author | Tomi Korpipää <tomi.korpipaa@qt.io> | 2016-11-14 11:15:00 +0200 |
---|---|---|
committer | Tomi Korpipää <tomi.korpipaa@qt.io> | 2016-11-14 09:32:13 +0000 |
commit | 87339612d27fab342a01663bf00c15f5e92b3e40 (patch) | |
tree | 6a18b62ef4e1a900467c6737ac818686fbe4707c /src/datavisualization/data/qscatterdataproxy.cpp | |
parent | 90aff7026205d71efde65f1783a06af82e528287 (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.cpp | 25 |
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); |