- Qt 5.5
- Qt Canvas 3D
- JSON Models Example
- jsonmodelsbasic.qml Example File
- Qt 5.5.1 Reference Documentation

# jsonmodelsbasic.qml Example File

canvas3d/jsonmodels/qml/jsonmodels/jsonmodelsbasic.qml

    /****************************************************************************
    **
    ** Copyright (C) 2015 The Qt Company Ltd.
    ** Contact: http://www.qt.io/licensing/
    **
    ** This file is part of the QtCanvas3D module of the Qt Toolkit.
    **
    ** $QT_BEGIN_LICENSE:LGPL3$
    ** 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 http://www.qt.io/terms-conditions. For further
    ** information use the contact form at http://www.qt.io/contact-us.
    **
    ** GNU Lesser General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU Lesser
    ** General Public License version 3 as published by the Free Software
    ** Foundation and appearing in the file LICENSE.LGPLv3 included in the
    ** packaging of this file. Please review the following information to
    ** ensure the GNU Lesser General Public License version 3 requirements
    ** will be met: https://www.gnu.org/licenses/lgpl.html.
    **
    ** GNU General Public License Usage
    ** Alternatively, this file may be used under the terms of the GNU
    ** General Public License version 2.0 or later as published by the Free
    ** Software Foundation and appearing in the file LICENSE.GPL included in
    ** the packaging of this file. Please review the following information to
    ** ensure the GNU General Public License version 2.0 requirements will be
    ** met: http://www.gnu.org/licenses/gpl-2.0.html.
    **
    ** $QT_END_LICENSE$
    **
    ****************************************************************************/

    import QtQuick 2.2
    import QtQuick.Window 2.1
    import QtCanvas3D 1.0
    import QtQuick.Controls 1.1
    import QtQuick.Layouts 1.1

    import "jsonmodels.js" as GLCode

    Window {
        visible: true
        width: 1200
        height: 900

        property int previousY: 0
        property int previousX: 0

        Rectangle {
            id: valuePanel
            width: 150
            height: 100
            anchors.left: parent.left
            anchors.top: parent.top
            opacity: 0.3
            border.color: "black"
            border.width: 2
            radius: 5
            z: 1
        }
        ColumnLayout {
            width: valuePanel.width
            height: valuePanel.height
            x: 10
            z: 2
            Label {
                font.pixelSize: 20
                text: "x angle: " + angle
                readonly property int angle: canvas3d.xRot
            }
            Label {
                font.pixelSize: 20
                text: "y angle: " + angle
                readonly property int angle: canvas3d.yRot
            }
            Label {
                font.pixelSize: 20
                text: "distance: " + distance
                readonly property int distance: canvas3d.distance * 10
            }
        }

        ColumnLayout {
            anchors.fill: parent
            RowLayout {
                Layout.fillHeight: true
                Layout.fillWidth: true
                Canvas3D {
                    id: canvas3d
                    Layout.fillHeight: true
                    Layout.fillWidth: true
                    property double xRot: 0.0
                    property double yRot: 45.0
                    property double distance: 2.0
                    property double itemSize: 1.0
                    property double lightX: 0.0
                    property double lightY: 45.0
                    property double lightDistance: 2.0
                    property bool animatingLight: false
                    property bool animatingCamera: false
                    property bool drawWireframe: false

                    onInitializeGL: {
                        GLCode.initializeGL(canvas3d);
                    }

                    onPaintGL: {
                        GLCode.paintGL(canvas3d);
                    }

                    onResizeGL: {
                        GLCode.resizeGL(canvas3d);
                    }

                    MouseArea {
                        anchors.fill: parent
                        onMouseXChanged: {
                            if (previousY !== 0)
                                canvas3d.yRot += mouseY - previousY
                            previousY = mouseY
                            if (canvas3d.yRot > 90)
                                canvas3d.yRot = 90
                            if (canvas3d.yRot < -90)
                                canvas3d.yRot = -90
                        }
                        onMouseYChanged: {
                            if (previousX !== 0)
                                canvas3d.xRot += mouseX - previousX
                            previousX = mouseX
                            if (canvas3d.xRot > 180)
                                canvas3d.xRot -= 360
                            if (canvas3d.xRot < -180)
                                canvas3d.xRot += 360
                        }
                        onReleased: {
                            previousX = 0
                            previousY = 0
                        }
                        onWheel: {
                            canvas3d.distance -= wheel.angleDelta.y / 1000.0
                            if (canvas3d.distance < 0.5)
                                canvas3d.distance = 0.5
                            if (canvas3d.distance > 10)
                                canvas3d.distance = 10
                        }
                    }
                }
            }
            RowLayout {
                Layout.fillWidth: true
                Button {
                    id: lightButton
                    Layout.fillWidth: true
                    text: "Animate Light"
                    checkable: true
                    onCheckedChanged: canvas3d.animatingLight = checked
                }
                Button {
                    id: cameraButton
                    Layout.fillWidth: true
                    text: "Animate Camera"
                    checkable: true
                    onCheckedChanged: canvas3d.animatingCamera = checked
                }
                Button {
                    id: drawButton
                    Layout.fillWidth: true
                    text: "Wireframe"
                    checkable: true
                    onCheckedChanged: canvas3d.drawWireframe = checked
                }
                Button {
                    Layout.fillWidth: true
                    text: "Reset"
                    onClicked: {
                        canvas3d.xRot = 0.0
                        canvas3d.yRot = 45.0
                        canvas3d.distance = 2.0
                        canvas3d.itemSize = 1.0
                        canvas3d.lightX = 0.0
                        canvas3d.lightY = 45.0
                        canvas3d.lightDistance = 2.0
                        lightButton.checked = false
                        cameraButton.checked = false
                        drawButton.checked = false
                    }
                }
                Button {
                    Layout.fillWidth: true
                    text: "Quit"
                    onClicked: Qt.quit()
                }
            }
        }

        SequentialAnimation {
            loops: Animation.Infinite
            running: canvas3d.animatingLight
            NumberAnimation {
                target: canvas3d
                property: "lightX"
                from: 0.0
                to: 360.0
                duration: 5000
            }
        }

        SequentialAnimation {
            loops: Animation.Infinite
            running: canvas3d.animatingLight
            NumberAnimation {
                target: canvas3d
                property: "lightY"
                from: 0.0
                to: 90.0
                duration: 10000
            }
            NumberAnimation {
                target: canvas3d
                property: "lightY"
                from: 90.0
                to: 0.0
                duration: 10000
            }
        }

        SequentialAnimation {
            loops: Animation.Infinite
            running: canvas3d.animatingLight
            NumberAnimation {
                target: canvas3d
                property: "lightDistance"
                from: 10.0
                to: 0.5
                duration: 30000
            }
            NumberAnimation {
                target: canvas3d
                property: "lightDistance"
                from: 0.5
                to: 10.0
                duration: 30000
            }
        }

        SequentialAnimation {
            loops: Animation.Infinite
            running: canvas3d.animatingCamera
            NumberAnimation {
                target: canvas3d
                property: "xRot"
                from: -180.0
                to: 180.0
                duration: 5000
                easing.type: Easing.InOutSine
            }
            NumberAnimation {
                target: canvas3d
                property: "xRot"
                from: 180.0
                to: -180.0
                duration: 5000
                easing.type: Easing.InOutSine
            }
        }

        SequentialAnimation {
            loops: Animation.Infinite
            running: canvas3d.animatingCamera
            NumberAnimation {
                target: canvas3d
                property: "yRot"
                from: 0.0
                to: 90.0
                duration: 10000
                easing.type: Easing.InOutSine
            }
            NumberAnimation {
                target: canvas3d
                property: "yRot"
                from: 90.0
                to: 0.0
                duration: 10000
                easing.type: Easing.InOutSine
            }
        }

        SequentialAnimation {
            loops: Animation.Infinite
            running: canvas3d.animatingCamera
            NumberAnimation {
                target: canvas3d
                property: "distance"
                from: 10.0
                to: 0.5
                duration: 30000
                easing.type: Easing.InOutSine
            }
            NumberAnimation {
                target: canvas3d
                property: "distance"
                from: 0.5
                to: 10.0
                duration: 30000
                easing.type: Easing.InOutSine
            }
        }
    }