Estensione di funzionalità in Vuforia Studio con codice > Mappatura di informazioni geometriche con l'evento userpick
Mappatura di informazioni geometriche con l'evento userpick
È possibile utilizzare l'argomento eventData dell'evento userpick per ottenere le informazioni geometriche di un modello 3D. Queste informazioni possono essere quindi utilizzate per creare waypoint o punti di interesse.
* 
Questa funzionalità è disponibile solo per i modelli. Gli area target, gli image target e le immagini 3D non sono supportati.
L'evento userpick include i dati geometrici sotto forma di vettore di posizione 3D costituito dalle coordinate x, y e z del punto selezionato e dal relativo vettore normale alla superficie 3D. Questi dati sono denominati position e normal. Ad esempio:
{
"position": [
100.987,
-200.654,
300.321
],
"normal": [
0.6,
-0.8,
0.0
]
}
Le coordinate della posizione e la normale alla superficie del punto di contatto vengono riportate nell'argomento eventData come matrice (x, y, z) in modo che possano essere rilevate dal listener di eventi:
$scope.$on('userpick', function(event, targetName, targetType, eventData)
Se le informazioni geometriche non sono disponibili per un evento userpick, le matrici di posizione e normale saranno vuote:
{
"position": [],
"normal": []
}
Esempio
Di seguito è riportato un esempio di snippet di codice che è possibile aggiungere al file Home.js:
* 
Gli eventi userpick sono disponibili solo per le coordinate globali, ma non per le coordinate relative.
Gli eventi userpick vengono inviati solo per il modello.
$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]);
})
È stato utile?