main.qml Example File
qmlsurfacelayers/qml/qmlsurfacelayers/main.qml
import QtQuick 2.1
import QtQuick.Layouts 1.0
import QtQuick.Controls 1.0
import QtQuick.Controls.Styles 1.0
import QtDataVisualization 1.0
import "."
Item {
id: mainview
width: 1280
height: 720
property real fontSize: 12
Item {
id: surfaceView
width: mainview.width - buttonLayout.width
height: mainview.height
anchors.right: mainview.right;
ColorGradient {
id: layerOneGradient
ColorGradientStop { position: 0.0; color: "black" }
ColorGradientStop { position: 0.31; color: "tan" }
ColorGradientStop { position: 0.32; color: "green" }
ColorGradientStop { position: 0.40; color: "darkslategray" }
ColorGradientStop { position: 1.0; color: "white" }
}
ColorGradient {
id: layerTwoGradient
ColorGradientStop { position: 0.315; color: "blue" }
ColorGradientStop { position: 0.33; color: "white" }
}
ColorGradient {
id: layerThreeGradient
ColorGradientStop { position: 0.0; color: "red" }
ColorGradientStop { position: 0.15; color: "black" }
}
Surface3D {
id: surfaceLayers
width: surfaceView.width
height: surfaceView.height
theme: Theme3D {
type: Theme3D.ThemeEbony
font.pointSize: 35
colorStyle: Theme3D.ColorStyleRangeGradient
}
shadowQuality: AbstractGraph3D.ShadowQualityNone
selectionMode: AbstractGraph3D.SelectionRow | AbstractGraph3D.SelectionSlice
scene.activeCamera.cameraPreset: Camera3D.CameraPresetIsometricLeft
axisY.min: 20
axisY.max: 200
axisX.segmentCount: 5
axisX.subSegmentCount: 2
axisX.labelFormat: "%i"
axisZ.segmentCount: 5
axisZ.subSegmentCount: 2
axisZ.labelFormat: "%i"
axisY.segmentCount: 5
axisY.subSegmentCount: 2
axisY.labelFormat: "%i"
Surface3DSeries {
id: layerOneSeries
baseGradient: layerOneGradient
HeightMapSurfaceDataProxy {
heightMapFile: ":/heightmaps/layer_1.png"
}
flatShadingEnabled: false
drawMode: Surface3DSeries.DrawSurface
visible: layerOneToggle.checked
}
Surface3DSeries {
id: layerTwoSeries
baseGradient: layerTwoGradient
HeightMapSurfaceDataProxy {
heightMapFile: ":/heightmaps/layer_2.png"
}
flatShadingEnabled: false
drawMode: Surface3DSeries.DrawSurface
visible: layerTwoToggle.checked
}
Surface3DSeries {
id: layerThreeSeries
baseGradient: layerThreeGradient
HeightMapSurfaceDataProxy {
heightMapFile: ":/heightmaps/layer_3.png"
}
flatShadingEnabled: false
drawMode: Surface3DSeries.DrawSurface
visible: layerThreeToggle.checked
}
}
}
ColumnLayout {
id: buttonLayout
anchors.top: parent.top
anchors.left: parent.left
spacing: 0
GroupBox {
flat: true
Layout.fillWidth: true
Column {
spacing: 10
Label {
font.pointSize: fontSize
font.bold: true
text: "Layer Selection"
}
CheckBox {
id: layerOneToggle
checked: true
style: CheckBoxStyle {
label: Label {
font.pointSize: fontSize
text: "Show Ground Layer"
}
}
}
CheckBox {
id: layerTwoToggle
checked: true
style: CheckBoxStyle {
label: Label {
font.pointSize: fontSize
text: "Show Sea Layer"
}
}
}
CheckBox {
id: layerThreeToggle
checked: true
style: CheckBoxStyle {
label: Label {
font.pointSize: fontSize
text: "Show Tectonic Layer"
}
}
}
}
}
GroupBox {
flat: true
Layout.fillWidth: true
Column {
spacing: 10
Label {
font.pointSize: fontSize
font.bold: true
text: "Layer Style"
}
CheckBox {
id: layerOneGrid
style: CheckBoxStyle {
label: Label {
font.pointSize: fontSize
text: "Show Ground as Grid"
}
}
onCheckedChanged: {
if (checked)
layerOneSeries.drawMode = Surface3DSeries.DrawWireframe
else
layerOneSeries.drawMode = Surface3DSeries.DrawSurface
}
}
CheckBox {
id: layerTwoGrid
style: CheckBoxStyle {
label: Label {
font.pointSize: fontSize
text: "Show Sea as Grid"
}
}
onCheckedChanged: {
if (checked)
layerTwoSeries.drawMode = Surface3DSeries.DrawWireframe
else
layerTwoSeries.drawMode = Surface3DSeries.DrawSurface
}
}
CheckBox {
id: layerThreeGrid
style: CheckBoxStyle {
label: Label {
font.pointSize: fontSize
text: "Show Tectonic as Grid"
}
}
onCheckedChanged: {
if (checked)
layerThreeSeries.drawMode = Surface3DSeries.DrawWireframe
else
layerThreeSeries.drawMode = Surface3DSeries.DrawSurface
}
}
}
}
NewButton {
id: sliceButton
text: "Slice All Layers"
fontSize: fontSize
Layout.fillWidth: true
Layout.minimumHeight: 40
onClicked: {
if (surfaceLayers.selectionMode & AbstractGraph3D.SelectionMultiSeries) {
surfaceLayers.selectionMode = AbstractGraph3D.SelectionRow
| AbstractGraph3D.SelectionSlice
text = "Slice All Layers"
} else {
surfaceLayers.selectionMode = AbstractGraph3D.SelectionRow
| AbstractGraph3D.SelectionSlice
| AbstractGraph3D.SelectionMultiSeries
text = "Slice One Layer"
}
}
}
NewButton {
id: shadowButton
fontSize: fontSize
Layout.fillWidth: true
Layout.minimumHeight: 40
text: surfaceLayers.shadowsSupported ? "Show Shadows" : "Shadows not supported"
enabled: surfaceLayers.shadowsSupported
onClicked: {
if (surfaceLayers.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityLow
text = "Hide Shadows"
} else {
surfaceLayers.shadowQuality = AbstractGraph3D.ShadowQualityNone
text = "Show Shadows"
}
}
}
NewButton {
id: renderModeButton
fontSize: fontSize
text: "Switch Render Mode"
Layout.fillWidth: true
Layout.minimumHeight: 40
onClicked: {
var modeText = "Indirect "
var aaText
if (surfaceLayers.renderingMode === AbstractGraph3D.RenderIndirect &&
surfaceLayers.msaaSamples === 0) {
surfaceLayers.renderingMode = AbstractGraph3D.RenderDirectToBackground
modeText = "BackGround "
} else if (surfaceLayers.renderingMode === AbstractGraph3D.RenderIndirect &&
surfaceLayers.msaaSamples === 4) {
surfaceLayers.renderingMode = AbstractGraph3D.RenderIndirect
surfaceLayers.msaaSamples = 0
} else if (surfaceLayers.renderingMode === AbstractGraph3D.RenderIndirect &&
surfaceLayers.msaaSamples === 8) {
surfaceLayers.renderingMode = AbstractGraph3D.RenderIndirect
surfaceLayers.msaaSamples = 4
} else {
surfaceLayers.renderingMode = AbstractGraph3D.RenderIndirect
surfaceLayers.msaaSamples = 8
}
if (surfaceLayers.msaaSamples <= 0) {
aaText = "No AA"
} else {
aaText = surfaceLayers.msaaSamples + "xMSAA"
}
renderLabel.text = modeText + aaText
}
}
TextField {
id: renderLabel
font.pointSize: fontSize
Layout.fillWidth: true
Layout.minimumHeight: 40
enabled: false
horizontalAlignment: TextInput.AlignHCenter
text: "Indirect, " + surfaceLayers.msaaSamples + "xMSAA"
}
}
}