Interfaccia utente di Vuforia Studio > Riquadro Progetto > Risorse > Incorporare i dati sulla finestra di contenimento e sulla posizione della struttura di un modello 3D in un'esperienza
  
Incorporare i dati sulla finestra di contenimento e sulla posizione della struttura di un modello 3D in un'esperienza
L'API PTC.Structure fornisce informazioni sulla finestra di contenimento e sulla posizione di ogni parte di un modello 3D. È possibile utilizzare queste informazioni in un'esperienza per posizionare i widget (Immagine 3D, Etichetta, ecc.) relativi a un modello o singole parti all'interno di un modello.
* 
Per utilizzare questa API, la casella di controllo Consentire all'esperienza di accedere ai metadati CAD deve essere selezionata quando si importa un modello.
L'API è costituita da chiamate di funzioni per ottenere informazioni sulla finestra di contenimento e sulla posizione e da un insieme di oggetti JavaScript utilizzati per rappresentare e manipolare queste informazioni. Per utilizzare l'API PTC.Structure è necessario innanzitutto chiamare la funzione fromId(…), fornendo l'Id del modello 3D per cui si desidera recuperare le informazioni sulla struttura. Questa funzione restituisce una promessa JavaScript.
Queste API si basano su Promise. Per ulteriori informazioni su Promise, vedere https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise.
Ad esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
// Do something with ‘structure’
});
Funzioni API della struttura
Dichiarazione
Parametri
Descrizione
getBounds (idpath)
{string|string[]} idpath - percorso ID, ad esempio '/0/1' o una matrice di percorsi ID ['/0/1', '/0/2'].
{string|string[]} propName - (Facoltativo) ad esempio 'Display Name' o ['Display Name', 'Part ID Path'].
{string|string[]} categoryName - (Facoltativo) ad esempio 'PROE Parameters'.
Ottiene un oggetto metadati che rappresenta il percorso ID o i valori delle proprietà per i parametri idpath e propName specificati.
Questa funzione restituisce l'oggetto metadati che rappresenta il parametro idpath specificato. Se è specificato propName, restituisce il valore della proprietà sul componente.
Esempio:
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/6', 'Display Name')
});
getLocation (idpath)
{string|string[]} propName - (Facoltativo) ad esempio 'Display Name' o ['Display Name', 'Part ID Path'].
{string|string[]} categoryName - (Facoltativo) ad esempio 'PROE Parameters'.
Questa funzione restituisce tutti i valori delle proprietà string di un singolo componente o valori non definiti se non sono disponibili dati o componenti. Se il parametro propName specificato è una matrice, restituisce una string[] di valori.
Esempio:
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/1').getProp('Display Name');
});
Oggetto Structure.Bounds
L'oggetto Structure.Bounds rappresenta una finestra di contenimento allineata agli assi (AABB) in uno spazio 3D.
Proprietà dell'oggetto Structure.Bounds
Proprietà
Descrizione
min
Estensioni minime della finestra di contenimento, espresse come oggetto con proprietà x, y e z e un metodo asArray che restituisce questi tre valori come matrice.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var min_X = bounds.min.x;
}
max
Estensioni massime della finestra di contenimento, espresse come oggetto con proprietà x, y e z e un metodo asArray che restituisce questi tre valori come matrice.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var max_X = bounds.max.x;
}
center
Punto centrale della finestra di contenimento, espresso come oggetto con proprietà x, y e z e un metodo asArray che restituisce questi tre valori come matrice.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var center_X = bounds.center.x;
}
corners
Matrice degli 8 punti d'angolo della finestra di contenimento, ciascuno espresso come oggetto con proprietà x, y e z e un metodo asArray che restituisce questi tre valori come matrice.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var one_corner = bounds.corners[0];
var one_corner_X = one_corner.x
}
Funzioni dell'oggetto Structure.Bounds
Dichiarazione
Parametri
Descrizione
transform (position, rotation, scale)
{number[]|string[]|string} position - Componente posizionale della trasformata richiesta, fornito sotto forma di matrice di tre numeri ([0,0,5]), di matrice di stringhe che rappresentano i numeri ([‘0’,’0’,’5’]) o di una singola stringa di tre numeri separati da virgole (‘0,0,5’).
{number[]|string[]|string} rotation - Componente rotazionale della trasformata richiesta, fornito sotto forma di matrice di tre numeri ([0,0,5]), di matrice di stringhe che rappresentano i numeri ([‘0’,’0’,’5’]) o di una singola stringa di tre numeri separati da virgole (‘0,0,5’). Se omesso, non viene applicata una trasformata rotazionale.
{number[]|string[]|string|number} scale - Componente di scala della trasformata richiesta, fornito sotto forma di matrice di tre numeri ([0,0,5]), di matrice di stringhe che rappresentano i numeri ([‘0’,’0’,’5’]), di una singola stringa di tre numeri separati da virgole (‘0,0,5’) o di un singolo numero che fornisce un fattore di scala uniforme. Se omesso, si presuppone un fattore di scala di 1.
Restituisce un nuovo oggetto bounds che rappresenta la finestra di contenimento allineata agli assi che racchiude la finestra di contenimento originale sottoposta alla trasformazione di posizione, rotazione e scala specificata.
Questa operazione non apporta modifiche all'oggetto bounds originale.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var rotated_bounds = bounds.transform([0,0,0], [45, 0, 0], 1);
}
Oggetto Structure.Location
L'oggetto Structure.Location rappresenta una posizione nello spazio 3D, che comprende una posizione (offset traslazionale) e una rotazione (orientamento).
Proprietà dell'oggetto Structure.Location
Proprietà
Descrizione
matrix
Matrice di trasformazione 4x4 che rappresenta la posizione espressa come matrice principale della colonna.
position
Componente posizionale della posizione, espresso come oggetto con proprietà x, y e z e un metodo "asArray" che restituisce questi tre valori come matrice.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var pos_X = location.position.x;
}
rotation
Componente rotazionale della posizione, espresso come oggetto rotation.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var rot = location.rotation;
}
Funzioni dell'oggetto Structure.Location
Dichiarazione
Parametri
Descrizione
transform (position, rotation, scale)
{number[]|string[]|string} position - Componente posizionale della trasformata richiesta, fornito sotto forma di matrice di tre numeri ([0,0,5]), di matrice di stringhe che rappresentano i numeri ([‘0’,’0’,’5’]) o di una singola stringa di tre numeri separati da virgole (‘0,0,5’).
{number[]|string[]|string} rotation - Componente rotazionale della trasformata richiesta, fornito sotto forma di matrice di tre numeri ([0,0,5]), di matrice di stringhe che rappresentano i numeri ([‘0’,’0’,’5’]) o di una singola stringa di tre numeri separati da virgole (‘0,0,5’). Se omesso, non viene applicata una trasformata rotazionale.
{number[]|string[]|string|number} scale - Componente di scala della trasformata richiesta, fornito sotto forma di matrice di tre numeri ([0,0,5]), di matrice di stringhe che rappresentano i numeri ([‘0’,’0’,’5’]), di una singola stringa di tre numeri separati da virgole (‘0,0,5’) o di un singolo numero che fornisce un fattore di scala uniforme. Se omesso, si presuppone un fattore di scala di 1.
Restituisce un nuovo oggetto location che rappresenta la posizione originale sottoposta alla trasformazione di posizione, rotazione e scala specificata.
Questa operazione non apporta modifiche all'oggetto location originale.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var moved_location = location.transform([5,0,0], [0, 0, 0], 1);
}
Proprietà dell'oggetto Structure.Rotation
L'oggetto Structure.Rotation rappresenta una rotazione o un orientamento nello spazio 3D.
Oggetto Structure.Rotation
Proprietà
Descrizione
matrix
Matrice di rotazione 3x3 che rappresenta la rotazione espressa come matrice principale della colonna.
Funzioni dell'oggetto Structure.Rotation
Dichiarazione
Parametri
Descrizione
asEuler ()
Ottiene la rappresentazione di Eulero della rotazione. Si tratta di un oggetto con proprietà x, y e z e un metodo asArray che restituisce questi tre valori come matrice. I valori sono espressi in gradi.
Esempio:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var euler_array = location.rotation.asEuler().asArray();
}
Esempio di utilizzo
// Get the Structure information for model-1
PTC.Structure.fromId('model-1').then ( (structure) => {
// Get the properties of the 'model-1' widget
var widgetProps = $scope.view.wdg['model-1'];

// Get the bounding box information for part '/0/6'
var bbox = structure.getBounds('/0/6');

// Transform the bounding box to account for the 'model-1' widget's location
var xform_bbox = bbox.transform(
[widgetProps.x, widgetProps.y, widgetProps.z],
[widgetProps.rx, widgetProps.ry, widgetProps.rz],
widgetProps.scale);
// Move '3DImage-1' to the center of the bounding box
$scope.view.wdg['3DImage-1'].x = xform_bbox.center.x;
$scope.view.wdg['3DImage-1'].y = xform_bbox.center.y;
$scope.view.wdg['3DImage-1'].z = xform_bbox.center.z;
// Get the location information for part '/0/2/8'
var loc = structure.getLocation('/0/2/8');

// Transform the location to account for the 'model-1' widget's location
var xform_loc = loc.transform(
[widgetProps.x, widgetProps.y, widgetProps.z],
[widgetProps.rx, widgetProps.ry, widgetProps.rz],
widgetProps.scale);

// Get the rotational component as euler angles
var rot = xform_loc.rotation.asEuler();

// Rotate '3DImage-2' to match the rotation
$scope.view.wdg['3DImage-2'].rx = rot.x;
$scope.view.wdg['3DImage-2'].ry = rot.y;
$scope.view.wdg['3DImage-2'].rz = rot.z;
});