Qt Quick 2 Surface Example▲
Sélectionnez
/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Data Visualization module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:GPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3 or (at your option) any later version
** approved by the KDE Free Qt Foundation. The licenses are as published by
** the Free Software Foundation and appearing in the file LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/
import QtQuick 2.1
import QtQuick.Layouts 1.0
import QtDataVisualization 1.0
import "."
Rectangle {
id: mainview
width: 1024
height: 768
color: surfacePlot.theme.windowColor
Data {
id: surfaceData
}
Item {
id: surfaceView
width: mainview.width
height: mainview.height
anchors.top: mainview.top
anchors.left: mainview.left
ColorGradient {
id: surfaceGradient
ColorGradientStop { position: 0.0; color: "darkslategray" }
ColorGradientStop { id: middleGradient; position: 0.25; color: "peru" }
ColorGradientStop { position: 1.0; color: "red" }
}
Surface3D {
id: surfacePlot
width: surfaceView.width
height: surfaceView.height
theme: Theme3D {
type: Theme3D.ThemeStoneMoss
font.family: "STCaiyun"
font.pointSize: 35
colorStyle: Theme3D.ColorStyleRangeGradient
baseGradients: [surfaceGradient]
}
shadowQuality: AbstractGraph3D.ShadowQualityMedium
selectionMode: AbstractGraph3D.SelectionSlice | AbstractGraph3D.SelectionItemAndRow
scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
axisY.min: 0.0
axisY.max: 500.0
axisX.segmentCount: 10
axisX.subSegmentCount: 2
axisX.labelFormat: "%i"
axisZ.segmentCount: 10
axisZ.subSegmentCount: 2
axisZ.labelFormat: "%i"
axisY.segmentCount: 5
axisY.subSegmentCount: 2
axisY.labelFormat: "%i"
axisY.title: "Height"
axisX.title: "Latitude"
axisZ.title: "Longitude"
Surface3DSeries {
id: surfaceSeries
flatShadingEnabled: false
drawMode: Surface3DSeries.DrawSurface
ItemModelSurfaceDataProxy {
itemModel: surfaceData.model
rowRole: "longitude"
columnRole: "latitude"
yPosRole: "height"
}
onDrawModeChanged: checkState()
}
Surface3DSeries {
id: heightSeries
flatShadingEnabled: false
drawMode: Surface3DSeries.DrawSurface
visible: false
HeightMapSurfaceDataProxy {
heightMapFile: ":/heightmaps/image"
// We don't want the default data values set by heightmap proxy.
minZValue: 30
maxZValue: 60
minXValue: 67
maxXValue: 97
}
onDrawModeChanged: checkState()
}
}
}
RowLayout {
id: buttonLayout
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
opacity: 0.5
NewButton {
id: surfaceGridToggle
Layout.fillWidth: true
Layout.fillHeight: true
text: "Show Surface Grid"
onClicked: {
if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe) {
surfaceSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
heightSeries.drawMode &= ~Surface3DSeries.DrawWireframe;
} else {
surfaceSeries.drawMode |= Surface3DSeries.DrawWireframe;
heightSeries.drawMode |= Surface3DSeries.DrawWireframe;
}
}
}
NewButton {
id: surfaceToggle
Layout.fillWidth: true
Layout.fillHeight: true
text: "Hide Surface"
onClicked: {
if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface) {
surfaceSeries.drawMode &= ~Surface3DSeries.DrawSurface;
heightSeries.drawMode &= ~Surface3DSeries.DrawSurface;
} else {
surfaceSeries.drawMode |= Surface3DSeries.DrawSurface;
heightSeries.drawMode |= Surface3DSeries.DrawSurface;
}
}
}
NewButton {
id: flatShadingToggle
Layout.fillWidth: true
Layout.fillHeight: true
text: surfaceSeries.flatShadingSupported ? "Show Flat" : "Flat not supported"
enabled: surfaceSeries.flatShadingSupported
onClicked: {
if (surfaceSeries.flatShadingEnabled === true) {
surfaceSeries.flatShadingEnabled = false;
heightSeries.flatShadingEnabled = false;
text = "Show Flat"
} else {
surfaceSeries.flatShadingEnabled = true;
heightSeries.flatShadingEnabled = true;
text = "Show Smooth"
}
}
}
NewButton {
id: backgroundToggle
Layout.fillWidth: true
Layout.fillHeight: true
text: "Hide Background"
onClicked: {
if (surfacePlot.theme.backgroundEnabled === true) {
surfacePlot.theme.backgroundEnabled = false;
text = "Show Background"
} else {
surfacePlot.theme.backgroundEnabled = true;
text = "Hide Background"
}
}
}
NewButton {
id: gridToggle
Layout.fillWidth: true
Layout.fillHeight: true
text: "Hide Grid"
onClicked: {
if (surfacePlot.theme.gridEnabled === true) {
surfacePlot.theme.gridEnabled = false;
text = "Show Grid"
} else {
surfacePlot.theme.gridEnabled = true;
text = "Hide Grid"
}
}
}
NewButton {
id: seriesToggle
Layout.fillWidth: true
Layout.fillHeight: true
text: "Switch to Height Map Series"
onClicked: {
if (surfaceSeries.visible === false) {
surfacePlot.axisY.max = 500.0
surfaceSeries.visible = true
heightSeries.visible = false
middleGradient.position = 0.25
text = "Switch to Height Map Series"
} else {
surfacePlot.axisY.max = 250.0
surfaceSeries.visible = false
heightSeries.visible = true
middleGradient.position = 0.50
text = "Switch to Item Model Series"
}
}
}
}
function checkState() {
if (surfaceSeries.drawMode & Surface3DSeries.DrawSurface)
surfaceToggle.text = "Hide Surface"
else
surfaceToggle.text = "Show Surface"
if (surfaceSeries.drawMode & Surface3DSeries.DrawWireframe)
surfaceGridToggle.text = "Hide Surface Grid"
else
surfaceGridToggle.text = "Show Surface Grid"
}
}

