main.qml Example File

qmlsurface/qml/qmlsurface/main.qml

  /****************************************************************************
  **
  ** 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"
      }
  }