8. Geometry Data

Geometry data records are used for dynamic joints, terminal control frames (latter two apply to sets only) and for general cell positioning and scaling. Note: There are two formats for geometry data: standard and matrix form. Only the former is documented here. Matrix form consists of a 4x4 matrix for geometry data and is typically used only when working with graphics that have been converted, by a now defunct AutoMod utility called IGES/Sim, from IGES format. This document describes the standard form only. Standard geometry is used if cell flag bit 3 is clear; matrix geometry is used if this bit is set. Geometry data is made up of three records that describe translation (linear displacement of the local origin along each axis, relative to the parent's local axes), rotation order & rotation (rotational displacement around each local axis) and scaling (a multiplier for all distances measured along each local axis). Each geometry operation repositions the cell's local origin and orientation, which is passed onto, and inherited by, each child cell.

8.1 Translation

This record consists of three fields: the translations along the local X, Y and Z axes, respectively. There is no standard convention for the appearance of this record, ACE seems to employ a slightly different format for each circumstance, but the most common is:

<spc><spc>XTran<spc>YTran<spc>ZTran<nl>

where XTran is a double containing the local X-axis translation, YTran is a double containing the local Y-axis translation, ZTran is a double containing the local Z-axis translation, <spc> is the space character and <nl> is the newline sequence.

Note the term "local" when referring to the translation along each axis; the translation is dependent upon the current orientation of the cell. Refer to the section on rotation for additional information. However, translations are applied before the rotation and scaling transformations from the same geometry record.

If geometry data is not present, then the translation values all default to 0.

8.2 Rotation

This record consists of four fields, of which the most common format is as follows:

XYZOrder<spc>Rot1<spc>Rot2<spc>Rot3<nl>

where XYZOrder is an integer indicating the XYZ rotation order (see below), and Rot1, Rot2 and Rot3 are all doubles identifying a rotation, in degrees, about a local axis; which axis is governed by XYZOrder. <spc> is the space character and <nl> is the newline sequence. Note that positive rotation values indicate counter-clockwise rotation, and negative values indicate clockwise rotation.

Note the term "local" when referring to the rotation about an axis; the rotation is dependent upon the current orientation of the cell. For example, if a cell's parent is rotated 90 degrees about the Z-axis, then the local X-axis of all child cells is aligned with the global Y-axis, and the local Y-axis of all child cells is aligned with the global negative X-axis. Note also that rotations are applied after any required translation, but before the scaling transformation, from the same geometry record.

XYZOrder has one of the following values, with the corresponding interpretation:

Value X, Y, Z Order
0 X, then Y, then Z
1 X, then Z, then Y
2 Y, then X, then Z
3 Y, then Z, then X
4 Z, then X, then Y
5 Z, then Y, then X

For example, if the XYZ order is 3, then a rotation of Rot1 is applied to the Y-axis, Rot2 to the Z-axis and Rot3 to the X-axis. These rotations are applied in the order indicated, with the cell's local orientation changing with each.

If geometry data is not present, then the XYZ order defaults to 0 (X, then Y, then Z) and the rotations all default to 0.0 degrees.

8.3 Scaling

This record consists of three fields, of which the most common format is as follows:

<spc><spc>XScale<spc>YScale<spc>ZScale<nl>

where XScale is a double containing the local X-axis scaling, YScale is a double containing the local Y-axis scaling, ZScale is a double containing the local Z-axis scaling, <spc> is the space character and <nl> is the newline sequence.

The specified scaling is applied, as a multiplier, to all dimensions along the corresponding local axis.

If geometry data is not present, then the scaling values all default to 1. Scaling transformations are applied after all translation and rotation transformations from the same geometry record.

8.4 Examples

In the following example, a cell is translated such that it's local origin occupies the global co-ordinates (3.5, -2.0, -10.0), rotated such that the local X-axis is aligned with the global Y-axis and scaled so that the length of the object is changed by a factor of 4.2 - assuming that no parent object applies any geometry translations.

  3.6 -2.0 -10.0
0 0.0 0.0 90.0
  4.2 1.0 1.0