File: tst_geometry_source.qml

package info (click to toggle)
qt6-quick3dphysics 6.9.2-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 22,116 kB
  • sloc: cpp: 261,267; python: 40; makefile: 21
file content (132 lines) | stat: -rw-r--r-- 3,686 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick
import QtTest
import QtQuick3D
import QtQuick3D.Physics
import QtQuick3D.Physics.Helpers
import Geometry

// This test tries repeatedly adding and removing a geometry from a triangle mesh.
// It should fallback to the source property.

Item {
    width: 640
    height: 480
    visible: true

    PhysicsWorld {
        scene: viewport.scene
        minimumTimestep: 16
        maximumTimestep: 16
        forceDebugDraw: true
    }

    View3D {
        id: viewport
        anchors.fill: parent

        environment: SceneEnvironment {
            clearColor: "#d6dbdf"
            backgroundMode: SceneEnvironment.Color
        }

        PerspectiveCamera {
            position: Qt.vector3d(-200, 100, 500)
            eulerRotation: Qt.vector3d(-20, -20, 0)
            clipFar: 5000
            clipNear: 1
        }

        DirectionalLight {
            eulerRotation.x: -45
            eulerRotation.y: 45
            castsShadow: true
            brightness: 1
            shadowFactor: 100
        }

        StaticRigidBody {
            position: Qt.vector3d(0, -100, 0)
            eulerRotation: Qt.vector3d(-90, 0, 0)
            collisionShapes: PlaneShape {}
            Model {
                source: "#Rectangle"
                scale: Qt.vector3d(10, 10, 1)
                materials: DefaultMaterial {
                    diffuseColor: "green"
                }
                castsShadows: false
                receivesShadows: true
            }
        }

        DynamicRigidBody {
            id: dynamicBox
            property bool hit : false
            onBodyContact: () => {
                dynamicBox.hit = true
            }
            receiveContactReports: true
            sendContactReports: true

            position: Qt.vector3d(-50, 300, 0)
            collisionShapes: ConvexMeshShape {
                geometry: ExampleTriangleGeometry { }
            }
            Model {
                geometry: ExampleTriangleGeometry { }
                materials: PrincipledMaterial {
                    baseColor: "yellow"
                }
            }

            onPositionChanged: frameAnimation.stepFrame()
        }

        StaticRigidBody {
            id: staticBox
            sendContactReports: true
            position: Qt.vector3d(0, 0, 0)
            scale: Qt.vector3d(1, 1, 1)
            collisionShapes: TriangleMeshShape {
                id: staticBoxShape
                geometry: ExampleTriangleGeometry { }
                source: "qrc:/data/tetrahedron.cooked.tri"
            }
        }
    }

    QtObject {
        id: frameAnimation
        property int frame: -1
        function stepFrame() {
            frame += 1;
            let step = frame % 2;
            if (step == 0) {
                staticBox.scale = Qt.vector3d(100, 100, 100)
                staticBoxShape.geometry = null
            } else if (step == 1) {
                staticBox.scale = Qt.vector3d(1, 1, 1)
                let shape = Qt.createQmlObject(`
                    import QtQuick
                    import QtQuick3D
                    import QtQuick3D.Physics
                    import QtQuick3D.Physics.Helpers
                    import Geometry
                    ExampleTriangleGeometry { }
                    `,
                    frameAnimation,
                    "myGeometry"
                );
                staticBoxShape.geometry = shape
            }
        }
    }

    TestCase {
        name: "scene"
        when: dynamicBox.hit
        function triggered() {  }
    }
}