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 /tests/qmlvolume/datasource.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 'tests/qmlvolume/datasource.cpp')
-rw-r--r-- | tests/qmlvolume/datasource.cpp | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/tests/qmlvolume/datasource.cpp b/tests/qmlvolume/datasource.cpp new file mode 100644 index 00000000..e1fe5385 --- /dev/null +++ b/tests/qmlvolume/datasource.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** 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 "datasource.h" +#include <QtCore/qmath.h> +#include <QtGui/QRgb> +#include <QtGui/QVector3D> + +using namespace QtDataVisualization; + +Q_DECLARE_METATYPE(QCustom3DVolume *) + +DataSource::DataSource(QObject *parent) : + QObject(parent) +{ + qRegisterMetaType<QCustom3DVolume *>(); +} + +DataSource::~DataSource() +{ +} + +void DataSource::fillVolume(QCustom3DVolume *volumeItem) +{ + // Generate example texture data for an half-ellipsoid with a section missing. + // This can take a while if the dimensions are large, so we support incremental data generation. + + int index = 0; + int textureSize = 256; + QVector3D midPoint(float(textureSize) / 2.0f, + float(textureSize) / 2.0f, + float(textureSize) / 2.0f); + + QVector<uchar> *textureData = new QVector<uchar>(textureSize * textureSize * textureSize / 2); + for (int i = 0; i < textureSize; i++) { + for (int j = 0; j < textureSize / 2; j++) { + for (int k = 0; k < textureSize; k++) { + int colorIndex = 0; + // Take a section out of the ellipsoid + if (i >= textureSize / 2 || j >= textureSize / 4 || k >= textureSize / 2) { + QVector3D distVec = QVector3D(float(k), float(j * 2), float(i)) - midPoint; + float adjLen = qMin(255.0f, (distVec.length() * 512.0f / float(textureSize))); + colorIndex = 255 - int(adjLen); + } + + (*textureData)[index] = colorIndex; + index++; + } + } + } + + volumeItem->setScaling(QVector3D(2.0f, 1.0f, 2.0f)); + volumeItem->setTextureWidth(textureSize); + volumeItem->setTextureHeight(textureSize / 2); + volumeItem->setTextureDepth(textureSize); + volumeItem->setTextureFormat(QImage::Format_Indexed8); + volumeItem->setTextureData(textureData); + + QVector<QRgb> colorTable(256); + + for (int i = 1; i < 256; i++) { + if (i < 15) + colorTable[i] = qRgba(0, 0, 0, 0); + else if (i < 60) + colorTable[i] = qRgba((i * 2) + 120, 0, 0, 15); + else if (i < 120) + colorTable[i] = qRgba(0, ((i - 60) * 2) + 120, 0, 50); + else if (i < 180) + colorTable[i] = qRgba(0, 0, ((i - 120) * 2) + 120, 255); + else + colorTable[i] = qRgba(i, i, i, 255); + } + + volumeItem->setColorTable(colorTable); +} |