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) + ")";
© 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.