Transform

Methods: aspose.threed (aspose-3d-foss)

Transform controla a posição, orientação e escala de um Node na cena 3D. Cada nó tem exatamente um Transform, acessado via node.transform.

class Transform(A3DObject):

Acessando o Transform de um Nó

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("box")
t = node.transform     # Transform object

Methods

MethodsMethodsMethods
translationVector3Deslocamento de posição a partir da origem do nó pai. Padrão Vector3(0, 0, 0).
scalingVector3Fator de escala não uniforme por eixo. Padrão Vector3(1, 1, 1).
rotationQuaternionRotação como um quaternion unitário. Definir isso também atualiza euler_angles.
euler_anglesVector3Rotação em graus como ângulos de Euler (X, Y, Z). Definir isso também atualiza rotation.
pre_rotationVector3Ângulos de Euler aplicados antes da rotação principal (usado em rigs FBX).
post_rotationVector3Ângulos de Euler aplicados após a rotação principal.
geometric_translationVector3Translação apenas local: afeta a geometria, mas não os nós filhos.
geometric_scalingVector3Escala apenas local: afeta a geometria, mas não os nós filhos.
geometric_rotationVector3Rotação apenas local: afeta a geometria, mas não os nós filhos.
transform_matrixMatrix4A matriz de transformação 4×4 completa combinada. Em cache; recalculada quando qualquer componente muda. Ao defini‑la, ela é decomposta de volta em translação/escala/rotação.

Métodos Setter Fluentes

Todos os setters retornam self, permitindo encadeamento:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatDefinir posição.
set_scale(sx, sy, sz)float, float, floatDefinir escala.
set_euler_angles(rx, ry, rz)float, float, floatDefinir rotação em graus.
set_rotation(rw, rx, ry, rz)float, float, float, floatDefinir rotação como um quaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatDefinir pré-rotação em graus.
set_post_rotation(rx, ry, rz)float, float, floatDefinir pós-rotação em graus.
set_geometric_translation(x, y, z)float, float, floatDefinir translação geométrica.
set_geometric_scaling(sx, sy, sz)float, float, floatDefinir escala geométrica.
set_geometric_rotation(rx, ry, rz)float, float, floatDefinir rotação geométrica em graus.

Exemplos de Uso

Posicionar um Node

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("box")

# Using fluent setters
node.transform.set_translation(5.0, 0.0, -3.0)

# Or via property assignment
from aspose.threed.utilities import Vector3
node.transform.translation = Vector3(5.0, 0.0, -3.0)

Rotacionar com Ângulos de Euler

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("rotated")

# Rotate 45° around Y axis
node.transform.set_euler_angles(0.0, 45.0, 0.0)

# Chain multiple operations
node.transform.set_translation(2.0, 0.0, 0.0).set_scale(2.0, 2.0, 2.0)

Rotacionar com um Quaternion

from aspose.threed import Scene
from aspose.threed.utilities import Quaternion, Vector3
import math

scene = Scene()
node = scene.root_node.create_child_node("q-rotated")

# 90° rotation around the Y axis
half_angle = math.radians(45)   # half the total rotation
q = Quaternion(math.cos(half_angle), 0.0, math.sin(half_angle), 0.0)
node.transform.rotation = q

print(f"Euler: {node.transform.euler_angles}")   # synced automatically

Escalar e Posicionar Juntos

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("big-offset")

(node.transform
    .set_translation(10.0, 0.0, 0.0)
    .set_scale(3.0, 3.0, 3.0)
    .set_euler_angles(0.0, 90.0, 0.0))

Deslocamento Geométrico (Deslocamento de Pivô)

Transformações geométricas deslocam a geometria em relação ao pivô do nó sem afetar os nós filhos; útil para centralizar uma malha dentro do seu nó:

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("centered-mesh")

# Shift the mesh half a unit down so its base sits at y=0
node.transform.set_geometric_translation(0.0, -0.5, 0.0)

Ler a Matriz de Transformação Combinada

from aspose.threed import Scene

scene = Scene()
node = scene.root_node.create_child_node("m")
node.transform.set_translation(1.0, 2.0, 3.0).set_euler_angles(0.0, 45.0, 0.0)

m = node.transform.transform_matrix
print(type(m))  # <class 'aspose.threed.utilities.Matrix4'>

Veja Também

 Português