summaryrefslogtreecommitdiffstats
path: root/examples/datavisualization/texturesurface/topographicseries.cpp
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2014-08-12 14:12:17 +0300
committerMika Salmela <mika.salmela@digia.com>2014-08-12 17:53:13 +0300
commitd8037e46600ba65869eb72ed6a6a1b21ad966f5c (patch)
treef1e0155beab1695f0de27c465f1be138ebbc3a88 /examples/datavisualization/texturesurface/topographicseries.cpp
parent1cbeea3d48a1d55f5eef0ee419d209a7a9625c3f (diff)
Textured surface example
Documentation once the feature set is final and code looking good. Size of image files adjusted when example area is locked. Change-Id: I7ff249ec3452d412a64ce029b33f7607965ffb3a Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'examples/datavisualization/texturesurface/topographicseries.cpp')
-rw-r--r--examples/datavisualization/texturesurface/topographicseries.cpp69
1 files changed, 69 insertions, 0 deletions
diff --git a/examples/datavisualization/texturesurface/topographicseries.cpp b/examples/datavisualization/texturesurface/topographicseries.cpp
new file mode 100644
index 00000000..1d94aead
--- /dev/null
+++ b/examples/datavisualization/texturesurface/topographicseries.cpp
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** 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"
+
+#include <QDebug>
+
+using namespace QtDataVisualization;
+
+// Value used to encode height data as RGB value on PNG file
+const float packingFactor = 11983.0f;
+
+TopographicSeries::TopographicSeries()
+{
+ setDrawMode(QSurface3DSeries::DrawSurface);
+ setFlatShadingEnabled(true);
+}
+
+TopographicSeries::~TopographicSeries()
+{
+}
+
+void TopographicSeries::setTopographyFile(const QString file, float width, float height)
+{
+ 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 = (imageHeight - 1 - i) * widthBits;
+ 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, float(i) * stepZ));
+ p = p + 4;
+ }
+ *dataArray << newRow;
+ }
+
+ m_sampleCountX = float(imageWidth);
+ m_sampleCountZ = float(imageHeight);
+
+ dataProxy()->resetArray(dataArray);
+}