Упростить создание матрицы преобразования цепными операциями

Contents
[ ]

Предположим, есть экземпляр 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, конечная матрица вычисляется слева направо, что означает, что последняя матрица преобразования выполнит эти задачи:

  1. Измените (x, y, z) на (x 1, y, z)
  2. Поворот отдельно с осью Y с 180deg изменит (x, y, z) на (-x, y, -z)
  3. Масштаб на 2 изменит (x, y, z) на (2x, 2y, 2z)
  4. Измените (x, y, z) на (z, y, x)

Но если порядок сочинения-Append, порядок будет изменен так:

  1. Измените (x, y, z) на (z, y, x)
  2. Масштаб на 2 изменит (x, y, z) на (2x, 2y, 2z)
  3. Поворот отдельно с осью Y с 180deg изменит (x, y, z) на (-x, y, -z)
  4. Измените (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;