summaryrefslogtreecommitdiffstats
path: root/examples/datavisualization/graphgallery/topographicseries.cpp
diff options
context:
space:
mode:
authorTomi Korpipaa <tomi.korpipaa@qt.io>2023-02-15 13:31:16 +0200
committerTomi Korpipaa <tomi.korpipaa@qt.io>2023-02-27 13:53:21 +0200
commit279ed99a5f1fe06c250cec197609e819ea28a38f (patch)
treeafa6109832ccef5594b46b12aebc3921c22f013a /examples/datavisualization/graphgallery/topographicseries.cpp
parentcbaa2eaaf73ffa0d2b4ba999c993199fc22110ea (diff)
Combine 3 more widget examples into graph gallery
Combine the remaining 3 surface graph examples into graph gallery example. Pick-to: 6.5 Task-number: QTBUG-110698 Change-Id: Ia324189e10f781f9822db220def72b7b15d37a49 Reviewed-by: Tomi Korpipää <tomi.korpipaa@qt.io>
Diffstat (limited to 'examples/datavisualization/graphgallery/topographicseries.cpp')
-rw-r--r--examples/datavisualization/graphgallery/topographicseries.cpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/examples/datavisualization/graphgallery/topographicseries.cpp b/examples/datavisualization/graphgallery/topographicseries.cpp
new file mode 100644
index 00000000..d33fa6bd
--- /dev/null
+++ b/examples/datavisualization/graphgallery/topographicseries.cpp
@@ -0,0 +1,56 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "topographicseries.h"
+
+//! [0]
+// Value used to encode height data as RGB value on PNG file
+const float packingFactor = 11983.f;
+//! [0]
+
+TopographicSeries::TopographicSeries()
+{
+ setDrawMode(QSurface3DSeries::DrawSurface);
+ setFlatShadingEnabled(true);
+ setBaseColor(Qt::white);
+}
+
+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);
+}