Transform

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

Transform controla la posición, orientación y escala de un Node en la escena 3D. Cada nodo tiene exactamente uno Transform, accedido a través de node.transform.

class Transform(A3DObject):

Accediendo al Transform de un Nodo

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Desplazamiento de posición desde el origen del nodo padre. Predeterminado Vector3(0, 0, 0).
scalingVector3Factor de escala no uniforme por eje. Predeterminado Vector3(1, 1, 1).
rotationQuaternionRotación como un cuaternión unitario. Configurar esto también actualiza euler_angles.
euler_anglesVector3Rotación en grados como ángulos de Euler (X, Y, Z). Configurar esto también actualiza rotation.
pre_rotationVector3Ángulos de Euler aplicados antes de la rotación principal (usados en rigs FBX).
post_rotationVector3Ángulos de Euler aplicados después de la rotación principal.
geometric_translationVector3Traslación solo local: afecta la geometría pero no a los nodos hijos.
geometric_scalingVector3Escala solo local: afecta la geometría pero no los nodos hijos.
geometric_rotationVector3Rotación solo local: afecta la geometría pero no los nodos hijos.
transform_matrixMatrix4La matriz de transformación 4×4 completa combinada. En caché; se recalcula cuando cualquier componente cambia. Al establecerla, se descompone de nuevo en traslación/escala/rotación.

Métodos Setter fluidos

Todos los setters devuelven self, lo que permite encadenar:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatEstablecer posición.
set_scale(sx, sy, sz)float, float, floatEstablecer escala.
set_euler_angles(rx, ry, rz)float, float, floatEstablecer rotación en grados.
set_rotation(rw, rx, ry, rz)float, float, float, floatEstablecer rotación como un cuaternión (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatEstablecer pre-rotación en grados.
set_post_rotation(rx, ry, rz)float, float, floatEstablecer post-rotación en grados.
set_geometric_translation(x, y, z)float, float, floatEstablecer traslación geométrica.
set_geometric_scaling(sx, sy, sz)float, float, floatEstablecer escala geométrica.
set_geometric_rotation(rx, ry, rz)float, float, floatEstablecer rotación geométrica en grados.

Ejemplos de uso

Posicionar un Nodo

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)

Rotar con á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)

Rotar con un cuaternión

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 y 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))

Desplazamiento geométrico (Desplazamiento del pivote)

Las transformaciones geométricas desplazan la geometría respecto al pivote del nodo sin afectar a los nodos hijos; es útil para centrar una malla dentro de su nodo:

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)

Leer la matriz de Transform 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'>

Ver también

 Español