diff options
author | Tomi Korpipää <tomi.korpipaa@digia.com> | 2013-04-05 13:11:05 +0300 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-04-05 20:26:20 +0300 |
commit | a6bc36e7ccdee05b2e3bca17ae8632854eba0483 (patch) | |
tree | 1794206c0578f1fb9896adeca4bbc464b988e96e /src/datavis3d/engine/q3dbars.cpp | |
parent | 8f4ea5395e70408a27bdd9514b4d7ab3cf10b1f4 (diff) |
Added data set classes for easier data insertion
Note: Not taken fully into use yet.
Moved rainfall chart into it's own example.
Added usage of data set classes to barchart
Fixed a crash in case a row contains less data than sample space assumes
Change-Id: I73f12de0214fe594d9054028da88b7280213fdd6
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavis3d/engine/q3dbars.cpp')
-rw-r--r-- | src/datavis3d/engine/q3dbars.cpp | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/datavis3d/engine/q3dbars.cpp b/src/datavis3d/engine/q3dbars.cpp index f8c51d50..7c3ca016 100644 --- a/src/datavis3d/engine/q3dbars.cpp +++ b/src/datavis3d/engine/q3dbars.cpp @@ -43,6 +43,8 @@ #include "q3dbars_p.h" #include "camerahelper_p.h" #include "qdataitem_p.h" +#include "qdatarow_p.h" +#include "qdataset_p.h" #include "shaderhelper_p.h" #include "objecthelper_p.h" #include "utils_p.h" @@ -280,6 +282,8 @@ void Q3DBars::drawScene() glDisable(GL_DITHER); // disable dithering, it may affect colors if enabled for (int row = startRow; row != stopRow; row += stepRow) { for (int bar = startBar; bar != stopBar; bar += stepBar) { + if (d_ptr->m_dataSet.at(row).size() < (bar + 1)) + continue; QDataItem *item = d_ptr->m_dataSet.at(row).at(bar); float barHeight = item->d_ptr->value() / d_ptr->m_heightNormalizer; QMatrix4x4 modelMatrix; @@ -471,6 +475,8 @@ void Q3DBars::drawScene() bool barSelectionFound = false; for (int row = startRow; row != stopRow; row += stepRow) { for (int bar = startBar; bar != stopBar; bar += stepBar) { + if (d_ptr->m_dataSet.at(row).size() < (bar + 1)) + continue; QDataItem *item = d_ptr->m_dataSet.at(row).at(bar); float barHeight = item->d_ptr->value() / d_ptr->m_heightNormalizer; if (barHeight == 0) @@ -1104,7 +1110,7 @@ void Q3DBars::addDataRow(const QVector<float> &dataRow, const QString &labelRow } d_ptr->findHighestValue(sampleRow); // The vector contains data (=height) for each bar, a row at a time - // With each new row, the previous data set (=row) must be moved back + // With each new row, the previous data row must be moved back // ie. we need as many vectors as we have rows in the sample space d_ptr->m_dataSet.prepend(sampleRow); // if the added data pushed us over sample space, remove the oldest data set @@ -1122,8 +1128,7 @@ void Q3DBars::addDataRow(const QVector<QDataItem*> &dataRow, const QString &labe qWarning("Data set too large for sample space"); } d_ptr->findHighestValue(row); - // The vector contains data (=height) for each bar, a row at a time - // With each new row, the previous data set (=row) must be moved back + // With each new row, the previous data row must be moved back // ie. we need as many vectors as we have rows in the sample space d_ptr->m_dataSet.prepend(row); // if the added data pushed us over sample space, remove the oldest data set @@ -1131,6 +1136,19 @@ void Q3DBars::addDataRow(const QVector<QDataItem*> &dataRow, const QString &labe d_ptr->resizeDataSet(); } +void Q3DBars::addDataRow(QDataRow *dataRow) +{ + QDataRow *row = dataRow; + // Check that the input data fits into sample space, and resize if it doesn't + row->d_ptr->verifySize(d_ptr->m_sampleCount.x()); + d_ptr->m_heightNormalizer = row->d_ptr->highestValue(); + // With each new row, the previous data row must be moved back + // ie. we need as many vectors as we have rows in the sample space + d_ptr->m_dataSetTest->addRow(row); + // if the added data pushed us over sample space, remove the oldest data set + d_ptr->m_dataSetTest->d_ptr->verifySize(d_ptr->m_sampleCount.y()); +} + void Q3DBars::addDataSet(const QVector< QVector<float> > &data, const QVector<QString> &labelsRow , const QVector<QString> &labelsColumn) { @@ -1173,6 +1191,17 @@ void Q3DBars::addDataSet(const QVector< QVector<QDataItem*> > &data d_ptr->findHighestValue(d_ptr->m_dataSet.at(i)); } +void Q3DBars::addDataSet(QDataSet* dataSet) +{ + delete d_ptr->m_dataSetTest; + // Check sizes + dataSet->d_ptr->verifySize(d_ptr->m_sampleCount.y(), d_ptr->m_sampleCount.x()); + // Take ownership of given set + d_ptr->m_dataSetTest = dataSet; + // Find highest value + d_ptr->m_heightNormalizer = d_ptr->m_dataSetTest->d_ptr->highestValue(); +} + Q3DBarsPrivate::Q3DBarsPrivate(Q3DBars *q) : q_ptr(q) , m_paintDevice(0) @@ -1218,6 +1247,7 @@ Q3DBarsPrivate::Q3DBarsPrivate(Q3DBars *q) , m_isInitialized(false) , m_selectionMode(Q3DBars::Bar) , m_selectedBar(0) + , m_dataSetTest(0) { } |