Mappage des informations géométriques avec l'événement userpick
Vous pouvez utiliser l'argument eventData de l'événement userpick pour obtenir les informations géométriques d'un modèle 3D. Ces informations peuvent ensuite être utilisées pour créer des points de cheminement ou des points d'intérêt.
|
Cette fonctionnalité n'est disponible que pour les modèles ; les cibles de zone, les cibles d'image et les images 3D ne sont pas prises en charge.
|
L'événement userpick inclut les données géométriques sous la forme d'un vecteur de position 3D constitué des coordonnées x, y et z du point sélectionné et de son vecteur normal à la surface 3D ; ces données sont appelées position et normal. Exemple :
{
"position": [
100.987,
-200.654,
300.321
],
"normal": [
0.6,
-0.8,
0.0
]
}
Les coordonnées de position et la normale à la surface du point de contact (appui) sont rapportées dans l'argument eventData sous forme de tableau (x, y, z) afin qu'elles puissent être sélectionnées par le module d'écoute d'événement :
$scope.$on('userpick', function(event, targetName, targetType, eventData)
Si les informations géométriques ne sont pas disponibles pour un événement userpick, les tableaux position et normal seront vides :
{
"position": [],
"normal": []
}
Exemple
Voici un exemple d'extrait de code qui peut être ajouté à Home.js :
|
• Les événements userpick sont uniquement disponibles pour les coordonnées universelles ; ils ne le sont pas pour les coordonnées relatives.
• Les événements userpick ne seront envoyés que pour le modèle.
|
$scope.$on('userpick', function (event, targetName, targetType, eventData) {
// event data will be empty for 3D images
//
if (eventData == []) {
console.error('Pick on unsupported object: No event data')
return
}
// the pick event gives us the item id, position and normal
//
let position = JSON.parse(eventData).position
// geometric information will not be available
// for unsupported objects
if (position.length != 3) {
console.error('Pick on unsupported object: No position data')
return
}
// put a "ball" at the point the user just touched
//
$scope.setWidgetProp("ball", "x", position[0]);
$scope.setWidgetProp("ball", "y", position[1]);
$scope.setWidgetProp("ball", "z", position[2]);
})