Panda3D
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties
Public Member Functions | Static Public Member Functions
EggXfmSAnim Class Reference

This corresponds to an <Xfm$Anim_S$> entry, which is a collection of up to nine <S$Anim> entries that specify the nine components of a transformation. More...

Inheritance diagram for EggXfmSAnim:
EggGroupNode EggNode EggNamedObject EggObject

List of all members.

Public Member Functions

 EggXfmSAnim (EggXfmAnimData const convert_from)
 Converts the older-style XfmAnim table to the newer-style XfmSAnim table.
 EggXfmSAnim (EggXfmSAnim const copy)
 EggXfmSAnim (string name, CoordinateSystem cs)
 EggXfmSAnim (string name)
 EggXfmSAnim ()
 addComponentData (string component_name, double value)
 Adds a new row to the named component (one of matrix_component_letters) of the table.
 addComponentData (int component, double value)
 Adds a new row to the indicated component (0-12) of the table.
bool addData (Mat4D const mat)
 Adds a new matrix to the table, by adding a new row to each of the subtables.
 clearData ()
 Removes all data from the table.
 clearFps ()
 clearOrder ()
CoordinateSystem getCoordinateSystem ()
 Returns the coordinate system this table believes it is defined within.
double getFps ()
 This is only valid if has_fps() returns true.
int getNumRows ()
 Returns the effective number of rows in the table.
string getOrder ()
 getValue (int row, Mat4D mat)
 Returns the value of the aggregate row of the table as a matrix.
bool hasFps ()
bool hasOrder ()
 normalize ()
 The inverse operation of optimize(), this ensures that all the sub-tables have the same length by duplicating rows as necessary.
EggXfmSAnim operator= (EggXfmSAnim const copy)
 optimize ()
 Optimizes the table by collapsing redundant sub-tables.
 optimizeToStandardOrder ()
 Optimizes the table by collapsing redundant sub-tables, and simultaneously ensures that the order string is the standard order (which is the same as that supported by compose_matrix() and decompose_matrix()).
 setFps (double fps)
 setOrder (string order)
bool setValue (int row, Mat4D const mat)
 Replaces the indicated row of the table with the given matrix.

Static Public Member Functions

static composeWithOrder (Mat4D mat, VBase3D const scale, VBase3D const shear, VBase3D const hpr, VBase3D const trans, string order, CoordinateSystem cs)
 Composes a matrix out of the nine individual components, respecting the order string.
static TypeHandle getClassType ()
static string getStandardOrder ()
 Returns the standard order of matrix component composition.

Detailed Description

This corresponds to an <Xfm$Anim_S$> entry, which is a collection of up to nine <S$Anim> entries that specify the nine components of a transformation.

It's implemented as a group that can contain any number of EggSAnimData children.


Constructor & Destructor Documentation

EggXfmSAnim ( EggXfmAnimData const  convert_from)

Converts the older-style XfmAnim table to the newer-style XfmSAnim table.

EggXfmSAnim ( EggXfmSAnim const  copy)
EggXfmSAnim ( string  name,
CoordinateSystem  cs 
)
EggXfmSAnim ( string  name)

Member Function Documentation

addComponentData ( string  component_name,
double  value 
)

Adds a new row to the named component (one of matrix_component_letters) of the table.

addComponentData ( int  component,
double  value 
)

Adds a new row to the indicated component (0-12) of the table.

bool addData ( Mat4D const  mat)

Adds a new matrix to the table, by adding a new row to each of the subtables.

This is a convenience function that treats the table of tables as if it were a single table of matrices. It is an error to call this if any SAnimData children of this node have an improper name (e.g. not a single letter, or not one of "ijkabchprxyz").

This function has the further requirement that all nine of the subtables must exist and be of the same length. Furthermore, the order string must be the standard order string, which matches the system compose_matrix() and decompose_matrix() functions.

Thus, you probably cannot take an existing EggXfmSAnim object and start adding matrices to the end; you must clear out the original data first. (As a special exception, if no tables exist, they will be created.) The method normalize() will do this for you on an existing EggXfmSAnim.

This function may fail silently if the matrix cannot be decomposed into scale, shear, rotate, and translate. In this case, the closest approximation is added to the table, and false is returned.

clearData ( )

Removes all data from the table.

It does this by removing all of its children.

clearFps ( )
static composeWithOrder ( Mat4D  mat,
VBase3D const  scale,
VBase3D const  shear,
VBase3D const  hpr,
VBase3D const  trans,
string  order,
CoordinateSystem  cs 
) [static]

Composes a matrix out of the nine individual components, respecting the order string.

The components will be applied in the order indicated by the string.

static TypeHandle getClassType ( ) [static]

Reimplemented from EggGroupNode.

CoordinateSystem getCoordinateSystem ( )

Returns the coordinate system this table believes it is defined within.

This should always match the coordinate system of the EggData structure that owns it. It is necessary to store it here because the meaning of the h, p, and r columns depends on the coordinate system.

double getFps ( )

This is only valid if has_fps() returns true.

int getNumRows ( )

Returns the effective number of rows in the table.

This is actually the number of rows of the smallest subtable larger than one row. This is a convenience function that treats the table of tables as if it were a single table of matrices.

static string getStandardOrder ( ) [static]

Returns the standard order of matrix component composition.

This is what the order string must be set to in order to use set_value() or add_data() successfully.

getValue ( int  row,
Mat4D  mat 
)

Returns the value of the aggregate row of the table as a matrix.

This is a convenience function that treats the table of tables as if it were a single table of matrices. It is an error to call this if any SAnimData children of this node have an improper name (e.g. not a single letter, or not one of "ijkabchprxyz").

bool hasFps ( )
bool hasOrder ( )
normalize ( )

The inverse operation of optimize(), this ensures that all the sub-tables have the same length by duplicating rows as necessary.

This is needed before doing operations like add_data() or set_value() on an existing table.

EggXfmSAnim operator= ( EggXfmSAnim const  copy)
optimize ( )

Optimizes the table by collapsing redundant sub-tables.

Optimizes the table by collapsing redundant sub-tables, and simultaneously ensures that the order string is the standard order (which is the same as that supported by compose_matrix() and decompose_matrix()).

setFps ( double  fps)
setOrder ( string  order)
bool setValue ( int  row,
Mat4D const  mat 
)

Replaces the indicated row of the table with the given matrix.

This function can only be called if all the constraints of add_data(), below, are met. Call normalize() first if you are not sure.

The return value is true if the matrix can be decomposed and stored as scale, shear, rotate, and translate, or false otherwise. The data is set in either case.

 All Classes Namespaces Functions Variables Enumerations Enumerator Properties