ff4ff35918
Red Bear OS is a full fork. All sources must be available from git clone with zero network access. Removed gitignore rules that excluded fetched source trees under recipes/*/source/, local/recipes/kde/*/source/, local/recipes/qt/*/source/, and vendor source trees. Build artifacts (target/, build/, source.tar, *.o, *.so) remain excluded. 127291 files added — kernel, relibc, base, bootloader, pkgar, all KDE/Qt frameworks, mesa, wayland, DRM drivers, and every other recipe source.
127 lines
3.3 KiB
QML
127 lines
3.3 KiB
QML
// Copyright (C) 2019 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
|
|
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick3D
|
|
|
|
ApplicationWindow {
|
|
id: window
|
|
width: 1280
|
|
height: 720
|
|
visible: true
|
|
color: "black"
|
|
title: "Dynamic Model Creation example"
|
|
|
|
Column {
|
|
anchors.top: parent.top
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
anchors.margins: 20
|
|
|
|
Label {
|
|
id: countLabel
|
|
font.pointSize: 20
|
|
font.bold: true
|
|
color: "slategrey"
|
|
text: "No. models: " + shapeSpawner.count
|
|
}
|
|
|
|
Row {
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
spacing: 10
|
|
|
|
RoundButton {
|
|
text: "-"
|
|
font.bold: true
|
|
palette.button: "slategrey"
|
|
|
|
onClicked: shapeSpawner.removeShape()
|
|
}
|
|
|
|
RoundButton {
|
|
text: "+"
|
|
font.bold: true
|
|
palette.button: "slategrey"
|
|
|
|
onClicked: shapeSpawner.addShape()
|
|
}
|
|
}
|
|
}
|
|
|
|
View3D {
|
|
anchors.fill: parent
|
|
camera: camera
|
|
renderMode: View3D.Underlay
|
|
|
|
environment: SceneEnvironment {
|
|
clearColor: "black"
|
|
backgroundMode: SceneEnvironment.Color
|
|
antialiasingMode: SceneEnvironment.MSAA
|
|
antialiasingQuality: SceneEnvironment.High
|
|
}
|
|
|
|
PointLight {
|
|
position: Qt.vector3d(0, 0, 0);
|
|
brightness: 2.5
|
|
}
|
|
|
|
Node {
|
|
position: Qt.vector3d(0, 0, 0);
|
|
|
|
PerspectiveCamera {
|
|
position: Qt.vector3d(0, 0, 600)
|
|
}
|
|
|
|
SequentialAnimation on eulerRotation.y {
|
|
loops: Animation.Infinite
|
|
PropertyAnimation {
|
|
duration: 5000
|
|
to: 360
|
|
from: 0
|
|
}
|
|
}
|
|
}
|
|
|
|
//! [spawner node]
|
|
Node {
|
|
id: shapeSpawner
|
|
property real range: 300
|
|
property var instances: []
|
|
property int count
|
|
//! [spawner node]
|
|
|
|
//! [adding]
|
|
function addShape()
|
|
{
|
|
var xPos = (2 * Math.random() * range) - range;
|
|
var yPos = (2 * Math.random() * range) - range;
|
|
var zPos = (2 * Math.random() * range) - range;
|
|
var shapeComponent = Qt.createComponent("WeirdShape.qml");
|
|
let instance = shapeComponent.createObject(shapeSpawner,
|
|
{ "x": xPos, "y": yPos, "z": zPos, "scale": Qt.vector3d(0.25, 0.25, 0.25)});
|
|
instances.push(instance);
|
|
count = instances.length
|
|
}
|
|
//! [adding]
|
|
|
|
//! [removing]
|
|
function removeShape()
|
|
{
|
|
if (instances.length > 0) {
|
|
let instance = instances.pop();
|
|
instance.destroy();
|
|
count = instances.length
|
|
}
|
|
}
|
|
//! [removing]
|
|
}
|
|
|
|
//! [startup]
|
|
Component.onCompleted: {
|
|
for (var i = 0; i < 10; ++i)
|
|
shapeSpawner.addShape()
|
|
}
|
|
//! [startup]
|
|
}
|
|
}
|