Transform

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

Transform controla la posició, orientació i escala d’un Node a l’escena 3D. Cada node té exactament un Transform, accedit a través de node.transform.

class Transform(A3DObject):

Accés al Transform d’un node

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Desplaçament de posició des de l’origen del node pare. Per defecte Vector3(0, 0, 0).
scalingVector3Factor d’escala no uniforme per eix. Per defecte Vector3(1, 1, 1).
rotationQuaternionRotació com a quaternió unitari. Configurar això també actualitza euler_angles.
euler_anglesVector3Rotació en graus com a angles d’Euler (X, Y, Z). Configurar això també actualitza rotation.
pre_rotationVector3Angles d’Euler aplicats abans de la rotació principal (utilitzats en rigs FBX).
post_rotationVector3Angles d’Euler aplicats després de la rotació principal.
geometric_translationVector3Traducció només local: afecta la geometria però no els nodes fills.
geometric_scalingVector3Escala només local: afecta la geometria però no els nodes fills.
geometric_rotationVector3Rotació només local: afecta la geometria però no els nodes fills.
transform_matrixMatrix4La matriu de transformació completa combinada de 4×4. Emmagatzemada en memòria cau; es recalcula quan qualsevol component canvia. En establir-la es descompon de nou en translation/scaling/rotation.

Mètodes de configuració fluents

Tots els setters retornen self, habilitant encadenament:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatEstableix la posició.
set_scale(sx, sy, sz)float, float, floatEstableix l’escala.
set_euler_angles(rx, ry, rz)float, float, floatEstableix la rotació en graus.
set_rotation(rw, rx, ry, rz)float, float, float, floatEstableix la rotació com a quaternió (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatEstableix la pre-rotació en graus.
set_post_rotation(rx, ry, rz)float, float, floatEstableix la post-rotació en graus.
set_geometric_translation(x, y, z)float, float, floatEstableix la translació geomètrica.
set_geometric_scaling(sx, sy, sz)float, float, floatEstableix l’escala geomètrica.
set_geometric_rotation(rx, ry, rz)float, float, floatEstableix la rotació geomètrica en graus.

Exemples d’ús

Posiciona un 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)

Gira amb angles d’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)

Gira amb un quaternió

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

Escala i posició juntes

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

Desplaçament geomètric (Desplaçament del pivot)

Les transformacions geomètriques desplacen la geometria respecte al pivot del node sense afectar els nodes fills; útil per centrar una malla dins del seu node:

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)

Llegeix la matriu de transformació 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'>

Vegeu també

 Català