Transform

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

Transform controlla la posizione, l’orientamento e la scala di un Node nella scena 3D. Ogni nodo ha esattamente uno Transform, accessibile tramite node.transform.

class Transform(A3DObject):

Accesso al Transform di un Node

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Offset di posizione dall’origine del nodo genitore. Predefinito Vector3(0, 0, 0).
scalingVector3Fattore di scala non uniforme per asse. Predefinito Vector3(1, 1, 1).
rotationQuaternionRotazione come quaternion unitario. Impostandolo si aggiornano anche euler_angles.
euler_anglesVector3Rotazione in gradi come angoli di Eulero (X, Y, Z). Impostandolo si aggiornano anche rotation.
pre_rotationVector3Angoli di Eulero applicati prima della rotazione principale (usati nei rig FBX).
post_rotationVector3Angoli di Eulero applicati dopo la rotazione principale.
geometric_translationVector3Traslazione solo locale: influisce sulla geometria ma non sui nodi figli.
geometric_scalingVector3Scala solo locale: influisce sulla geometria ma non sui nodi figli.
geometric_rotationVector3Rotazione solo locale: influisce sulla geometria ma non sui nodi figli.
transform_matrixMatrix4La matrice di trasformazione 4×4 completa combinata. Messa in cache; ricalcolata quando qualsiasi componente cambia. Impostandola si decompone nuovamente in traslazione/scalatura/rotazione.

Metodi Setter Fluent

Tutti i setter restituiscono self, consentendo il chaining:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatImposta la posizione.
set_scale(sx, sy, sz)float, float, floatImposta la scala.
set_euler_angles(rx, ry, rz)float, float, floatImposta la rotazione in gradi.
set_rotation(rw, rx, ry, rz)float, float, float, floatImposta la rotazione come quaternione (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatImposta la pre-rotazione in gradi.
set_post_rotation(rx, ry, rz)float, float, floatImposta la post-rotazione in gradi.
set_geometric_translation(x, y, z)float, float, floatImposta la traslazione geometrica.
set_geometric_scaling(sx, sy, sz)float, float, floatImposta la scala geometrica.
set_geometric_rotation(rx, ry, rz)float, float, floatImposta la rotazione geometrica in gradi.

Esempi d’uso

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

Ruota con angoli di Eulero

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)

Ruota con un quaternione

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

Scala e Posizione Insieme

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

Offset Geometrico (Offset del Pivot)

Le trasformazioni geometriche spostano la geometria rispetto al pivot del nodo senza influenzare i nodi figli; utile per centrare una mesh all’interno del suo 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)

Leggi la Matrice di Transform Combinata

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

Vedi anche

 Italiano