summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/surfacechart/chartmodifier.cpp8
-rw-r--r--src/datavisualization/data/qitemmodelsurfacedatamapping.cpp12
-rw-r--r--src/datavisualization/data/qsurfacedataproxy.cpp4
-rw-r--r--src/datavisualization/data/surfaceitemmodelhandler.cpp42
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp26
5 files changed, 60 insertions, 32 deletions
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp
index b1c6a71f..94f97b5f 100644
--- a/examples/surfacechart/chartmodifier.cpp
+++ b/examples/surfacechart/chartmodifier.cpp
@@ -110,11 +110,11 @@ void ChartModifier::togglePlane(bool enable)
}
m_chart->axisX()->setSegmentCount(4);
- m_chart->axisX()->setRange(2.0, 7.0);
+ m_chart->axisX()->setRange(0.0, 10.0);
m_chart->axisY()->setRange(0.0, 2.0);
- m_chart->axisZ()->setRange(2.0, 8.0);
- m_chart->activeDataProxy()->setValueRangeColumns(0.0, qreal(m_xCount - 1));
- m_chart->activeDataProxy()->setValueRangeRows(0.0, qreal(m_zCount - 1));
+ m_chart->axisZ()->setRange(0.0, 10.0);
+ m_chart->activeDataProxy()->setValueRangeColumns(0.0, 10.0);
+ m_chart->activeDataProxy()->setValueRangeRows(0.0, 10.0);
m_chart->axisX()->setLabelFormat("%.2f");
m_chart->axisZ()->setLabelFormat("%.2f");
diff --git a/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp b/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
index 2fd66b30..27df0309 100644
--- a/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
+++ b/src/datavisualization/data/qitemmodelsurfacedatamapping.cpp
@@ -103,14 +103,16 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE
* \qmlproperty list SurfaceDataMapping::autoRowCategories
* When set to true, the mapping ignores any explicitly set row categories
* and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
+ * data from model is resolved. Proxy minimum and maximum row values are also
+ * autogenerated from data when this is set to true. Defaults to true.
*/
/*!
* \qmlproperty list SurfaceDataMapping::autoColumnCategories
* When set to true, the mapping ignores any explicitly set column categories
* and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
+ * data from model is resolved. Proxy minimum and maximum column values are also
+ * autogenerated from data when this is set to true. Defaults to true.
*/
/*!
@@ -291,7 +293,8 @@ bool QItemModelSurfaceDataMapping::useModelCategories() const
*
* When set to true, the mapping ignores any explicitly set row categories
* and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
+ * data from model is resolved. Proxy minimum and maximum row values are also
+ * autogenerated from data when this is set to true. Defaults to true.
*/
void QItemModelSurfaceDataMapping::setAutoRowCategories(bool enable)
{
@@ -311,7 +314,8 @@ bool QItemModelSurfaceDataMapping::autoRowCategories() const
*
* When set to true, the mapping ignores any explicitly set column categories
* and overwrites them with automatically generated ones whenever the
- * data from model is resolved. Defaults to true.
+ * data from model is resolved. Proxy minimum and maximum column values are also
+ * autogenerated from data when this is set to true. Defaults to true.
*/
void QItemModelSurfaceDataMapping::setAutoColumnCategories(bool enable)
{
diff --git a/src/datavisualization/data/qsurfacedataproxy.cpp b/src/datavisualization/data/qsurfacedataproxy.cpp
index 5ec5f05d..198fcd6c 100644
--- a/src/datavisualization/data/qsurfacedataproxy.cpp
+++ b/src/datavisualization/data/qsurfacedataproxy.cpp
@@ -237,9 +237,9 @@ QSurfaceDataProxyPrivate::QSurfaceDataProxyPrivate(QSurfaceDataProxy *q)
: QAbstractDataProxyPrivate(q, QAbstractDataProxy::DataTypeSurface),
m_dataArray(new QSurfaceDataArray),
m_minValueRows(0.0),
- m_maxValueRows(0.0),
+ m_maxValueRows(10.0), // Same as valueaxis default
m_minValueColumns(0.0),
- m_maxValueColumns(0.0)
+ m_maxValueColumns(10.0) // Same as valueaxis default
{
m_itemLabelFormat = QStringLiteral("@yLabel (@xLabel, @zLabel)");
}
diff --git a/src/datavisualization/data/surfaceitemmodelhandler.cpp b/src/datavisualization/data/surfaceitemmodelhandler.cpp
index 124fe640..10d86695 100644
--- a/src/datavisualization/data/surfaceitemmodelhandler.cpp
+++ b/src/datavisualization/data/surfaceitemmodelhandler.cpp
@@ -67,6 +67,24 @@ void SurfaceItemModelHandler::resolveModel()
bool generateRows = mapping->autoRowCategories();
bool generateColumns = mapping->autoColumnCategories();
+ float minRowValue = 0.0f;
+ float maxRowValue = 0.0f;
+ float minColumnValue = 0.0f;
+ float maxColumnValue = 0.0f;
+ // Init min/max values
+ if ((generateRows || generateColumns) && rowCount > 0 && columnCount > 0) {
+ QModelIndex index = m_itemModel->index(0, 0);
+ QString rowRoleStr = index.data(rowRole).toString();
+ QString columnRoleStr = index.data(columnRole).toString();
+ if (generateRows) {
+ minRowValue = rowRoleStr.toFloat();
+ maxRowValue = minRowValue;
+ }
+ if (generateRows) {
+ minColumnValue = columnRoleStr.toFloat();
+ maxColumnValue = minColumnValue;
+ }
+ }
QStringList rowList;
QStringList columnList;
// For detecting duplicates in categories generation, using QHashes should be faster than
@@ -86,23 +104,39 @@ void SurfaceItemModelHandler::resolveModel()
if (generateRows && !rowListHash.value(rowRoleStr, false)) {
rowListHash.insert(rowRoleStr, true);
rowList << rowRoleStr;
+ float rowValue = rowRoleStr.toFloat();
+ if (minRowValue > rowValue)
+ minRowValue = rowValue;
+ if (maxRowValue < rowValue)
+ maxRowValue = rowValue;
}
if (generateColumns && !columnListHash.value(columnRoleStr, false)) {
columnListHash.insert(columnRoleStr, true);
columnList << columnRoleStr;
+ float columnValue = columnRoleStr.toFloat();
+ if (minColumnValue > columnValue)
+ minColumnValue = columnValue;
+ if (maxColumnValue < columnValue)
+ maxColumnValue = columnValue;
}
}
}
- if (generateRows)
+ if (generateRows) {
mapping->dptr()->m_rowCategories = rowList;
- else
+ m_proxy->setMinValueRows(minRowValue);
+ m_proxy->setMaxValueRows(maxRowValue);
+ } else {
rowList = mapping->rowCategories();
+ }
- if (generateColumns)
+ if (generateColumns) {
mapping->dptr()->m_columnCategories = columnList;
- else
+ m_proxy->setMinValueColumns(minColumnValue);
+ m_proxy->setMaxValueColumns(maxColumnValue);
+ } else {
columnList = mapping->columnCategories();
+ }
// Create new data array from itemValueMap
foreach (QString rowKey, rowList) {
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 64e18c27..251810a4 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -236,26 +236,16 @@ QRect Surface3DRenderer::calculateSampleRect(QSurfaceDataProxy *dataProxy)
{
QRect sampleSpace(0, 0, dataProxy->columnCount(), dataProxy->rowCount());
- if (dataProxy->minValueColumns() == 0.0 && dataProxy->maxValueColumns() == 0.0 &&
- dataProxy->minValueRows() == 0.0 && dataProxy->maxValueRows() == 0.0) {
- // The user hasn't set anything, return default
- return sampleSpace;
+ // TODO: Calculate the actual sample rect, for now it is required data and axis ranges are the same
+ if (m_axisCacheX.min() != dataProxy->minValueColumns() || m_axisCacheX.max() != dataProxy->maxValueColumns()
+ || m_axisCacheZ.min() != dataProxy->minValueRows() || m_axisCacheZ.max() != dataProxy->maxValueRows()) {
+ qWarning() << "Warning: Technology preview doesn't support axis ranges that are different from data ranges -"
+ << m_axisCacheX.min() << dataProxy->minValueColumns() << "-"
+ << m_axisCacheX.max() << dataProxy->maxValueColumns() << "-"
+ << m_axisCacheZ.min() << dataProxy->minValueRows() << "-"
+ << m_axisCacheZ.max() << dataProxy->maxValueRows();
}
- qreal valueWidth = dataProxy->maxValueColumns() - dataProxy->minValueColumns();
- qreal columnBeginDiff = qAbs(dataProxy->minValueColumns() - m_axisCacheX.min());
- sampleSpace.setX(columnBeginDiff / valueWidth * dataProxy->columnCount());
-
- qreal columnEndPos = (m_axisCacheX.max() - dataProxy->minValueColumns()) / valueWidth * dataProxy->columnCount();
- sampleSpace.setWidth(columnEndPos - sampleSpace.x());
-
- qreal valueHeight = dataProxy->maxValueRows() - dataProxy->minValueRows();
- qreal rowBeginDiff = qAbs(dataProxy->minValueRows() - m_axisCacheZ.min());
- sampleSpace.setY(rowBeginDiff / valueHeight * dataProxy->rowCount());
-
- qreal rowEndPos = (m_axisCacheZ.max() - dataProxy->minValueRows()) / valueHeight * dataProxy->rowCount();
- sampleSpace.setHeight(rowEndPos - sampleSpace.y());
-
return sampleSpace;
}