Transformations and Bounds
==========================

.. list-table::
    :header-rows: 1
    :widths: 5 20 75
    :class: attributes

    - * Type
      * Attribute
      * Description

    - * :kat:type:`double[6]`
      * :kat:attr:`bound`
      * List of six doubles defining two points that define a bounding box. The
        order of the values is xmin, xmax, ymin, ymax, zmin, and zmax.
        Bounds are in local (object) space, not world space.

    - * :kat:type:`group`
      * :kat:attr:`xform.<group>`
      * The ``xform`` attribute contains a sub-group for every transform in the
        order these transforms are applied. A sub-group with the name
        interactive contains the transform used for manipulation in the Viewer.

        An object can have only one interactive group. If another transform is
        added (using a :kat:node:`Transform3D` node for example), the previous
        interactive group automatically gets renamed.

        The group can be any arbitrary name, but uses the conventions:
        occurrence of ``interactive`` to receive transformations for the
        :kat:ui:`Viewer`, ``constraintN`` for any number of constraints, or
        ``groupN`` for the default group of regular transforms created by
        :kat:node:`Transform3D` nodes.

        This supports an arbitrary list of transform commands, similar to
        ``RiScale`` and ``RiTranslate`` in PRMan.

        The name prefix (``translate``, ``rotate``, ``scale``, ``matrix``,
        ``origin``) is how Katana determines how to use each ``xform`` child
        attribute it finds.

        .. note::
            Transform commands can be grouped together in sub-groups, or they
            can be declared without sub-groups, for example ``xform.rotateX``
            instead of ``xform.<group>.rotateX``.

    - * :kat:type:`double[3]`
      * :kat:attr:`xform.<group>.translate`
      * Translation on the xyz axes.


    - * :kat:type:`double[4]`
      * :kat:attr:`xform.<group>.rotateX`
      * The first number indicates the angle of rotation. The remaining three
        define the axis of rotation (1.0/0.0/0.0 for X axis).


    - * :kat:type:`double[4]`
      * :kat:attr:`xform.<group>.rotateY`
      * The first number indicates the angle of rotation. The remaining three
        define the axis of rotation (0.0/1.0/0.0 for Y axis).


    - * :kat:type:`double[4]`
      * :kat:attr:`xform.<group>.rotateZ`
      * The first number indicates the angle of rotation. The remaining three
        define the axis of rotation (0.0/0.0/1.0 for Z axis).


    - * :kat:type:`double[3]`
      * :kat:attr:`xform.<group>.scale`
      * Scale on the xyz axes.


    - * :kat:type:`double[16]`
      * :kat:attr:`xform.<group>.matrix`
      * A 4x4 homogenous matrix transformation.


    - * :kat:type:`double`
      * :kat:attr:`xform.<group>.origin`
      * Resets the transformation to identity, ignoring everything prior to it
        in the transformation stack. This is synonymous with the
        ``RiIdentity()`` attribute in the RenderMan specification.

        .. note::
            The presence of this attribute is all that is required to set the
            transform to identity. The value is ignored but the type must be
            double.