Previous:Transformation Order Main Index Next:Transforming Textures and Objects

### Transform Identifiers

At times it is useful to combine together several transformations and apply them in multiple places. A transform identifier may be used for this purpose. Transform identifiers are declared as follows:

TRANSFORM_DECLARATION:
`
  #declare
` IDENTIFIER `= transform{` TRANSFORMATION... `}` | `
  #local
` IDENTIFIER `= transform{` TRANSFORMATION... `}`

Where IDENTIFIER is the name of the identifier up to 40 characters long and TRANSFORMATION is any valid transformation modifier. See "#declare vs. #local" for information on identifier scope. Here is an example...

     #declare MyTrans = transform {

       rotate ThisWay

       scale SoMuch

       rotate -ThisWay

       scale Bigger

       translate OverThere

       rotate WayAround

      }

A transform identifier is invoked by the `transform` keyword without any brackets as shown here:

     object {

      MyObject      // Get a copy of MyObject

      transform MyTrans // Apply the transformation

      translate -x*5   // Then move it 5 units left

     }

     object {

      MyObject      // Get another copy of MyObject

      transform MyTrans // Apply the same transformation

      translate x*5   // Then move this one 5 units right

     }

On extremely complex CSG objects with lots of components it may speed up parsing if you apply a declared transformation rather than the individual `translate`, `rotate`, `scale`, or `matrix` modifiers. The `transform` is attached just once to each component. Applying each individual `translate`, `rotate`, `scale`, or `matrix` modifiers takes longer. This only affects parsing - rendering works the same either way.

Previous:Transformation Order Main Index Next:Transforming Textures and Objects