diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-28 08:19:37 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-29 09:53:48 +0200 |
commit | 527113321ff103835b89543c5d6f670f55b5b0d5 (patch) | |
tree | 01b242ef7b1f30a414b718f99f155f19235951bd /src/datavisualization/engine/seriesrendercache.cpp | |
parent | 85dda87df2d420dc53959e549d24c4b09ce93d57 (diff) |
Move series specific visual elements to series, part 1
Meshes moved to series.
Task-number: QTRD-2557
Change-Id: I80050e413faf3bc942eb5a5627a66747de5805d8
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/seriesrendercache.cpp')
-rw-r--r-- | src/datavisualization/engine/seriesrendercache.cpp | 91 |
1 files changed, 87 insertions, 4 deletions
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp index 53bc97a1..7a4c0a14 100644 --- a/src/datavisualization/engine/seriesrendercache.cpp +++ b/src/datavisualization/engine/seriesrendercache.cpp @@ -17,11 +17,17 @@ ****************************************************************************/ #include "seriesrendercache_p.h" +#include "objecthelper_p.h" +#include "abstract3drenderer_p.h" QT_DATAVISUALIZATION_BEGIN_NAMESPACE +const QString smoothString(QStringLiteral("Smooth")); + SeriesRenderCache::SeriesRenderCache() - : m_series(0) + : m_series(0), + m_object(0), + m_mesh(QAbstract3DSeries::MeshCube) { } @@ -29,12 +35,89 @@ SeriesRenderCache::~SeriesRenderCache() { } -void SeriesRenderCache::populate(QAbstract3DSeries *series) +void SeriesRenderCache::populate(QAbstract3DSeries *series, Abstract3DRenderer *renderer) { Q_ASSERT(series); - m_series = series; - m_itemLabelFormat = series->itemLabelFormat(); + bool seriesChanged = false; + + if (m_series != series) { + m_series = series; + seriesChanged = true; + } + + QAbstract3DSeriesChangeBitField &changeTracker = series->d_ptr->m_changeTracker; + + if (seriesChanged || changeTracker.itemLabelFormatChanged) { + m_itemLabelFormat = series->itemLabelFormat(); + changeTracker.itemLabelFormatChanged = false; + } + + if (seriesChanged || changeTracker.meshChanged || changeTracker.meshSmoothChanged + || changeTracker.userDefinedMeshChanged) { + m_mesh = series->mesh(); + changeTracker.meshChanged = false; + changeTracker.meshSmoothChanged = false; + changeTracker.userDefinedMeshChanged = false; + + QString meshFileName; + + // Compose mesh filename + if (m_mesh == QAbstract3DSeries::MeshUserDefined) { + // Always use the supplied mesh directly + meshFileName = series->userDefinedMesh(); + } else { + switch (m_mesh) { + case QAbstract3DSeries::MeshBar: + case QAbstract3DSeries::MeshCube: + meshFileName = QStringLiteral(":/defaultMeshes/bar"); + break; + case QAbstract3DSeries::MeshPyramid: + meshFileName = QStringLiteral(":/defaultMeshes/pyramid"); + break; + case QAbstract3DSeries::MeshCone: + meshFileName = QStringLiteral(":/defaultMeshes/cone"); + break; + case QAbstract3DSeries::MeshCylinder: + meshFileName = QStringLiteral(":/defaultMeshes/cylinder"); + break; + case QAbstract3DSeries::MeshBevelBar: + case QAbstract3DSeries::MeshBevelCube: + meshFileName = QStringLiteral(":/defaultMeshes/bevelbar"); + break; + case QAbstract3DSeries::MeshSphere: + meshFileName = QStringLiteral(":/defaultMeshes/sphere"); + break; + case QAbstract3DSeries::MeshMinimal: + meshFileName = QStringLiteral(":/defaultMeshes/minimal"); + break; + case QAbstract3DSeries::MeshPoint: +#if defined(QT_OPENGL_ES_2) + qWarning("QAbstract3DSeries::MeshPoint is not fully supported on OpenGL ES2"); +#endif + break; + default: + // Default to cube + meshFileName = QStringLiteral(":/defaultMeshes/bar"); + break; + } + + if (series->isMeshSmooth() && m_mesh != QAbstract3DSeries::MeshPoint) + meshFileName += smoothString; + + // Give renderer an opportunity to customize the mesh + renderer->fixMeshFileName(meshFileName, m_mesh); + } + + // TODO: Optimize by having some kind of object cache in renderer instead of having separate ObjectHelper for each series? + delete m_object; + if (meshFileName.isEmpty()) { + m_object = 0; + } else { + m_object = new ObjectHelper(meshFileName); + m_object->load(); + } + } // TODO: Add other visual element extractions } |