Navegar por Vuforia Studio > Panel Proyecto > Recursos > Incorporar la caja de la estructura del modelo 3D y los datos de ubicación en una experiencia
  
Incorporar la caja de la estructura del modelo 3D y los datos de ubicación en una experiencia
La API de PTC.Structure proporciona información sobre la caja y la ubicación de cada pieza de un modelo 3D. Puede utilizar esta información en una experiencia para posicionar widgets (Imagen 3D, Etiqueta, etc.) en relación con un modelo, o piezas individuales dentro de un modelo.
* 
Para utilizar esta API, la casilla Permitir el acceso de la experiencia a metadatos de CAD debe estar seleccionada al importar un modelo.
La API consta de llamadas a funciones para obtener la caja y la información de ubicación, y de un conjunto de objetos JavaScript utilizados para representar y manipular esta información. Para utilizar la API de PTC.Structure, primero debe llamar a la función fromId(…). Para ello, proporcione el Id del modelo 3D cuya información de estructura desea recuperar; esta función devuelve un valor de JavaScript.
Estas API se basan en un valor. Para obtener más información sobre los valores, consulte https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise.
Por ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
// Do something with ‘structure’
});
Funciones de API de estructura
Declaración
Parámetros
Descripción
getBounds (idpath)
{string|string[]} idpath: Ruta de ID como '/0/1', o matriz de rutas de ID ['/0/1', '/0/2'].
{string|string[]} propName: (Opcional) Por ejemplo, 'Display Name' o ['Display Name', 'Part ID Path'].
{string|string[]} categoryName: (Opcional) Por ejemplo, 'PROE Parameters'.
Obtiene un objeto de metadatos que representa la ruta de ID o los valores de propiedad de idpath y propName dados.
Esta función devuelve el objeto de metadatos que representa la idpath dada. Si se da propName, devuelve el valor de la propiedad del componente.
Ejemplo:
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/6', 'Display Name')
});
getLocation (idpath)
{string|string[]} propName: (Opcional) Por ejemplo, 'Display Name' o ['Display Name', 'Part ID Path'].
{string|string[]} categoryName: (Opcional) Por ejemplo, 'PROE Parameters'.
Esta función devuelve todos los valores de las propiedades string de un solo componente, o bien sin definir si no hay datos o componentes disponibles. Si el valor de propName dado era una matriz, devuelve string[] de valores.
Ejemplo:
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/1').getProp('Display Name');
});
Objeto Structure.Bounds
El objeto Structure.Bounds representa una caja alineada con el eje (AABB) en el espacio 3D.
Propiedades del objeto Structure.Bounds
Propiedad
Descripción
min
Las extensiones mínimas de la caja, expresadas como un objeto con propiedades x, y y z. Es un método asArray que devuelve estos tres valores como una matriz.
Ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var min_X = bounds.min.x;
}
max
Las extensiones máximas de la caja, expresado como un objeto con las propiedades x, y z. Es un método asArray que devuelve estos tres valores como una matriz.
Ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var max_X = bounds.max.x;
}
center
El punto central de la caja, expresado como un objeto con propiedades x, y y z. Es un método asArray que devuelve estos tres valores como una matriz.
Ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var center_X = bounds.center.x;
}
corners
Una matriz de los 8 puntos de ángulo de la caja, cada uno de ellos expresado como un objeto con propiedades x, y y z. Es un método asArray que devuelve estos tres valores como una matriz.
Ejemplo:
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
}
Funciones del objeto Structure.Bounds
Declaración
Parámetros
Descripción
transform (posición, rotación, escala)
{number[]|string[]|string} position: el componente posicional de la transformación requerida, proporcionado como una matriz de tres números ([0,0,5]), una matriz de cadenas que representan números ([‘0’,’0’,’5’]) o una única cadena de tres números separados por comas (‘0,0,5’).
{number[]|string[]|string} rotation: el componente rotacional de la transformación requerida, proporcionado como una matriz de tres números ([0,0,5]), una matriz de cadenas que representan números ([‘0’,’0’,’5’]) o una única cadena de tres números separados por comas (‘0,0,5’). Si se omite, no se aplica ninguna transformación rotacional.
{number[]|string[]|string|number} scale: el componente de escala de la transformación requerida, proporcionado como una matriz de tres números ([0,0,5]), una matriz de cadenas que representan números ([‘0’,’0’,’5’]), una única cadena de tres números separados por comas (‘0,0,5’) o un número único que indica un factor de escala uniforme. Si se omite, se asume un factor de escala de 1.
Devuelve un nuevo objeto de límites que representa la caja alineada con el eje que encierra la caja original, y que ha sufrido la transformación posicional, rotacional y de escala especificadas.
El objeto de límites original no se modifica con esta operación.
Ejemplo:
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);
}
Objeto Structure.Location
El objeto Structure.Location representa una ubicación en el espacio tridimensional, que comprende una posición (desplazamiento traslacional) y una rotación (orientación).
Propiedades del objeto Structure.Location
Propiedad
Descripción
matrix
Una matriz de transformación 4x4 que representa la ubicación expresada como una matriz columna-mayor.
position
El componente posicional de la ubicación, expresado como un objeto con propiedades x, y y z. Es un método 'asArray' que devuelve estos tres valores como una matriz.
Ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var pos_X = location.position.x;
}
rotation
El componente rotacional de la ubicación, expresado como un objeto de rotación.
Ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var rot = location.rotation;
}
Funciones del objeto Structure.Location
Declaración
Parámetros
Descripción
transform (posición, rotación, escala)
{number[]|string[]|string} position: el componente posicional de la transformación requerida, proporcionado como una matriz de tres números ([0,0,5]), una matriz de cadenas que representan números ([‘0’,’0’,’5’]) o una única cadena de tres números separados por comas (‘0,0,5’).
{number[]|string[]|string} rotation: el componente rotacional de la transformación requerida, proporcionado como una matriz de tres números ([0,0,5]), una matriz de cadenas que representan números ([‘0’,’0’,’5’]) o una única cadena de tres números separados por comas (‘0,0,5’). Si se omite, no se aplica ninguna transformación rotacional.
{number[]|string[]|string|number} scale: el componente de escala de la transformación requerida, proporcionado como una matriz de tres números ([0,0,5]), una matriz de cadenas que representan números ([‘0’,’0’,’5’]), una única cadena de tres números separados por comas (‘0,0,5’) o un número único que indica un factor de escala uniforme. Si se omite, se asume un factor de escala de 1.
Devuelve un nuevo objeto de ubicación que representa la ubicación original que ha sufrido la transformación posicional, rotacional y de escala especificadas.
El objeto de ubicación original no se modifica con esta operación.
Ejemplo:
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);
}
Propiedades del objeto Structure.Rotation
El objeto Structure.Rotation representa una rotación u orientación en el espacio 3D.
Objeto Structure.Rotation
Propiedad
Descripción
matrix
Una matriz de rotación 3x3 que representa la rotación expresada como una matriz columna-mayor.
Funciones del objeto Structure.Rotation
Declaración
Parámetros
Descripción
asEuler ()
Obtiene la representación euler de la rotación. Se expresa como un objeto con propiedades x, y z. Es un método asArray que devuelve estos tres valores como una matriz. Los valores se muestran en grados.
Ejemplo:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var euler_array = location.rotation.asEuler().asArray();
}
Ejemplo de uso
// 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;
});