Navigieren in Vuforia Studio > Fensterbereich "Projekt" > Ressourcen > Rahmen- und Positionsdaten der 3D-Modellstruktur in ein Erlebnis einbinden
  
Rahmen- und Positionsdaten der 3D-Modellstruktur in ein Erlebnis einbinden
Die PTC.Structure-API stellt Informationen zu Rahmen und Position für jedes Teils eines 3D-Modells bereit. Sie können diese Informationen in einem Erlebnis verwenden, um Widgets (3D-Bild, Beschriftung usw.) relativ zu einem Modell oder einzelnen Teilen innerhalb eines Modells zu positionieren.
* 
Wird ein Modell importiert, so muss das Kontrollkästchen Erlauben, dass Erlebnis Zugriff auf CAD-Metadaten hat aktiviert sein, damit diese API verwendet wird.
Die API besteht aus Funktionsaufrufen zum Abrufen der Rahmen- und der Positionsinformationen sowie aus einem Satz von JavaScript-Objekten, die zum Darstellen und Bearbeiten dieser Informationen verwendet werden. Um die PTC.Structure-API zu verwenden, müssen Sie zunächst die Funktion fromId(…) aufrufen und die Id des 3D-Modells angeben, für das Sie Strukturinformationen abrufen möchten. Diese Funktion gibt ein JavaScript-Versprechen zurück.
Diese APIs basieren auf Versprechen. Weitere Informationen zu Versprechen finden Sie unter: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
// Do something with ‘structure’
});
Struktur-API-Funktionen
Deklaration
Parameter
Beschreibung
getBounds (idpath)
{string|string[]} idpath – ID-Pfad, wie z.B. '/0/1', oder ein Array von ID-Pfaden ['/0/1', '/0/2'].
{string|string[]} propName – (Optional) Beispielsweise 'Display Name' oder ['Display Name', 'Part ID Path']
{string|string[]} categoryName – (Optional) Beispielsweise 'PROE Parameters'.
Ruft ein Metadatenobjekt ab, das den ID-Pfad oder die Eigenschaftswerte für die angegebenen Parameter idpath und propName darstellt.
Diese Funktion gibt das Metadatenobjekt zurück, welches den angegebenen Parameter idpath darstellt, oder, falls propName angegeben ist, dann den Wert der Eigenschaft auf der Komponente.
Beispiel:
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/6', 'Display Name')
});
getLocation (idpath)
{string|string[]} propName – (Optional) Beispielsweise 'Display Name' oder ['Display Name', 'Part ID Path']
{string|string[]} categoryName – (Optional) Beispielsweise 'PROE Parameters'.
Diese Funktion gibt alle Zeichenfolgen-Eigenschaftswerte aus einer einzelnen Komponente oder nicht definiert zurück, wenn keine Daten/Komponenten verfügbar sind. Ist der angegebene Parameter propName ein Array, wird ein string[] von Werten zurückgegeben.
Beispiel:
PTC.Metadata.fromId('model-1').then( (metadata) => {
var result = metadata.get('/0/1').getProp('Display Name');
});
Structure.Bounds-Objekt
Das Structure.Bounds-Objekt stellt einen an einer Achse ausgerichteten Rahmen (AABB) im 3D-Raum dar.
Eigenschaften des Structure.Bounds-Objekts
Eigenschaft
Beschreibung
min
Die minimale Ausdehnung des Rahmens, ausgedrückt als ein Objekt mit den Eigenschaften x, y und z, und eine asArray-Methode, die diese drei Werte als ein Array zurückgibt.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var min_X = bounds.min.x;
}
max
Die maximale Ausdehnung des Rahmens, ausgedrückt als ein Objekt mit den Eigenschaften x, y und z, und eine asArray-Methode, die diese drei Werte als ein Array zurückgibt.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var max_X = bounds.max.x;
}
center
Der Mittelpunkt des Rahmens, ausgedrückt als ein Objekt mit den Eigenschaften x, y und z, und eine asArray-Methode, die diese drei Werte als ein Array zurückgibt.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var bounds = structure.getBounds(‘/0/6’);
var center_X = bounds.center.x;
}
corners
Ein Array der 8 Eckpunkte des Rahmens, die jeweils als ein Objekt mit den Eigenschaften x, y und z ausgedrückt werden, und eine asArray-Methode, die diese drei Werte als ein Array zurückgibt.
Beispiel:
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
}
Funktionen des Structure.Bounds-Objekts
Deklaration
Parameter
Beschreibung
transform (position, rotation, scale)
{number[]|string[]|string} position – die Positionskomponente der erforderlichen Transformation, angegeben als Array mit drei Zahlen ([0,0,5]), als Array von Zeichenfolgen, welche Zahlen darstellen ([‘0’,’0’,’5’]) oder als eine einzelne Zeichenfolge mit drei durch Kommas getrennten Zahlen (‘0,0,5’)
{number[]|string[]|string} rotation – die Rotationskomponente der erforderlichen Transformation, angegeben als Array mit drei Zahlen ([0,0,5]), als Array von Zeichenfolgen, welche Zahlen darstellen ([‘0’,’0’,’5’]) oder als eine einzelne Zeichenfolge mit drei durch Kommas getrennten Zahlen (‘0,0,5’) Falls nicht angegeben, wird keine Rotationstransformation angewendet.
{number[]|string[]|string|number} scale – die Skalierungskomponente der erforderlichen Transformation, angegeben als Array mit drei Zahlen ([0,0,5]), als Array von Zeichenfolgen, welche Zahlen darstellen ([‘0’,’0’,’5’]), als eine einzelne Zeichenfolge mit drei durch Kommas getrennten Zahlen (‘0,0,5’) oder als eine einzelne Zahl, die einen einheitlichen Skalierungsfaktor angibt. Falls nicht angegeben, wird von einem Skalierungsfaktor von 1 ausgegangen.
Gibt ein neues bounds-Objekt zurück, das den an der Achse ausgerichteten Rahmen darstellt, welcher den ursprünglichen Rahmen einschließt, nachdem die angegebene Positions-, Rotations- und Skalierungstransformation durchgeführt wurde.
Das ursprüngliche bounds-Objekt bleibt durch diese Operation unverändert.
Beispiel:
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);
}
Structure.Location-Objekt
Das Structure.Location-Objekt stellt eine Position im 3D-Raum dar, die aus einer Position (translatorischem Versatz) und einer Rotation (Orientierung) besteht.
Eigenschaften des Structure.Location-Objekts
Eigenschaft
Beschreibung
matrix
Eine 4x4-Transformationsmatrix, welche die Position, ausgedrückt als Haupt-Array der Spalte, darstellt.
position
Die Positionskomponente der Position, ausgedrückt als ein Objekt mit den Eigenschaften x, y und z und eine asArray-Methode, die diese drei Werte als ein Array zurückgibt.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var pos_X = location.position.x;
}
rotation
Die Rotationskomponente der Position, ausgedrückt als Rotationsobjekt.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var rot = location.rotation;
}
Funktionen des Structure.Location-Objekts
Deklaration
Parameter
Beschreibung
transform (position, rotation, scale)
{number[]|string[]|string} position – die Positionskomponente der erforderlichen Transformation, angegeben als Array mit drei Zahlen ([0,0,5]), als Array von Zeichenfolgen, welche Zahlen darstellen ([‘0’,’0’,’5’]) oder als eine einzelne Zeichenfolge mit drei durch Kommas getrennten Zahlen (‘0,0,5’)
{number[]|string[]|string} rotation – die Rotationskomponente der erforderlichen Transformation, angegeben als Array mit drei Zahlen ([0,0,5]), als Array von Zeichenfolgen, welche Zahlen darstellen ([‘0’,’0’,’5’]) oder als eine einzelne Zeichenfolge mit drei durch Kommas getrennten Zahlen (‘0,0,5’) Falls nicht angegeben, wird keine Rotationstransformation angewendet.
{number[]|string[]|string|number} scale – die Skalierungskomponente der erforderlichen Transformation, angegeben als Array mit drei Zahlen ([0,0,5]), als Array von Zeichenfolgen, welche Zahlen darstellen ([‘0’,’0’,’5’]), als eine einzelne Zeichenfolge mit drei durch Kommas getrennten Zahlen (‘0,0,5’) oder als eine einzelne Zahl, die einen einheitlichen Skalierungsfaktor angibt. Falls nicht angegeben, wird von einem Skalierungsfaktor von 1 ausgegangen.
Gibt ein neues Positionsobjekt zurück, das die ursprüngliche Position darstellt, nachdem die angegebene Positions-, Rotations- und Skalierungstransformation durchgeführt wurde.
Das ursprüngliche Positionsobjekt bleibt durch diese Operation unverändert.
Beispiel:
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);
}
Eigenschaften des Structure.Rotation-Objekts
Das Structure.Rotation-Objekt stellt eine Rotation oder Orientierung im 3D-Raum dar.
Structure.Rotation-Objekt
Eigenschaft
Beschreibung
matrix
Eine 3x3-Rotationsmatrix, welche die Rotation, ausgedrückt als Haupt-Array der Spalte, darstellt.
Funktionen des Structure.Rotation-Objekts
Deklaration
Parameter
Beschreibung
asEuler ()
Ruft die euler-Darstellung der Rotation ab. Diese wird ausgedrückt als ein Objekt mit den Eigenschaften x, y und z, und eine asArray-Methode, die diese drei Werte als ein Array zurückgibt. Die Werte werden in Grad angegeben.
Beispiel:
PTC.Structure.fromId(‘model-1’).then( (structure) => {
var location = structure.getLocation(‘/0/6’);
var euler_array = location.rotation.asEuler().asArray();
}
Verwendungsbeispiel
// 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;
});