NAME
    hwOrient - define a transformation

PROPERTIES
    Scale	3F	Scaling factors along each axis
    Rotate	3F	Rotation about each axis, in degrees
    Pos		3F	Offset from origin

DEFAULTS
    Scale = {1,1,1}
    Rotate = {0,0,0}
    Pos = {0,0,0}

DESCRIPTION
    The hwOrient class defines a transformation in terms of high-level
    operations.  The operations are always performed in the order:
    scale, rotate, position.  This will never yield a "skewed" matrix.
    The Scale parameter specifies scaling along each of the X, Y, and Z
    axes.  The Rotate parameter specifies a rotation about the X, Y, and
    Z axes *in turn*; that is, a rotation about X followed by a rotation
    about Y followed by a rotation about Z.  The angles are specified in
    degrees.  The Pos parameter specifies a translation from the
    origin.  Note that most primitives have embedded hwOrient classes; a
    standalone hwOrient object is only useful to pass to multiple
    primitives which might share an orientation.

C EXAMPLE
    /* Create an X scale of 2 with 30 degree rotation about Y, moved
     * 20 units in Z, and apply it to a box.
     */
    hwObject
	orient,
	box;

    orient = hwOrient->create( hwOrient );
    HW_MODIFY_3F( orient, hwStrScale, 2, 1, 1 );
    HW_MODIFY_3F( orient, hwStrRotate, 0, 30, 0 );
    HW_MODIFY_3F( orient, hwStrPos, 0, 0, 20 );

    box = hwBox->create( hwBox );
    box->modify( box, hwStrOrient, HW_TYPE_OBJECT, orient );
    box->draw( box, disp );
    box->destroy( box );
    orient->destroy( orient );

OBJECT FILE EXAMPLE
    # Same as above
    hwOrient orient {
	Scale = {2, 1, 1}
	Rotate = {0, 30, 0}
	Pos = {0,0,20}
    }
    hwBox box {
	Orient = orient
    }

SEE ALSO
    hw(3)