main.qml Example File

qmlscatter/qml/qmlscatter/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: 500
      height: 500

      Data {
          id: seriesData
      }

      Theme3D {
          id: themeIsabelle
          type: Theme3D.ThemeIsabelle
          font.family: "Lucida Handwriting"
          font.pointSize: 40
      }

      Theme3D {
          id: themeArmyBlue
          type: Theme3D.ThemeArmyBlue
      }

      Item {
          id: dataView
          anchors.bottom: parent.bottom
          width: parent.width
          height: parent.height - buttonLayout.height

          Scatter3D {
              id: scatterGraph
              width: dataView.width
              height: dataView.height
              theme: themeIsabelle
              shadowQuality: AbstractGraph3D.ShadowQualitySoftLow
              axisX.segmentCount: 3
              axisX.subSegmentCount: 2
              axisX.labelFormat: "%.2f"
              axisZ.segmentCount: 2
              axisZ.subSegmentCount: 2
              axisZ.labelFormat: "%.2f"
              axisY.segmentCount: 2
              axisY.subSegmentCount: 2
              axisY.labelFormat: "%.2f"
              Scatter3DSeries {
                  id: scatterSeries
                  itemLabelFormat: "Series 1: X:@xLabel Y:@yLabel Z:@zLabel"

                  ItemModelScatterDataProxy {
                      itemModel: seriesData.model
                      xPosRole: "xPos"
                      yPosRole: "yPos"
                      zPosRole: "zPos"
                  }
              }

              Scatter3DSeries {
                  id: scatterSeriesTwo
                  itemLabelFormat: "Series 2: X:@xLabel Y:@yLabel Z:@zLabel"
                  itemSize: 0.1
                  mesh: Abstract3DSeries.MeshCube

                  ItemModelScatterDataProxy {
                      itemModel: seriesData.modelTwo
                      xPosRole: "xPos"
                      yPosRole: "yPos"
                      zPosRole: "zPos"
                  }
              }
              Scatter3DSeries {
                  id: scatterSeriesThree
                  itemLabelFormat: "Series 3: X:@xLabel Y:@yLabel Z:@zLabel"
                  itemSize: 0.2
                  mesh: Abstract3DSeries.MeshMinimal

                  ItemModelScatterDataProxy {
                      itemModel: seriesData.modelThree
                      xPosRole: "xPos"
                      yPosRole: "yPos"
                      zPosRole: "zPos"
                  }
              }
          }
      }

      RowLayout {
          id: buttonLayout
          Layout.minimumHeight: cameraToggle.height
          width: parent.width
          anchors.left: parent.left
          spacing: 0
          NewButton {
              id: shadowToggle
              Layout.fillHeight: true
              Layout.fillWidth: true
              text: scatterGraph.shadowsSupported ? "Hide Shadows" : "Shadows not supported"
              enabled: scatterGraph.shadowsSupported
              onClicked: {
                  if (scatterGraph.shadowQuality === AbstractGraph3D.ShadowQualityNone) {
                      scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualitySoftLow;
                      text = "Hide Shadows";
                  } else {
                      scatterGraph.shadowQuality = AbstractGraph3D.ShadowQualityNone;
                      text = "Show Shadows";
                  }
              }
          }

          NewButton {
              id: smoothToggle
              Layout.fillHeight: true
              Layout.fillWidth: true
              text: "Use Smooth for Series One"
              onClicked: {
                  if (scatterSeries.meshSmooth === false) {
                      text = "Use Flat for Series One";
                      scatterSeries.meshSmooth = true;
                  } else {
                      text = "Use Smooth for Series One"
                      scatterSeries.meshSmooth = false;
                  }
              }
          }

          NewButton {
              id: cameraToggle
              Layout.fillHeight: true
              Layout.fillWidth: true
              text: "Change Camera Placement"
              onClicked: {
                  if (scatterGraph.scene.activeCamera.cameraPreset === Camera3D.CameraPresetFront) {
                      scatterGraph.scene.activeCamera.cameraPreset =
                              Camera3D.CameraPresetIsometricRightHigh;
                  } else {
                      scatterGraph.scene.activeCamera.cameraPreset = Camera3D.CameraPresetFront;
                  }
              }
          }

          NewButton {
              id: themeToggle
              Layout.fillHeight: true
              Layout.fillWidth: true
              text: "Change Theme"
              onClicked: {
                  if (scatterGraph.theme.type === Theme3D.ThemeArmyBlue) {
                      scatterGraph.theme = themeIsabelle
                  } else {
                      scatterGraph.theme = themeArmyBlue
                  }
                  if (scatterGraph.theme.backgroundEnabled === true) {
                      backgroundToggle.text = "Hide Background";
                  } else {
                      backgroundToggle.text = "Show Background";
                  }
              }
          }

          NewButton {
              id: backgroundToggle
              Layout.fillHeight: true
              Layout.fillWidth: true
              text: "Hide Background"
              onClicked: {
                  if (scatterGraph.theme.backgroundEnabled === true) {
                      scatterGraph.theme.backgroundEnabled = false;
                      text = "Show Background";
                  } else {
                      scatterGraph.theme.backgroundEnabled = true;
                      text = "Hide Background";
                  }
              }
          }

          NewButton {
              id: exitButton
              Layout.fillHeight: true
              Layout.fillWidth: true
              text: "Quit"
              onClicked: Qt.quit(0);
          }
      }
  }