diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-18 09:50:40 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-18 10:08:26 +0300 |
commit | 03b9a7b753a255231bedad6a4ad8adcdd09ed842 (patch) | |
tree | 1900c2aec3400622f1a0d9e4bce73082ff943487 | |
parent | 585e66106203dd011ec0777e64d6e4cfc6e9c5ed (diff) |
Remove buggy code for adjusting surface samplespace.
For now we require data range and axis range to be the same.
Change-Id: Ie26a0728f9d6c4a014000ea8ccf71221f799899a
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
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; } |