diff options
author | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2014-10-29 09:45:41 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2014-10-29 09:45:41 +0200 |
commit | e3a4f132ca2a42af3d4bb889d6a17948b88d26a2 (patch) | |
tree | 554d2b8b3020dc71438301aa696dea1e9a36943a /examples/datavisualization/texturesurface/topographicseries.cpp | |
parent | cc50608385cf77a0803431ece1385f341a400b75 (diff) | |
parent | bf716cfdf0afecccdb1f2eabb2e6a172c620fbff (diff) |
Merge branch 'develop'
Conflicts:
.qmake.conf
README
src/datavisualization/global/qdatavisualizationglobal.h
Change-Id: Ia6941dcf3e6aa17e2e9ebc6f60fac16ef5049f11
Diffstat (limited to 'examples/datavisualization/texturesurface/topographicseries.cpp')
-rw-r--r-- | examples/datavisualization/texturesurface/topographicseries.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/examples/datavisualization/texturesurface/topographicseries.cpp b/examples/datavisualization/texturesurface/topographicseries.cpp new file mode 100644 index 00000000..530e56b4 --- /dev/null +++ b/examples/datavisualization/texturesurface/topographicseries.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "topographicseries.h" + +using namespace QtDataVisualization; + +//! [0] +// Value used to encode height data as RGB value on PNG file +const float packingFactor = 11983.0f; +//! [0] + +TopographicSeries::TopographicSeries() +{ + setDrawMode(QSurface3DSeries::DrawSurface); + setFlatShadingEnabled(true); +} + +TopographicSeries::~TopographicSeries() +{ +} + +void TopographicSeries::setTopographyFile(const QString file, float width, float height) +{ +//! [1] + QImage heightMapImage(file); + uchar *bits = heightMapImage.bits(); + int imageHeight = heightMapImage.height(); + int imageWidth = heightMapImage.width(); + int widthBits = imageWidth * 4; + float stepX = width / float(imageWidth); + float stepZ = height / float(imageHeight); + + QSurfaceDataArray *dataArray = new QSurfaceDataArray; + dataArray->reserve(imageHeight); + for (int i = 0; i < imageHeight; i++) { + int p = i * widthBits; + float z = height - float(i) * stepZ; + QSurfaceDataRow *newRow = new QSurfaceDataRow(imageWidth); + for (int j = 0; j < imageWidth; j++) { + uchar aa = bits[p + 0]; + uchar rr = bits[p + 1]; + uchar gg = bits[p + 2]; + uint color = uint((gg << 16) + (rr << 8) + aa); + float y = float(color) / packingFactor; + (*newRow)[j].setPosition(QVector3D(float(j) * stepX, y, z)); + p = p + 4; + } + *dataArray << newRow; + } + + dataProxy()->resetArray(dataArray); +//! [1] + + m_sampleCountX = float(imageWidth); + m_sampleCountZ = float(imageHeight); +} |