summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/data
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-25 12:19:18 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-25 14:22:32 +0200
commite029d0ea1d486dd3dbbfa4519a2125da202f22e4 (patch)
treefc9f87f637a9adcca5a555355d96717d43eddc77 /src/datavisualization/data
parente7e01ec065d3874d28e9e28d213783c4275d8813 (diff)
Change qreals to floats
+ Fix default axes to sensible + Fix some rounding errors in surface creation Task-number: QTRD-2622 Change-Id: I44450efc1e77ac8d8dbefc75814345949b8fb1f1 Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r--src/datavisualization/data/baritemmodelhandler.cpp2
-rw-r--r--src/datavisualization/data/barrenderitem_p.h8
-rw-r--r--src/datavisualization/data/qbardataitem.cpp8
-rw-r--r--src/datavisualization/data/qbardataitem.h8
-rw-r--r--src/datavisualization/data/qbardataproxy.cpp2
-rw-r--r--src/datavisualization/data/qheightmapsurfacedataproxy.cpp74
-rw-r--r--src/datavisualization/data/qscatterdataitem.cpp4
-rw-r--r--src/datavisualization/data/qscatterdataitem.h7
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.cpp6
-rw-r--r--src/datavisualization/data/scatterrenderitem_p.h7
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler.cpp2
11 files changed, 81 insertions, 47 deletions
diff --git a/src/datavisualization/data/baritemmodelhandler.cpp b/src/datavisualization/data/baritemmodelhandler.cpp
index f7611668..cbe19c43 100644
--- a/src/datavisualization/data/baritemmodelhandler.cpp
+++ b/src/datavisualization/data/baritemmodelhandler.cpp
@@ -92,7 +92,7 @@ void BarItemModelHandler::resolveModel()
QHash<QString, bool> columnListHash;
// Sort values into rows and columns
- typedef QHash<QString, qreal> ColumnValueMap;
+ typedef QHash<QString, float> ColumnValueMap;
QHash <QString, ColumnValueMap> itemValueMap;
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < columnCount; j++) {
diff --git a/src/datavisualization/data/barrenderitem_p.h b/src/datavisualization/data/barrenderitem_p.h
index 6cd2b0fa..a837ff2c 100644
--- a/src/datavisualization/data/barrenderitem_p.h
+++ b/src/datavisualization/data/barrenderitem_p.h
@@ -47,8 +47,8 @@ public:
inline const QPoint &position() const { return m_position; }
// Actual cached data value of the bar (needed to trigger label reformats)
- inline void setValue(qreal value);
- inline qreal value() const { return m_value; }
+ inline void setValue(float value);
+ inline float value() const { return m_value; }
// Normalized bar height
inline void setHeight(GLfloat height) { m_height = height; }
@@ -62,7 +62,7 @@ public:
QString &sliceLabel(); // Formats label if not previously formatted
protected:
- qreal m_value;
+ float m_value;
QPoint m_position; // x = row, y = column
GLfloat m_height;
QString m_sliceLabel;
@@ -71,7 +71,7 @@ protected:
friend class QBarDataItem;
};
-void BarRenderItem::setValue(qreal value)
+void BarRenderItem::setValue(float value)
{
m_value = value;
// Force reformatting on next access by setting label string to null string
diff --git a/src/datavisualization/data/qbardataitem.cpp b/src/datavisualization/data/qbardataitem.cpp
index a474d785..e564bd5d 100644
--- a/src/datavisualization/data/qbardataitem.cpp
+++ b/src/datavisualization/data/qbardataitem.cpp
@@ -37,14 +37,14 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
*/
QBarDataItem::QBarDataItem()
: d_ptr(0), // private data doesn't exist by default (optimization)
- m_value(0.0)
+ m_value(0.0f)
{
}
/*!
* Constructs QBarDataItem with \a value.
*/
-QBarDataItem::QBarDataItem(qreal value)
+QBarDataItem::QBarDataItem(float value)
: d_ptr(0),
m_value(value)
{
@@ -81,12 +81,12 @@ QBarDataItem &QBarDataItem::operator=(const QBarDataItem &other)
}
/*!
- * \fn void QBarDataItem::setValue(qreal value)
+ * \fn void QBarDataItem::setValue(float value)
* Sets \a value to this data item.
*/
/*!
- * \fn qreal QBarDataItem::value() const
+ * \fn float QBarDataItem::value() const
* \return value of this data item.
*/
diff --git a/src/datavisualization/data/qbardataitem.h b/src/datavisualization/data/qbardataitem.h
index 68bbcedf..f596b16b 100644
--- a/src/datavisualization/data/qbardataitem.h
+++ b/src/datavisualization/data/qbardataitem.h
@@ -29,14 +29,14 @@ class QT_DATAVISUALIZATION_EXPORT QBarDataItem
{
public:
QBarDataItem();
- QBarDataItem(qreal value);
+ QBarDataItem(float value);
QBarDataItem(const QBarDataItem &other);
~QBarDataItem();
QBarDataItem &operator=(const QBarDataItem &other);
- void setValue(qreal value) { m_value = value; }
- qreal value() const { return m_value; }
+ void setValue(float value) { m_value = value; }
+ float value() const { return m_value; }
// TODO Set color, label format, ...?
@@ -46,7 +46,7 @@ protected:
QBarDataItemPrivate *d_ptr;
private:
- qreal m_value;
+ float m_value;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qbardataproxy.cpp b/src/datavisualization/data/qbardataproxy.cpp
index d22c34b5..88c08556 100644
--- a/src/datavisualization/data/qbardataproxy.cpp
+++ b/src/datavisualization/data/qbardataproxy.cpp
@@ -683,7 +683,7 @@ QPair<GLfloat, GLfloat> QBarDataProxyPrivate::limitValues(int startRow, int endR
endColumn = qMin(endColumn, row->size() - 1);
for (int j = startColumn; j <= endColumn; j++) {
const QBarDataItem &item = m_dataArray->at(i)->at(j);
- qreal itemValue = item.value();
+ float itemValue = item.value();
if (limits.second < itemValue)
limits.second = itemValue;
if (limits.first > itemValue)
diff --git a/src/datavisualization/data/qheightmapsurfacedataproxy.cpp b/src/datavisualization/data/qheightmapsurfacedataproxy.cpp
index 251ae70a..88ed2f5d 100644
--- a/src/datavisualization/data/qheightmapsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qheightmapsurfacedataproxy.cpp
@@ -90,7 +90,7 @@ const float defaultMaxValue = 10.0f;
*/
/*!
- * \qmlproperty qreal HeightMapSurfaceDataProxy::minXValue
+ * \qmlproperty real HeightMapSurfaceDataProxy::minXValue
*
* The minimum X value for the generated surface points.
* When setting this property the corresponding maximum value is adjusted if necessary,
@@ -98,7 +98,7 @@ const float defaultMaxValue = 10.0f;
*/
/*!
- * \qmlproperty qreal HeightMapSurfaceDataProxy::maxXValue
+ * \qmlproperty real HeightMapSurfaceDataProxy::maxXValue
*
* The maximum X value for the generated surface points.
* When setting this property the corresponding minimum value is adjusted if necessary,
@@ -106,7 +106,7 @@ const float defaultMaxValue = 10.0f;
*/
/*!
- * \qmlproperty qreal HeightMapSurfaceDataProxy::minZValue
+ * \qmlproperty real HeightMapSurfaceDataProxy::minZValue
*
* The minimum Z value for the generated surface points.
* When setting this property the corresponding maximum value is adjusted if necessary,
@@ -114,7 +114,7 @@ const float defaultMaxValue = 10.0f;
*/
/*!
- * \qmlproperty qreal HeightMapSurfaceDataProxy::maxZValue
+ * \qmlproperty real HeightMapSurfaceDataProxy::maxZValue
*
* The maximum Z value for the generated surface points.
* When setting this property the corresponding minimum value is adjusted if necessary,
@@ -338,7 +338,7 @@ void QHeightMapSurfaceDataProxyPrivate::setValueRanges(float minX, float maxX, f
}
if (m_maxXValue != maxX || minX >= maxX) {
if (minX >= maxX) {
- m_maxXValue = minX + 1.0;
+ m_maxXValue = minX + 1.0f;
qWarning() << "Warning: Tried to set invalid range for X value range."
" Range automatically adjusted to a valid one:"
<< minX << "-" << maxX << "-->" << m_minXValue << "-" << m_maxXValue;
@@ -349,7 +349,7 @@ void QHeightMapSurfaceDataProxyPrivate::setValueRanges(float minX, float maxX, f
}
if (m_maxZValue != maxZ || minZ >= maxZ) {
if (minZ >= maxZ) {
- m_maxZValue = minZ + 1.0;
+ m_maxZValue = minZ + 1.0f;
qWarning() << "Warning: Tried to set invalid range for Z value range."
" Range automatically adjusted to a valid one:"
<< minZ << "-" << maxZ << "-->" << m_minZValue << "-" << m_maxZValue;
@@ -367,8 +367,8 @@ void QHeightMapSurfaceDataProxyPrivate::setMinXValue(float min)
{
if (min != m_minXValue) {
if (min >= m_maxXValue) {
- qreal oldMax = m_maxXValue;
- m_maxXValue = min + 1.0;
+ float oldMax = m_maxXValue;
+ m_maxXValue = min + 1.0f;
qWarning() << "Warning: Tried to set minimum X to equal or larger than maximum X for"
" value range. Maximum automatically adjusted to a valid one:"
<< oldMax << "-->" << m_maxXValue;
@@ -384,8 +384,8 @@ void QHeightMapSurfaceDataProxyPrivate::setMaxXValue(float max)
{
if (m_maxXValue != max) {
if (max <= m_minXValue) {
- qreal oldMin = m_minXValue;
- m_minXValue = max - 1.0;
+ float oldMin = m_minXValue;
+ m_minXValue = max - 1.0f;
qWarning() << "Warning: Tried to set maximum X to equal or smaller than minimum X for"
" value range. Minimum automatically adjusted to a valid one:"
<< oldMin << "-->" << m_minXValue;
@@ -401,8 +401,8 @@ void QHeightMapSurfaceDataProxyPrivate::setMinZValue(float min)
{
if (min != m_minZValue) {
if (min >= m_maxZValue) {
- qreal oldMax = m_maxZValue;
- m_maxZValue = min + 1.0;
+ float oldMax = m_maxZValue;
+ m_maxZValue = min + 1.0f;
qWarning() << "Warning: Tried to set minimum Z to equal or larger than maximum Z for"
" value range. Maximum automatically adjusted to a valid one:"
<< oldMax << "-->" << m_maxZValue;
@@ -418,8 +418,8 @@ void QHeightMapSurfaceDataProxyPrivate::setMaxZValue(float max)
{
if (m_maxZValue != max) {
if (max <= m_minZValue) {
- qreal oldMin = m_minZValue;
- m_minZValue = max - 1.0;
+ float oldMin = m_minZValue;
+ m_minZValue = max - 1.0f;
qWarning() << "Warning: Tried to set maximum Z to equal or smaller than minimum Z for"
" value range. Minimum automatically adjusted to a valid one:"
<< oldMin << "-->" << m_minZValue;
@@ -460,26 +460,58 @@ void QHeightMapSurfaceDataProxyPrivate::handlePendingResolve()
float xMul = (m_maxXValue - m_minXValue) / float(imageWidth - 1);
float zMul = (m_maxZValue - m_minZValue) / float(imageHeight - 1);
+ // Last row and column are explicitly set to max values, as relying
+ // on multiplier can cause rounding errors, resulting in the value being
+ // slightly over the specified maximum, which in turn can lead to it not
+ // getting rendered.
+ int lastRow = imageHeight - 1;
+ int lastCol = imageWidth - 1;
+
if (heightImage.isGrayscale()) {
// Grayscale, it's enough to read Red byte
for (int i = 0; i < imageHeight; i++, bitCount -= widthBits) {
QSurfaceDataRow &newRow = *dataArray->at(i);
- for (int j = 0; j < imageWidth; j++)
- newRow[j].setPosition(QVector3D((float(j) * xMul) + m_minXValue, float(bits[bitCount + (j * 4)]),
- (float(i) * zMul) + m_minZValue));
+ float zVal;
+ if (i == lastRow)
+ zVal = m_maxZValue;
+ else
+ zVal = (float(i) * zMul) + m_minZValue;
+ int j = 0;
+ for (; j < lastCol; j++)
+ newRow[j].setPosition(QVector3D((float(j) * xMul) + m_minXValue,
+ float(bits[bitCount + (j * 4)]),
+ zVal));
+ newRow[j].setPosition(QVector3D(m_maxXValue,
+ float(bits[bitCount + (j * 4)]),
+ zVal));
}
} else {
// Not grayscale, we'll need to calculate height from RGB
for (int i = 0; i < imageHeight; i++, bitCount -= widthBits) {
QSurfaceDataRow &newRow = *dataArray->at(i);
- for (int j = 0; j < imageWidth; j++) {
- int nextpixel = j * 4;
+ float zVal;
+ if (i == lastRow)
+ zVal = m_maxZValue;
+ else
+ zVal = (float(i) * zMul) + m_minZValue;
+ int j = 0;
+ int nextpixel = 0;
+ for (; j < lastCol; j++) {
+ nextpixel = j * 4;
height = (float(bits[bitCount + nextpixel])
+ float(bits[1 + bitCount + nextpixel])
+ float(bits[2 + bitCount + nextpixel]));
- newRow[j].setPosition(QVector3D((float(j) * xMul) + m_minXValue, height / 3.0f,
- (float(i) * zMul) + m_minZValue));
+ newRow[j].setPosition(QVector3D((float(j) * xMul) + m_minXValue,
+ height / 3.0f,
+ zVal));
}
+ nextpixel = j * 4;
+ height = (float(bits[bitCount + nextpixel])
+ + float(bits[1 + bitCount + nextpixel])
+ + float(bits[2 + bitCount + nextpixel]));
+ newRow[j].setPosition(QVector3D(m_maxXValue,
+ height / 3.0f,
+ zVal));
}
}
diff --git a/src/datavisualization/data/qscatterdataitem.cpp b/src/datavisualization/data/qscatterdataitem.cpp
index 5c6f1f66..480bc13b 100644
--- a/src/datavisualization/data/qscatterdataitem.cpp
+++ b/src/datavisualization/data/qscatterdataitem.cpp
@@ -123,12 +123,12 @@ QScatterDataItem &QScatterDataItem::operator=(const QScatterDataItem &other)
* \return the Z component of the position of this data item.
*/
-//void QScatterDataItem::setSize(qreal size)
+//void QScatterDataItem::setSize(float size)
//{
// m_size = size;
//}
-//const qreal &QScatterDataItem::size() const
+//const float &QScatterDataItem::size() const
//{
// return m_size;
//}
diff --git a/src/datavisualization/data/qscatterdataitem.h b/src/datavisualization/data/qscatterdataitem.h
index 29154259..ab6007db 100644
--- a/src/datavisualization/data/qscatterdataitem.h
+++ b/src/datavisualization/data/qscatterdataitem.h
@@ -45,8 +45,9 @@ public:
inline float y() const { return m_position.y(); }
inline float z() const { return m_position.z(); }
- //void setSize(qreal size);
- //qreal size() const;
+ // TODO: Will we ever support item specific size? If not, remove.
+ //void setSize(float size);
+ //float size() const;
protected:
virtual void createExtraData();
@@ -55,7 +56,7 @@ protected:
private:
QVector3D m_position;
- //qreal m_size;
+ //float m_size;
};
QT_DATAVISUALIZATION_END_NAMESPACE
diff --git a/src/datavisualization/data/qsurfacedataproxy.cpp b/src/datavisualization/data/qsurfacedataproxy.cpp
index 8db082c7..b55fea97 100644
--- a/src/datavisualization/data/qsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qsurfacedataproxy.cpp
@@ -226,8 +226,8 @@ QSurfaceDataProxy *QSurfaceDataProxyPrivate::qptr()
void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxValues) const
{
- qreal min = 0.0;
- qreal max = 0.0;
+ float min = 0.0f;
+ float max = 0.0f;
int rows = m_dataArray->size();
int columns = 0;
@@ -243,7 +243,7 @@ void QSurfaceDataProxyPrivate::limitValues(QVector3D &minValues, QVector3D &maxV
QSurfaceDataRow *row = m_dataArray->at(i);
if (row) {
for (int j = 0; j < columns; j++) {
- qreal itemValue = m_dataArray->at(i)->at(j).y();
+ float itemValue = m_dataArray->at(i)->at(j).y();
if (min > itemValue)
min = itemValue;
if (max < itemValue)
diff --git a/src/datavisualization/data/scatterrenderitem_p.h b/src/datavisualization/data/scatterrenderitem_p.h
index 58e91e96..5a97c1e9 100644
--- a/src/datavisualization/data/scatterrenderitem_p.h
+++ b/src/datavisualization/data/scatterrenderitem_p.h
@@ -48,13 +48,14 @@ public:
inline bool isVisible() const { return m_visible; }
inline void setVisible(bool visible) { m_visible = visible; }
- //inline void setSize(qreal size);
- //inline qreal size() const { return m_size; }
+ // TODO: Will we ever support item specific size? If not, remove.
+ //inline void setSize(float size);
+ //inline float size() const { return m_size; }
protected:
QVector3D m_position;
bool m_visible;
- //qreal m_size; // TODO in case we need a fourth variable that adjusts scatter item size
+ //float m_size; // TODO in case we need a fourth variable that adjusts scatter item size
friend class QScatterDataItem;
};
diff --git a/src/datavisualization/data/surfaceitemmodelhandler.cpp b/src/datavisualization/data/surfaceitemmodelhandler.cpp
index 70482162..e602dedc 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler.cpp
+++ b/src/datavisualization/data/surfaceitemmodelhandler.cpp
@@ -89,7 +89,7 @@ void SurfaceItemModelHandler::resolveModel()
QHash<QString, bool> columnListHash;
// Sort values into rows and columns
- typedef QHash<QString, qreal> ColumnValueMap;
+ typedef QHash<QString, float> ColumnValueMap;
QHash <QString, ColumnValueMap> itemValueMap;
for (int i = 0; i < rowCount; i++) {
for (int j = 0; j < columnCount; j++) {