Transform

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

Transform ovládá pozici, orientaci a měřítko Node ve 3D scéně. Každý uzel má přesně jeden Transform, přístupný přes node.transform.

class Transform(A3DObject):

Přístup k Transformaci uzlu

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3Posun pozice od počátku rodičovského uzlu. Výchozí Vector3(0, 0, 0).
scalingVector3Nerovnoměrný faktor měřítka na osu. Výchozí Vector3(1, 1, 1).
rotationQuaternionRotace jako jednotkový kvaternion. Nastavení tohoto také aktualizuje euler_angles.
euler_anglesVector3Rotace ve stupních jako (X, Y, Z) Eulerovy úhly. Nastavení tohoto také aktualizuje rotation.
pre_rotationVector3Eulerovy úhly aplikované před hlavní rotací (použité v FBX rigách).
post_rotationVector3Eulerovy úhly aplikované po hlavní rotaci.
geometric_translationVector3Pouze lokální translace: ovlivňuje geometrii, ale ne podřízené uzly.
geometric_scalingVector3Pouze lokální měřítko: ovlivňuje geometrii, ale ne podřízené uzly.
geometric_rotationVector3Pouze lokální rotace: ovlivňuje geometrii, ale ne podřízené uzly.
transform_matrixMatrix4Plná kombinovaná 4×4 transformační matice. Cached; recomputed, když se změní jakákoli komponenta. Nastavením se rozloží zpět na translation/scaling/rotation.

Plynulé metody nastavení

Všechny settery vracejí self, což umožňuje řetězení:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatNastavte pozici.
set_scale(sx, sy, sz)float, float, floatNastavte měřítko.
set_euler_angles(rx, ry, rz)float, float, floatNastavte rotaci ve stupních.
set_rotation(rw, rx, ry, rz)float, float, float, floatNastavte rotaci jako kvaternion (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatNastavte předrotaci ve stupních.
set_post_rotation(rx, ry, rz)float, float, floatNastavte postrotaci ve stupních.
set_geometric_translation(x, y, z)float, float, floatNastavte geometrický posun.
set_geometric_scaling(sx, sy, sz)float, float, floatNastavte geometrické měřítko.
set_geometric_rotation(rx, ry, rz)float, float, floatNastavte geometrickou rotaci ve stupních.

Příklady použití

Umístění uzlu

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)

Rotace pomocí Eulerových úhlů

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)

Rotace pomocí kvaternionu

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

Měřítko a pozice společně

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

Geometrický posun (posun pivotu)

Geometrické transformace posunou geometrii relativně k pivotu uzlu, aniž by ovlivnily podřízené uzly; užitečné pro vycentrování sítě v rámci jejího uzlu:

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)

Načíst kombinovanou transformační matici

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

Viz také

 Čeština