EggXfmSAnim¶
-
class
EggXfmSAnim
¶ Bases:
EggGroupNode
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.Inheritance diagram
-
explicit
EggXfmSAnim
(std::string const &name = "", CoordinateSystem cs = ::CS_default)¶
-
EggXfmSAnim
(EggXfmAnimData const &convert_from)¶
-
EggXfmSAnim
(EggXfmSAnim const ©)¶ Converts the older-style XfmAnim table to the newer-style XfmSAnim table.
-
void
add_component_data
(std::string const &component_name, double value)¶
-
void
add_component_data
(int component, double value)¶ Adds a new row to the named component (one of matrix_component_letters) of the table.
Adds a new row to the indicated component (0-12) of the table.
-
bool
add_data
(LMatrix4d 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()
anddecompose_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 methodnormalize()
will do this for you on an existingEggXfmSAnim
.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.
-
void
clear_data
(void)¶ Removes all data from the table. It does this by removing all of its children.
-
void
clear_fps
(void)¶
-
void
clear_order
(void)¶
-
static void
compose_with_order
(LMatrix4d &mat, LVecBase3d const &scale, LVecBase3d const &shear, LVecBase3d const &hpr, LVecBase3d const &trans, std::string const &order, CoordinateSystem cs)¶ 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
get_class_type
(void)¶
-
CoordinateSystem
get_coordinate_system
(void) const¶ 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.
-
int
get_num_rows
(void) const¶ 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.
-
std::string const &
get_order
(void) const¶
-
std::string const &
get_standard_order
(void)¶ Returns the standard order of matrix component composition. This is what the order string must be set to in order to use
set_value()
oradd_data()
successfully.
-
void
get_value
(int row, LMatrix4d &mat) const¶ 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
has_fps
(void) const¶
-
bool
has_order
(void) const¶
-
void
normalize
(void)¶ 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 likeadd_data()
orset_value()
on an existing table.
-
void
optimize
(void)¶ Optimizes the table by collapsing redundant sub-tables.
-
void
optimize_to_standard_order
(void)¶ 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()
anddecompose_matrix()
).
-
void
set_fps
(double fps)¶
-
void
set_order
(std::string const &order)¶
-
bool
set_value
(int row, LMatrix4d 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. Callnormalize()
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.
-
explicit