Qt Quick 3D - Beispiel für die Kommissionierung

Demonstriert die Kommissionierung von Modellen.

Dieses Beispiel demonstriert das Picking. Es gibt 3 verschiedene animierte Modelle, die ausgewählt werden können. Wenn ein Modell gepickt wird, wird die Animation angehalten und die Farbe des Modells geändert, um zu verdeutlichen, welches Modell gepickt wurde. Detaillierte Informationen über das Ergebnis der Auswahl werden im oberen Teil des Anwendungsfensters angezeigt.

Modell auswählbar machen

Um ein Modell auswählbar zu machen, muss die Eigenschaft pickable auf true gesetzt werden. Wir fügen auch objectName für das Modell hinzu, um den Namen des ausgewählten Modells anzeigen zu können.

Model {
    id: cubeModel
    objectName: "Cube"
    source: "#Cube"
    pickable: true
    property bool isPicked: false

Die Eigenschaft isPicked wurde hinzugefügt, damit die Animation und die Farbe umgeschaltet werden können.

materials: DefaultMaterial {
    diffuseColor: cubeModel.isPicked ? "#41cd52" : "#09102b"
    ...
SequentialAnimation on eulerRotation {
    running: !cubeModel.isPicked

Pick-Ergebnisse abrufen

Für die eigentliche Kommissionierung müssen wir ein MouseArea hinzufügen, das die gesamte View3D abdeckt.

MouseArea {
    anchors.fill: view

Im onClicked Handler des Mausbereichs verwenden wir die pick Methode, um das tatsächliche Ergebnis der Auswahl zu erhalten.

var result = view.pick(mouse.x, mouse.y);

Wenn das Ergebnis eine target object hat, gehen wir die Einzelheiten des Ergebnisses durch und zeigen sie im Textfeld am oberen Rand der Anwendungsansicht an.

if (result.objectHit) {
    var pickedObject = result.objectHit;
    // Toggle the isPicked property for the model
    pickedObject.isPicked = !pickedObject.isPicked;
    // Get picked model name
    pickName.text = pickedObject.objectName;
    // Get other pick specifics
    uvPosition.text = "("
            + result.uvPosition.x.toFixed(2) + ", "
            + result.uvPosition.y.toFixed(2) + ")";
    distance.text = result.distance.toFixed(2);
    scenePosition.text = "("
            + result.scenePosition.x.toFixed(2) + ", "
            + result.scenePosition.y.toFixed(2) + ", "
            + result.scenePosition.z.toFixed(2) + ")";
    localPosition.text = "("
            + result.position.x.toFixed(2) + ", "
            + result.position.y.toFixed(2) + ", "
            + result.position.z.toFixed(2) + ")";
    worldNormal.text = "("
            + result.sceneNormal.x.toFixed(2) + ", "
            + result.sceneNormal.y.toFixed(2) + ", "
            + result.sceneNormal.z.toFixed(2) + ")";
    localNormal.text = "("
            + result.normal.x.toFixed(2) + ", "
            + result.normal.y.toFixed(2) + ", "
            + result.normal.z.toFixed(2) + ")";

Beispielprojekt @ code.qt.io

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.