Navigation dans Vuforia Studio > Volet Projet > Ressources > Incorporation de la boîte englobante et des données de position de la structure du modèle 3D dans une expérience
  
Incorporation de la boîte englobante et des données de position de la structure du modèle 3D dans une expérience
L'API PTC.Structure fournit des informations sur la boîte englobante et la position de chacune des pièces d'un modèle 3D. Vous pouvez utiliser ces informations dans une expérience pour positionner des widgets (Image 3D, Etiquette, etc.) par rapport à un modèle ou à une pièce spécifique du modèle.
* 
Pour utiliser cette API, la case Autoriser l'expérience à accéder aux métadonnées CAO doit être cochée lors de l'importation d'un modèle.
L'API se compose d'appels de fonction pour obtenir les informations de boîte englobante et de position, et d'un ensemble d'objets JavaScript utilisés pour représenter et manipuler ces informations. Pour utiliser l'API PTC.Structure, vous devez d'abord appeler la fonction fromId(…), en fournissant l'Id du modèle 3D pour lequel vous souhaitez récupérer les informations de structure ; cette fonction renvoie une promesse JavaScript.
Ces API sont basées sur Promise. Pour plus d'informations sur Promise, consultez la page https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
// Do something with ‘structure’
});
Fonctions de l'API de structure
Déclaration
Paramètres
Description
getBounds (idpath)
{string|string[]} idpath : chemin d'ID, par ex. '/0/1', ou tableau de chemins d'ID, par ex. ['/0/1', '/0/2'].
{string|string[]} propName : (facultatif) Exemple : 'Display Name' ou ['Display Name', 'Part ID Path']
{string|string[]} categoryName : (facultatif) Exemple : 'PROE Parameters'
Obtient un objet de métadonnées représentant le chemin d'ID ou les valeurs de propriété pour les idpath et propName spécifiés.
Cette fonction renvoie l'objet de métadonnées représentant l'idpath spécifié, ou si le propName est spécifié, la valeur de la propriété sur le composant.
Exemple :
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/6', 'Display Name')
});
getLocation (idpath)
{string|string[]} propName : (facultatif) Exemple : 'Display Name' ou ['Display Name', 'Part ID Path']
{string|string[]} categoryName : (facultatif) Exemple : 'PROE Parameters'
Cette fonction renvoie toutes les valeurs de propriété de type chaîne d'un composant unique ou des valeurs non définies si aucune donnée ou aucun composant n'est disponible. Si le propName spécifié est un tableau, elle renvoie une chaîne (string[]) de valeurs.
Exemple :
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/1').getProp('Display Name');
});
Objet Structure.Bounds
L'objet Structure.Bounds représente une boîte englobante alignée sur les axes (AABB) dans un espace 3D.
Propriétés de l'objet Structure.Bounds
Propriété
Description
min
Etendue minimale de la boîte englobante, exprimée en tant qu'objet avec les propriétés x, y et z, et une méthode asArray qui renvoie ces trois valeurs sous forme de tableau.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var min_X = bounds.min.x;
}
max
Etendue maximale de la boîte englobante, exprimée en tant qu'objet avec les propriétés x, y et z, et une méthode asArray qui renvoie ces trois valeurs sous forme de tableau.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var max_X = bounds.max.x;
}
center
Point central de la boîte englobante, exprimé en tant qu'objet avec les propriétés x, y et z, et une méthode asArray qui renvoie ces trois valeurs sous forme de tableau.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var center_X = bounds.center.x;
}
corners
Tableau des 8 points de coin de la boîte englobante, exprimés chacun sous forme d'un objet avec les propriétés x, y et z, et une méthode asArray qui renvoie ces trois valeurs sous forme de tableau.
Exemple :
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
}
Fonctions de l'objet Structure.Bounds
Déclaration
Paramètres
Description
transform (position, rotation, scale)
{number[]|string[]|string} position : composante positionnelle de la transformée requise, fournie sous forme d'un tableau de trois nombres ([0,0,5]), d'un tableau de chaînes représentant des nombres ([‘0’,’0’,’5’]) ou d'une chaîne unique de trois nombres séparés par des virgules (‘0,0,5’).
{number[]|string[]|string} rotation : composante rotationnelle de la transformée requise, fournie sous forme d'un tableau de trois nombres ([0,0,5]), d'un tableau de chaînes représentant des nombres ([‘0’,’0’,’5’]) ou d'une chaîne unique de trois nombres séparés par des virgules (‘0,0,5’). En cas d'omission, aucune transformée de rotation n'est appliquée.
{number[]|string[]|string|number} scale : composante d'échelle de la transformée requise, fournie sous forme d'un tableau de trois nombres ([0,0,5]), d'un tableau de chaînes représentant des nombres ([‘0’,’0’,’5’]), d'une chaîne unique de trois nombres séparés par des virgules (‘0,0,5’) ou d'un nombre unique spécifiant un facteur d'échelle uniforme. S'il est omis, un facteur d'échelle de 1 est utilisé.
Renvoie un nouvel objet de limites représentant la boîte englobante alignée sur les axes enveloppant la boîte englobante d'origine ayant subi la transformation de position, de rotation et d'échelle spécifiée.
L'objet de limites d'origine reste inchangé après cette opération.
Exemple :
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);
}
Objet Structure.Location
L'objet Structure.Location représente une position dans un espace 3D, comprenant une position (décalage de translation) et une rotation (orientation).
Propriétés de l'objet Structure.Location
Propriété
Description
matrix
Matrice de transformation 4x4 représentant la position exprimée sous forme d'un tableau colonne-majeur.
position
Composante positionnelle exprimée en tant qu'objet avec les propriétés x, y et z, et une méthode asArray qui renvoie ces trois valeurs sous forme de tableau.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var pos_X = location.position.x;
}
rotation
Composante rotationnelle de la position, exprimée sous forme d'un objet de rotation.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var rot = location.rotation;
}
Fonctions de l'objet Structure.Location
Déclaration
Paramètres
Description
transform (position, rotation, scale)
{number[]|string[]|string} position : composante positionnelle de la transformée requise, fournie sous forme d'un tableau de trois nombres ([0,0,5]), d'un tableau de chaînes représentant des nombres ([‘0’,’0’,’5’]) ou d'une chaîne unique de trois nombres séparés par des virgules (‘0,0,5’).
{number[]|string[]|string} rotation : composante rotationnelle de la transformée requise, fournie sous forme d'un tableau de trois nombres ([0,0,5]), d'un tableau de chaînes représentant des nombres ([‘0’,’0’,’5’]) ou d'une chaîne unique de trois nombres séparés par des virgules (‘0,0,5’). En cas d'omission, aucune transformée de rotation n'est appliquée.
{number[]|string[]|string|number} scale : composante d'échelle de la transformée requise, fournie sous forme d'un tableau de trois nombres ([0,0,5]), d'un tableau de chaînes représentant des nombres ([‘0’,’0’,’5’]), d'une chaîne unique de trois nombres séparés par des virgules (‘0,0,5’) ou d'un nombre unique spécifiant un facteur d'échelle uniforme. S'il est omis, un facteur d'échelle de 1 est utilisé.
Renvoie un nouvel objet de position représentant la position d'origine ayant subi la transformation de position, de rotation et d'échelle spécifiée.
La position d'origine de l'objet reste inchangée après cette opération.
Exemple :
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);
}
Propriétés de l'objet Structure.Rotation
L'objet Structure.Rotation représente une rotation ou une orientation dans un espace 3D.
Objet Structure.Rotation
Propriété
Description
matrix
Matrice de rotation 3x3 représentant la rotation exprimée sous forme de tableau colonne-majeur.
Fonctions de l'objet Structure.Rotation
Déclaration
Paramètres
Description
asEuler ()
Obtient la représentation Euler de la rotation. Il s'agit d'une expression en tant qu'objet avec les propriétés x, y et z, et d'une méthode asArray qui renvoie ces trois valeurs sous forme de tableau. Les valeurs sont exprimées en degrés.
Exemple :
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var euler_array = location.rotation.asEuler().asArray();
}
Exemple d'utilisation
// 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;
});