Transform

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

Transform موقعیت، جهت‌گیری و مقیاس یک را کنترل می‌کند Node در صحنهٔ سه‌بعدی. هر گره دقیقاً یک Transform, که از طریق node.transform.

class Transform(A3DObject):

دسترسی به Transform گره

from aspose.threed import Scene

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

Methods

MethodsMethodsMethods
translationVector3جابه‌جایی موقعیت نسبت به مبدأ گرهٔ والد. پیش‌فرض Vector3(0, 0, 0).
scalingVector3ضریب مقیاس غیر یکنواخت برای هر محور. پیش‌فرض Vector3(1, 1, 1).
rotationQuaternionچرخش به صورت یک کواترنیون واحد. تنظیم این مقدار همچنین به‌روزرسانی می‌کند euler_angles.
euler_anglesVector3چرخش به درجه به صورت زوایای اویلر (X, Y, Z). تنظیم این مقدار همچنین به‌روزرسانی می‌کند rotation.
pre_rotationVector3زاوایای اویلر که قبل از چرخش اصلی اعمال می‌شوند (در rigهای FBX استفاده می‌شود).
post_rotationVector3زاوایای اویلر که پس از چرخش اصلی اعمال می‌شوند.
geometric_translationVector3ترجمهٔ فقط محلی: بر هندسه تأثیر می‌گذارد اما بر گره‌های فرزند تأثیری ندارد.
geometric_scalingVector3مقیاس فقط محلی: بر هندسه تأثیر می‌گذارد اما بر گره‌های فرزند تأثیری ندارد.
geometric_rotationVector3چرخش فقط محلی: بر هندسه تأثیر می‌گذارد اما بر گره‌های فرزند تأثیری ندارد.
transform_matrixMatrix4ماتریس تبدیل ترکیبی کامل ۴×۴. کش شده؛ هنگام تغییر هر مؤلفه دوباره محاسبه می‌شود. تنظیم آن به‌صورت خودکار به ترجمه/مقیاس/چرخش تجزیه می‌شود.

متدهای تنظیم‌کنندهٔ زنجیره‌ای

همهٔ setterها مقدار باز می‌گردانند self,، که امکان زنجیره‌سازی را می‌دهد:

MethodsMethodsMethods
set_translation(tx, ty, tz)float, float, floatتنظیم موقعیت.
set_scale(sx, sy, sz)float, float, floatتنظیم مقیاس.
set_euler_angles(rx, ry, rz)float, float, floatتنظیم چرخش بر حسب درجه.
set_rotation(rw, rx, ry, rz)float, float, float, floatتنظیم چرخش به‌صورت کواترنیون (w, x, y, z).
set_pre_rotation(rx, ry, rz)float, float, floatچرخش پیشین را بر حسب درجه تنظیم کنید.
set_post_rotation(rx, ry, rz)float, float, floatچرخش پسین را بر حسب درجه تنظیم کنید.
set_geometric_translation(x, y, z)float, float, floatانتقال هندسی را تنظیم کنید.
set_geometric_scaling(sx, sy, sz)float, float, floatمقیاس هندسی را تنظیم کنید.
set_geometric_rotation(rx, ry, rz)float, float, floatچرخش هندسی را بر حسب درجه تنظیم کنید.

مثال‌های استفاده

موقعیت‌دهی به گره

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)

چرخش با زاویه‌های اویلر

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)

چرخش با یک کواترنیون

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

مقیاس و موقعیت به‌صورت همزمان

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

جابه‌جایی هندسی (جابه‌جایی نقطهٔ محوری)

تبدیل‌های هندسی، هندسه را نسبت به نقطهٔ محوری گره جابه‌جا می‌کنند بدون اینکه بر گره‌های فرزند تأثیر بگذارند؛ برای مرکز کردن یک مش داخل گرهٔ خود مفید است:

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)

خواندن ماتریس ترکیبی Transform

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

موارد مرتبط

 فارسی