From 279ed99a5f1fe06c250cec197609e819ea28a38f Mon Sep 17 00:00:00 2001 From: Tomi Korpipaa Date: Wed, 15 Feb 2023 13:31:16 +0200 Subject: Combine 3 more widget examples into graph gallery MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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ää --- .../graphgallery/topographicseries.cpp | 56 ++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 examples/datavisualization/graphgallery/topographicseries.cpp (limited to 'examples/datavisualization/graphgallery/topographicseries.cpp') 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); +} -- cgit v1.2.3