diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-26 11:16:12 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-27 08:05:12 +0300 |
commit | f2a5c09144f17f3240ae6a7e7b48237f1b234d9b (patch) | |
tree | 28f40212cd228f66277e8db84885ddef0ebb6c5a /examples/surfacechart | |
parent | b776b6d3aa287b973c9346736badc6181e50cbc7 (diff) |
Allow resetting with existing array for surface
Improves performance when doing stuff like resetting image data.
Task-number: QTRD-2335
Change-Id: I9e8ce49fd520b67125305a7614afc550b2244169
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'examples/surfacechart')
-rw-r--r-- | examples/surfacechart/chartmodifier.cpp | 47 | ||||
-rw-r--r-- | examples/surfacechart/chartmodifier.h | 4 |
2 files changed, 42 insertions, 9 deletions
diff --git a/examples/surfacechart/chartmodifier.cpp b/examples/surfacechart/chartmodifier.cpp index 67c523ef..1d791f89 100644 --- a/examples/surfacechart/chartmodifier.cpp +++ b/examples/surfacechart/chartmodifier.cpp @@ -26,6 +26,8 @@ QT_DATAVISUALIZATION_USE_NAMESPACE +//#define JITTER_PLANE + ChartModifier::ChartModifier(Q3DSurface *chart) : m_chart(chart), m_gridSliderX(0), @@ -41,13 +43,16 @@ ChartModifier::ChartModifier(Q3DSurface *chart) m_rangeX(16.0), m_rangeZ(16.0), m_minX(-8.0), - m_minZ(-8.0) + m_minZ(-8.0), + m_planeArray(0) { m_chart->setAxisX(new Q3DValueAxis); m_chart->setAxisY(new Q3DValueAxis); m_chart->setAxisZ(new Q3DValueAxis); m_chart->axisX()->setRange(m_minX, m_minX + m_rangeX); m_chart->axisZ()->setRange(m_minZ, m_minZ + m_rangeZ); + + connect(&m_timer, &QTimer::timeout, this, &ChartModifier::timeout); } ChartModifier::~ChartModifier() @@ -105,24 +110,33 @@ void ChartModifier::togglePlane(bool enable) qDebug() << "ChartModifier::togglePlane " << enable; if (enable) { - QSurfaceDataArray *dataArray = new QSurfaceDataArray; + m_planeArray = new QSurfaceDataArray; + +#ifdef JITTER_PLANE + m_timer.start(0); +#endif + m_chart->axisY()->setRange(0.0, 1.0); + m_chart->axisX()->setLabelFormat("%.2f"); + m_chart->axisZ()->setLabelFormat("%.2f"); + qreal y = 1.0 / (qreal(m_zCount - 1) + qreal(m_xCount - 1)); - dataArray->reserve(m_zCount); + m_planeArray->reserve(m_zCount); for (int i = 0; i < m_zCount; i++) { QSurfaceDataRow *newRow = new QSurfaceDataRow(m_xCount); for (int j = 0; j < m_xCount; j++) (*newRow)[j] = (i + j) * y; - *dataArray << newRow; + *m_planeArray << newRow; } - m_chart->axisY()->setRange(0.0, 1.0); - m_chart->axisX()->setLabelFormat("%.2f"); - m_chart->axisZ()->setLabelFormat("%.2f"); - - resetArrayAndSliders(dataArray, -10.0, 10.0, -10.0, 20.0); + resetArrayAndSliders(m_planeArray, -10.0, 10.0, -10.0, 20.0); m_activeSample = ChartModifier::Plane; } +#ifdef JITTER_PLANE + else { + m_timer.stop(); + } +#endif } void ChartModifier::setHeightMapData(bool enable) @@ -247,6 +261,21 @@ void ChartModifier::changeTheme(int theme) m_chart->setTheme((QDataVis::ColorTheme)theme); } +void ChartModifier::timeout() +{ + int rows = m_planeArray->size(); + int columns = m_planeArray->at(0)->size(); + + // Induce minor random jitter to the existing plane array + for (int i = 0; i < rows; i++) { + for (int j = 0; j < columns; j++) + (*m_planeArray->at(i))[j] = m_planeArray->at(i)->at(j) * ((qreal((rand() % 10) + 4) / 1000.0) + 0.99) + 0.001; + } + + // Reset same array to make it redraw + m_chart->activeDataProxy()->resetArray(m_planeArray); +} + void ChartModifier::resetArrayAndSliders(QSurfaceDataArray *array, qreal minZ, qreal maxZ, qreal minX, qreal maxX) { m_axisMinSliderX->setValue(minX); diff --git a/examples/surfacechart/chartmodifier.h b/examples/surfacechart/chartmodifier.h index 61d97cb0..ab27d269 100644 --- a/examples/surfacechart/chartmodifier.h +++ b/examples/surfacechart/chartmodifier.h @@ -22,6 +22,7 @@ #include <QtDataVisualization/Q3DSurface> #include <QtDataVisualization/QSurfaceDataProxy> #include <QSlider> +#include <QTimer> using namespace QtDataVisualization; @@ -65,6 +66,7 @@ public slots: void changeShadowQuality(int quality); void changeTheme(int theme); void changeSelectionMode(int mode); + void timeout(); private: void resetArrayAndSliders(QSurfaceDataArray *array, qreal minZ, qreal maxZ, qreal minX, @@ -86,6 +88,8 @@ private: qreal m_rangeZ; qreal m_minX; qreal m_minZ; + QTimer m_timer; + QSurfaceDataArray *m_planeArray; }; #endif // CHARTMODIFIER_H |