summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTomi Korpipää <tomi.korpipaa@digia.com>2013-08-27 09:53:37 +0300
committerTomi Korpipää <tomi.korpipaa@digia.com>2013-08-27 10:35:38 +0300
commit912d19d6ceed8e8fd4187d611f15d9fbed27decc (patch)
treec391cded87c47c04354e39f771af75b1fa9d4f8a /src
parentb9bd25765e4b9aaf2652514ca5c05d0e245bba2d (diff)
Limit scatter dot drawing to axis ranges
Task-number: QTRD-2184 Change-Id: Id8a35cadce54b8eef05d22a9d842b62ad0178055 Change-Id: Id8a35cadce54b8eef05d22a9d842b62ad0178055 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src')
-rw-r--r--src/datavis3d/engine/scatter3drenderer.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/datavis3d/engine/scatter3drenderer.cpp b/src/datavis3d/engine/scatter3drenderer.cpp
index 6dcca198..cf961bfb 100644
--- a/src/datavis3d/engine/scatter3drenderer.cpp
+++ b/src/datavis3d/engine/scatter3drenderer.cpp
@@ -138,16 +138,24 @@ void Scatter3DRenderer::initializeOpenGL()
void Scatter3DRenderer::updateDataModel(QScatterDataProxy *dataProxy)
{
+ int actualDataSize = 0;
const QScatterDataArray &dataArray = *dataProxy->array();
calculateSceneScalingFactors();
int dataSize = dataArray.size();
m_renderItemArray.resize(dataSize);
for (int i = 0; i < dataSize ; i++) {
- m_renderItemArray[i].setPosition(dataArray.at(i).position());
- calculateTranslation(m_renderItemArray[i]);
- m_renderItemArray[i].setRenderer(this);
+ QVector3D dotPos = dataArray.at(i).position();
+ if ((dotPos.x() >= m_axisCacheX.min() && dotPos.x() <= m_axisCacheX.max())
+ && (dotPos.y() >= m_axisCacheY.min() && dotPos.y() <= m_axisCacheY.max())
+ && (dotPos.z() >= m_axisCacheZ.min() && dotPos.z() <= m_axisCacheZ.max())) {
+ m_renderItemArray[actualDataSize].setPosition(dotPos);
+ calculateTranslation(m_renderItemArray[actualDataSize]);
+ m_renderItemArray[actualDataSize].setRenderer(this);
+ actualDataSize++;
+ }
}
- m_dotSizeScale = (GLfloat)qBound(0.01, (2.0 / qSqrt((qreal)dataSize)), 0.1);
+ m_renderItemArray.resize(actualDataSize);
+ m_dotSizeScale = (GLfloat)qBound(0.01, (2.0 / qSqrt((qreal)actualDataSize)), 0.1);
m_selectedItem = 0;
Abstract3DRenderer::updateDataModel(dataProxy);
@@ -1381,7 +1389,7 @@ void Scatter3DRenderer::calculateTranslation(ScatterRenderItem &item)
void Scatter3DRenderer::calculateSceneScalingFactors()
{
- m_heightNormalizer = (GLfloat)m_axisCacheY.max();
+ m_heightNormalizer = (GLfloat)qMax(qAbs(m_axisCacheY.max()), qAbs(m_axisCacheY.min()));
// TODO: Get rid of m_areaSize and use m_axisCaches directly?
m_areaSize.setHeight(m_axisCacheZ.max());
m_areaSize.setWidth(m_axisCacheX.max());