Qt Quick 2 Scatter Example

 /****************************************************************************
 **
 ** 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);
         }
     }
 }