通过链式操作简化变换矩阵的创建
Contents
[
Hide
]
Aspose.3D for Python via .NET API 提供了
TransformBuilder
类,它通过链操作简化了变换矩阵的创建。
假设有一个 TransformBuilder
实例结核病,以及连锁经营:
Python
import aspose.threed as a3d
# Change the (x, y, z) into (x + 1, y, z)
tb = a3d.utilities.TransformBuilder(a3d.utilities.ComposeOrder.APPEND)
a = tb.translate(1, 0, 0)
# Rotate alone with the Y axis with 180 deg will change the (x, y, z) into (-x, y, -z)
.rotate_euler_degree(0, 180, 0)
# Scale by 2 will change the (x, y, z) into (2x, 2y, 2z)
.scale(2)
# change the (x, y, z) into (z, y, x)
.rearrange(a3d.Axis.Z_AXIS, a3d.Axis.Y_AXIS, a3d.Axis.X_AXIS)
.matrix
如果此实例的合成顺序为Prepend,则从左到右计算最终矩阵,这意味着最终转换矩阵将执行以下任务:
- 将 (x,y,z) 改为 (x 1,y,z)
- 以180度的y轴单独旋转会将 (x,Y,z) 变为 (-x,y,-z)
- 缩放2将把 (x,y,z) 变成 (2x,2y,2z)
- 将 (x,y,z) 改为 (z,y,x)
但是,如果附加了撰写顺序,则顺序将反转,例如:
- 将 (x,y,z) 改为 (z,y,x)
- 缩放2将把 (x,y,z) 变成 (2x,2y,2z)
- 以180度的y轴单独旋转会将 (x,Y,z) 变为 (-x,y,-z)
- 将 (x,y,z) 改为 (x 1,y,z)
Python
import aspose.threed as a3d
# use prepend order so the calculation is performed from left to right:
m = (a3d.utilities.TransformBuilder(a3d.utilities.ComposeOrder.PREPEND))
# Change the (x, y, z) into (x + 1, y, z)
.translate(1, 0, 0)
# Rotate alone with the Y axis with 180deg will change the (x, y, z) into (-x, y, -z)
.rotate_euler_degree(0, 180, 0)
# Scale by 2 will change the (x, y, z) into (2x, 2y, 2z)
.scale(2)
# change the (x, y, z) into (z, y, x)
.rearrange(a3d.Axis.Z_AXIS, a3d.Axis.Y_AXIS, a3d.Axis.X_AXIS)
.matrix
# Apply this matrix on a (0, 0, 0) vector, then we get the right result (0, 0, -2)
t = m * a3d.utilities.Vector3.ORIGIN;