Transformations (OpScript)
==========================

.. lua:module:: XFormUtils

Transformations
---------------

Generating Matrices
```````````````````

.. lua:function:: CalcTransformMatrixAtTime(GroupAttribute xform, number time) -> GroupAttribute
.. lua:function:: CalcTransformMatrixAtTimes(GroupAttribute xform, table<number> times) -> GroupAttribute
.. lua:function:: CalcTransformMatrixAtExistingTimes(GroupAttribute xform) -> xform

Authoring Transformations
-------------------------

.. lua:function:: InitXForm(GroupBuilder gb, [GroupAttribute|DoubleAttribute xform]) ->
.. lua:function:: PushRotateAttr(GroupBuilder gb, number angle, number x, number y, number z)
.. lua:function:: PushRotateAttr(Attribute attr, number angle, number x, number y, number z) -> Attribute
.. lua:function:: PushTranslateAttr(GroupBuilder gb, number x, number y, number z)
.. lua:function:: PushTranslateAttr(Attribute attr, number x, number y, number z) -> Attribute
.. lua:function:: PushScaleAttr(GroupBuilder gb, number x, number y, number z)
.. lua:function:: PushScaleAttr(Attribute attr, number x, number y, number z) -> Attribute
.. lua:function:: PushMatrixAttr(GroupBuilder gb, number[16] matrix)
.. lua:function:: PushMatrixAttr(Attribute attr, number[16] matrix) -> Attribute
.. lua:function:: PushOriginAttr(GroupBuilder gb)
.. lua:function:: PushOriginAttr(Attribute attr) -> Attribute

Handling Bounds
---------------

.. lua:function:: CreateBoundsAttr(number xMin, number xMax, number yMin, number yMax, number zMin, number zMax) -> DoubleAttribute
.. lua:function:: MergeBounds(DoubleAttribute boundsA, DoubleAttribute boundsB) -> DoubleAttribute
.. lua:function:: CalcTransformedBoundsAtExistingTimes(GroupAttribute|DoubleAttribute xform, DoubleAttribute bounds) -> DoubleAttribute
.. lua:function:: CollapseBoundsTimeSamples(DoubleAttribute bounds) -> DoubleAttribute