Qt Quick 3D - Dynamic Model Creation Example

This example demonstrates creating models dynamically in an application. 10 models are created dynamically at the start of the application, and more can be added or removed using the Add Model and Remove Model buttons.

Image non disponible

Setting Up

 

Spawner Node

We are going to need a Node to hold the dynamically created models.

 
Sélectionnez
Node {
    id: shapeSpawner
    property real range: 300
    property var instances: []
    property int count
    ...

Startup

We're creating 10 models at Component.onCompleted so the example shows something at startup.

 
Sélectionnez
Component.onCompleted: {
    for (var i = 0; i < 10; ++i)
        shapeSpawner.addShape()
}

Dynamic Models

 

Adding Models

In order to add a new item to the scene, we first use the Qt.createComponent function to create a Component for our model. Then we use the component's createObject function to instantiate the item, passing in the position and scale as parameters.

 
Sélectionnez
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
}

Removing Models

Dynamically created models are removed simply by popping and destroying them from the instance stack.

 
Sélectionnez
function removeShape()
{
    if (instances.length > 0) {
        let instance = instances.pop();
        instance.destroy();
        count = instances