This represents the <Transform> entry of a group or texture node: a list of component transform operations, applied in order, that describe a net transform matrix. More...
#include "eggTransform.h"
Public Types | |
enum | ComponentType { CT_invalid, CT_translate2d, CT_translate3d, CT_rotate2d, CT_rotx, CT_roty, CT_rotz, CT_rotate3d, CT_scale2d, CT_scale3d, CT_uniform_scale, CT_matrix3, CT_matrix4 } |
Public Member Functions | |
EggTransform (const EggTransform ©) | |
void | add_matrix3 (const LMatrix3d &mat) |
Appends an arbitrary 3x3 matrix to the current transform. More... | |
void | add_matrix4 (const LMatrix4d &mat) |
Appends an arbitrary 4x4 matrix to the current transform. More... | |
void | add_rotate2d (double angle) |
Appends a 2-d rotation to the current transform. More... | |
void | add_rotate3d (double angle, const LVector3d &axis) |
Appends a 3-d rotation about an arbitrary axis to the current transform. More... | |
void | add_rotate3d (const LQuaterniond &quat) |
Appends an arbitrary 3-d rotation to the current transform, expressed as a quaternion. More... | |
void | add_rotx (double angle) |
Appends a rotation about the X axis to the current transform. More... | |
void | add_roty (double angle) |
Appends a rotation about the Y axis to the current transform. More... | |
void | add_rotz (double angle) |
Appends a rotation about the Z axis to the current transform. More... | |
void | add_scale2d (const LVecBase2d &scale) |
Appends a possibly non-uniform scale to the current transform. More... | |
void | add_scale3d (const LVecBase3d &scale) |
Appends a possibly non-uniform scale to the current transform. More... | |
void | add_translate2d (const LVector2d &translate) |
Appends a 2-d translation operation to the current transform. More... | |
void | add_translate3d (const LVector3d &translate) |
Appends a 3-d translation operation to the current transform. More... | |
void | add_uniform_scale (double scale) |
Appends a uniform scale to the current transform. More... | |
void | clear_transform () |
Resets the transform to empty, identity. More... | |
const LMatrix3d & | get_component_mat3 (int n) const |
Returns the 3x3 matrix associated with the nth component. More... | |
const LMatrix4d & | get_component_mat4 (int n) const |
Returns the 4x4 matrix associated with the nth component. More... | |
double | get_component_number (int n) const |
Returns the solitary number associated with the nth component. More... | |
ComponentType | get_component_type (int n) const |
Returns the type of the nth component. More... | |
const LVecBase2d & | get_component_vec2 (int n) const |
Returns the 2-component vector associated with the nth component. More... | |
const LVecBase3d & | get_component_vec3 (int n) const |
Returns the 3-component vector associated with the nth component. More... | |
int | get_num_components () const |
Returns the number of components that make up the transform. More... | |
LMatrix3d | get_transform2d () const |
Returns the overall transform as a 3x3 matrix. More... | |
const LMatrix4d & | get_transform3d () const |
Returns the overall transform as a 4x4 matrix. More... | |
bool | has_transform () const |
Returns true if the transform is nonempty, false if it is empty (no transform components have been added). More... | |
bool | has_transform2d () const |
Returns true if the transform is specified as a 2-d transform, e.g. More... | |
bool | has_transform3d () const |
Returns true if the transform is specified as a 3-d transform, e.g. More... | |
EggTransform & | operator= (const EggTransform ©) |
void | set_transform2d (const LMatrix3d &mat) |
Sets the overall transform as a 3x3 matrix. More... | |
void | set_transform3d (const LMatrix4d &mat) |
Sets the overall transform as a 4x4 matrix. More... | |
bool | transform_is_identity () const |
Returns true if the described transform is identity, false otherwise. More... | |
void | write (std::ostream &out, int indent_level, const std::string &label) const |
Writes the transform to the indicated stream in Egg format. More... | |
This represents the <Transform> entry of a group or texture node: a list of component transform operations, applied in order, that describe a net transform matrix.
This may be either a 3-d transform, and therefore described by a 4x4 matrix, or a 2-d transform, described by a 3x3 matrix.
Definition at line 29 of file eggTransform.h.
|
inline |
Appends an arbitrary 3x3 matrix to the current transform.
Definition at line 123 of file eggTransform.I.
|
inline |
Appends an arbitrary 4x4 matrix to the current transform.
Definition at line 132 of file eggTransform.I.
void EggTransform::add_rotate2d | ( | double | angle | ) |
Appends a 2-d rotation to the current transform.
The rotation angle is specified in degrees counterclockwise about the origin.
Definition at line 84 of file eggTransform.cxx.
void EggTransform::add_rotate3d | ( | double | angle, |
const LVector3d & | axis | ||
) |
Appends a 3-d rotation about an arbitrary axis to the current transform.
The rotation angle is specified in degrees counterclockwise about the axis.
Definition at line 131 of file eggTransform.cxx.
void EggTransform::add_rotate3d | ( | const LQuaterniond & | quat | ) |
Appends an arbitrary 3-d rotation to the current transform, expressed as a quaternion.
This is converted to axis-angle notation for the egg file.
Definition at line 145 of file eggTransform.cxx.
void EggTransform::add_rotx | ( | double | angle | ) |
Appends a rotation about the X axis to the current transform.
The rotation angle is specified in degrees counterclockwise about the axis.
Definition at line 95 of file eggTransform.cxx.
void EggTransform::add_roty | ( | double | angle | ) |
Appends a rotation about the Y axis to the current transform.
The rotation angle is specified in degrees counterclockwise about the axis.
Definition at line 107 of file eggTransform.cxx.
void EggTransform::add_rotz | ( | double | angle | ) |
Appends a rotation about the Z axis to the current transform.
The rotation angle is specified in degrees counterclockwise about the axis.
Definition at line 119 of file eggTransform.cxx.
void EggTransform::add_scale2d | ( | const LVecBase2d & | scale | ) |
Appends a possibly non-uniform scale to the current transform.
Definition at line 155 of file eggTransform.cxx.
void EggTransform::add_scale3d | ( | const LVecBase3d & | scale | ) |
Appends a possibly non-uniform scale to the current transform.
Definition at line 167 of file eggTransform.cxx.
void EggTransform::add_translate2d | ( | const LVector2d & | translate | ) |
Appends a 2-d translation operation to the current transform.
Definition at line 60 of file eggTransform.cxx.
void EggTransform::add_translate3d | ( | const LVector3d & | translate | ) |
Appends a 3-d translation operation to the current transform.
Definition at line 71 of file eggTransform.cxx.
void EggTransform::add_uniform_scale | ( | double | scale | ) |
Appends a uniform scale to the current transform.
Definition at line 179 of file eggTransform.cxx.
|
inline |
Resets the transform to empty, identity.
Definition at line 114 of file eggTransform.I.
Referenced by EggGroup::clear_default_pose(), and FltToEggLevelState::set_transform().
|
inline |
Returns the 3x3 matrix associated with the nth component.
It is an error to call this if the component type is not CT_matrix3.
Definition at line 283 of file eggTransform.I.
|
inline |
Returns the 4x4 matrix associated with the nth component.
It is an error to call this if the component type is not CT_matrix4.
Definition at line 294 of file eggTransform.I.
|
inline |
Returns the solitary number associated with the nth component.
In the case of a rotation, this is the angle in degrees to rotate; in the case of uniform scale, this is the amount of the scale. Other types do not use this property.
Definition at line 249 of file eggTransform.I.
|
inline |
Returns the type of the nth component.
Definition at line 237 of file eggTransform.I.
|
inline |
Returns the 2-component vector associated with the nth component.
This may be the translate vector, rotate axis, or non-uniform scale. It is an error to call this if the component type does not use a 2-d vector property.
Definition at line 260 of file eggTransform.I.
|
inline |
Returns the 3-component vector associated with the nth component.
This may be the translate vector, rotate axis, or non-uniform scale. It is an error to call this if the component type does not use a 3-d vector property.
Definition at line 272 of file eggTransform.I.
|
inline |
Returns the number of components that make up the transform.
Definition at line 229 of file eggTransform.I.
|
inline |
Returns the overall transform as a 3x3 matrix.
It is an error to call this if has_transform3d() is true.
Definition at line 198 of file eggTransform.I.
|
inline |
Returns the overall transform as a 4x4 matrix.
It is valid to call this even if has_transform2d() is true; in this case, the 3x3 transform will be expanded to a 4x4 matrix.
Definition at line 212 of file eggTransform.I.
Referenced by XFileAnimationSet::create_hierarchy(), EggTexture::is_equivalent_to(), and EggTexture::sorts_less_than().
|
inline |
Returns true if the transform is nonempty, false if it is empty (no transform components have been added).
This is true for either a 2-d or a 3-d transform.
Definition at line 143 of file eggTransform.I.
Referenced by has_transform2d(), has_transform3d(), EggTexture::is_equivalent_to(), and EggTexture::sorts_less_than().
|
inline |
Returns true if the transform is specified as a 2-d transform, e.g.
with a 3x3 matrix, or false if it is specified as a 3-d transform (with a 4x4 matrix), or not specified at all.
Normally, EggTextures have a 2-d matrix (but occasionally they use a 3-d matrix), and EggGroups always have a 3-d matrix.
Definition at line 156 of file eggTransform.I.
References has_transform().
|
inline |
Returns true if the transform is specified as a 3-d transform, e.g.
with a 4x4 matrix, or false if it is specified as a 2-d transform (with a 2x2 matrix), or not specified at all.
Normally, EggTextures have a 3-d matrix (but occasionally they use a 3-d matrix), and EggGroups always have a 3-d matrix.
Definition at line 179 of file eggTransform.I.
References has_transform().
|
inline |
Sets the overall transform as a 3x3 matrix.
This completely replaces whatever componentwise transform may have been defined.
Definition at line 165 of file eggTransform.I.
|
inline |
Sets the overall transform as a 4x4 matrix.
This completely replaces whatever componentwise transform may have been defined.
Definition at line 188 of file eggTransform.I.
|
inline |
Returns true if the described transform is identity, false otherwise.
Definition at line 220 of file eggTransform.I.
Referenced by EggTexture::is_equivalent_to(), and EggTexture::sorts_less_than().
void EggTransform::write | ( | std::ostream & | out, |
int | indent_level, | ||
const std::string & | label | ||
) | const |
Writes the transform to the indicated stream in Egg format.
Definition at line 189 of file eggTransform.cxx.
References get_num_components(), and indent().