This is one node of a hierarchy of EggJointData nodes, each of which represents a single joint of the character hierarchy across all loaded files: the various models, the LOD's of each model, and the various animation channel files. More...
#include "eggJointData.h"
Public Member Functions | |
EggJointData (EggCharacterCollection *collection, EggCharacterData *char_data) | |
virtual void | add_back_pointer (int model_index, EggObject *egg_object) |
Adds the indicated model joint or anim table to the data. More... | |
void | apply_default_pose (int source_model, int frame) |
Applies the pose from the indicated frame of the indicated source model_index as the initial pose for this joint, and does this recursively on all joints below. More... | |
bool | do_rebuild_all (EggCharacterDb &db) |
Calls do_rebuild() on all models, and recursively on all joints at this node and below. More... | |
void | expose (EggGroup::DCSType dcs_type=EggGroup::DC_default) |
Calls expose() on all models for this joint, but does not recurse downwards. More... | |
EggJointData * | find_joint (const std::string &name) |
Returns the first descendent joint found with the indicated name, or NULL if no joint has that name. More... | |
virtual TypeHandle | force_init_type () |
void | force_initial_rest_frame () |
Forces all of the joints to have the same rest frame value as the first joint read in. More... | |
EggJointData * | get_child (int n) const |
LMatrix4d | get_frame (int model_index, int n) const |
Returns the local transform matrix corresponding to this joint position in the nth frame in the indicated model. More... | |
LMatrix4d | get_net_frame (int model_index, int n, EggCharacterDb &db) const |
Returns the complete transform from the root corresponding to this joint position in the nth frame in the indicated model. More... | |
LMatrix4d | get_net_frame_inv (int model_index, int n, EggCharacterDb &db) const |
Returns the inverse of get_net_frame(). More... | |
int | get_num_children () const |
EggJointData * | get_parent () const |
const LMatrix4d & | get_rest_frame () const |
Returns the rest frame of the joint. More... | |
virtual TypeHandle | get_type () const |
bool | has_rest_frame () const |
Returns true if the joint knows its rest frame, false otherwise. More... | |
void | move_vertices_to (EggJointData *new_owner) |
Moves the vertices assigned to this joint into the indicated joint, without changing their weight assignments. More... | |
void | optimize () |
Calls optimize() on all models, and recursively on all joints at this node and below. More... | |
void | quantize_channels (const std::string &components, double quantum) |
Calls quantize_channels() on all models for this joint, and then recurses downwards to all joints below. More... | |
void | reparent_to (EggJointData *new_parent) |
Indicates an intention to change the parent of this joint to the indicated joint, or NULL to remove it from the hierarchy. More... | |
bool | rest_frames_differ () const |
Returns true if the rest frames for different models differ in their initial value. More... | |
int | score_reparent_to (EggJointData *new_parent, EggCharacterDb &db) |
Computes a score >= 0 reflecting the similarity of the current joint's animation (in world space) to that of the indicated potential parent joint (in world space). More... | |
virtual void | write (std::ostream &out, int indent_level=0) const |
void | zero_channels (const std::string &components) |
Calls zero_channels() on all models for this joint, but does not recurse downwards. More... | |
Public Member Functions inherited from EggComponentData | |
EggComponentData (EggCharacterCollection *collection, EggCharacterData *char_data) | |
void | add_name (const std::string &name, NameUniquifier &uniquifier) |
Adds the indicated name to the set of names that this component can be identified with. More... | |
void | extend_to (int model_index, int num_frames) const |
Extends the number of frames in the indicated model (presumably an animation table model) to the given number. More... | |
double | get_frame_rate (int model_index) const |
Returns the number of frames of animation for this particular component in the indicated model. More... | |
EggBackPointer * | get_model (int model_index) const |
Returns the back pointer to an egg file for the indicated model if it exists, or NULL if it does not. More... | |
int | get_num_frames (int model_index) const |
Returns the number of frames of animation for this particular component in the indicated model. More... | |
int | get_num_models () const |
Returns the maximum number of back pointers this component may have. More... | |
bool | has_model (int model_index) const |
Returns true if the component has a back pointer to an egg file somewhere for the indicated model, false otherwise. More... | |
bool | matches_name (const std::string &name) const |
Returns true if the indicated name matches any name that was ever matched with this particular joint, false otherwise. More... | |
void | set_model (int model_index, EggBackPointer *back) |
Sets the back_pointer associated with the given model_index. More... | |
Public Member Functions inherited from EggObject | |
EggObject (const EggObject ©) | |
virtual EggTransform * | as_transform () |
Returns this object cross-cast to an EggTransform pointer, if it inherits from EggTransform, or NULL if it does not. More... | |
void | clear_user_data () |
Removes *all* user data pointers from the node. More... | |
void | clear_user_data (TypeHandle type) |
Removes the user data pointer of the indicated type. More... | |
EggUserData * | get_user_data () const |
Returns the user data pointer most recently stored on this object, or NULL if nothing was previously stored. More... | |
EggUserData * | get_user_data (TypeHandle type) const |
Returns the user data pointer of the indicated type, if it exists, or NULL if it does not. More... | |
bool | has_user_data () const |
Returns true if a generic user data pointer has recently been set and not yet cleared, false otherwise. More... | |
bool | has_user_data (TypeHandle type) const |
Returns true if the user data pointer of the indicated type has been set, false otherwise. More... | |
EggObject & | operator= (const EggObject ©) |
void | set_user_data (EggUserData *user_data) |
Sets the user data associated with this object. More... | |
Public Member Functions inherited from TypedReferenceCount | |
TypedReferenceCount (const TypedReferenceCount ©) | |
void | operator= (const TypedReferenceCount ©) |
Public Member Functions inherited from TypedObject | |
TypedObject (const TypedObject ©)=default | |
TypedObject * | as_typed_object () |
Returns the object, upcast (if necessary) to a TypedObject pointer. More... | |
const TypedObject * | as_typed_object () const |
Returns the object, upcast (if necessary) to a TypedObject pointer. More... | |
int | get_best_parent_from_Set (const std::set< int > &) const |
int | get_type_index () const |
Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. More... | |
bool | is_exact_type (TypeHandle handle) const |
Returns true if the current object is the indicated type exactly. More... | |
bool | is_of_type (TypeHandle handle) const |
Returns true if the current object is or derives from the indicated type. More... | |
TypedObject & | operator= (const TypedObject ©)=default |
Public Member Functions inherited from ReferenceCount | |
int | get_ref_count () const |
WeakReferenceList * | get_weak_list () const |
Returns the WeakReferenceList associated with this ReferenceCount object. More... | |
bool | has_weak_list () const |
Returns true if this particular ReferenceCount object has a WeakReferenceList created, false otherwise. More... | |
void | local_object () |
This function should be called, once, immediately after creating a new instance of some ReferenceCount-derived object on the stack. More... | |
void | ref () const |
Explicitly increments the reference count. More... | |
bool | ref_if_nonzero () const |
Atomically increases the reference count of this object if it is not zero. More... | |
bool | test_ref_count_integrity () const |
Does some easy checks to make sure that the reference count isn't completely bogus. More... | |
bool | test_ref_count_nonzero () const |
Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More... | |
virtual bool | unref () const |
Explicitly decrements the reference count. More... | |
WeakReferenceList * | weak_ref () |
Adds the indicated PointerToVoid as a weak reference to this object. More... | |
void | weak_unref () |
Removes the indicated PointerToVoid as a weak reference to this object. More... | |
Public Member Functions inherited from Namable | |
Namable (const std::string &initial_name="") | |
void | clear_name () |
Resets the Namable's name to empty. More... | |
const std::string & | get_name () const |
bool | has_name () const |
Returns true if the Namable has a nonempty name set, false if the name is empty. More... | |
void | output (std::ostream &out) const |
Outputs the Namable. More... | |
void | set_name (const std::string &name) |
Static Public Member Functions | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from EggComponentData | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from EggObject | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from TypedReferenceCount | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from TypedObject | |
static TypeHandle | get_class_type () |
static void | init_type () |
This function is declared non-inline to work around a compiler bug in g++ 2.96. More... | |
Static Public Member Functions inherited from ReferenceCount | |
static TypeHandle | get_class_type () |
static void | init_type () |
Static Public Member Functions inherited from Namable | |
static TypeHandle | get_class_type () |
static void | init_type () |
Friends | |
class | EggCharacterCollection |
class | EggCharacterData |
class | OrderJointsByNewDepth |
Additional Inherited Members | |
Public Attributes inherited from TypedObject | |
get_type | |
Public Attributes inherited from ReferenceCount | |
get_ref_count | |
Returns the current reference count. More... | |
Public Attributes inherited from Namable | |
get_name | |
set_name | |
This is one node of a hierarchy of EggJointData nodes, each of which represents a single joint of the character hierarchy across all loaded files: the various models, the LOD's of each model, and the various animation channel files.
Definition at line 31 of file eggJointData.h.
|
virtual |
Adds the indicated model joint or anim table to the data.
Implements EggComponentData.
Definition at line 417 of file eggJointData.cxx.
void EggJointData::apply_default_pose | ( | int | source_model, |
int | frame | ||
) |
Applies the pose from the indicated frame of the indicated source model_index as the initial pose for this joint, and does this recursively on all joints below.
Definition at line 391 of file eggJointData.cxx.
References EggComponentData::has_model().
bool EggJointData::do_rebuild_all | ( | EggCharacterDb & | db | ) |
Calls do_rebuild() on all models, and recursively on all joints at this node and below.
Returns true if all models returned true, false otherwise.
Definition at line 279 of file eggJointData.cxx.
void EggJointData::expose | ( | EggGroup::DCSType | dcs_type = EggGroup::DC_default | ) |
Calls expose() on all models for this joint, but does not recurse downwards.
Definition at line 333 of file eggJointData.cxx.
|
inline |
Returns the first descendent joint found with the indicated name, or NULL if no joint has that name.
Definition at line 44 of file eggJointData.I.
Referenced by EggCharacterData::find_joint().
void EggJointData::force_initial_rest_frame | ( | ) |
Forces all of the joints to have the same rest frame value as the first joint read in.
This is a drastic way to repair models whose rest frame values are completely bogus, but should not be performed on models that are otherwise correct.
Definition at line 121 of file eggJointData.cxx.
References EggComponentData::get_num_models(), EggComponentData::has_model(), and has_rest_frame().
Referenced by EggCharacterCollection::check_errors().
LMatrix4d EggJointData::get_frame | ( | int | model_index, |
int | n | ||
) | const |
Returns the local transform matrix corresponding to this joint position in the nth frame in the indicated model.
Definition at line 51 of file eggJointData.cxx.
References EggComponentData::get_model().
LMatrix4d EggJointData::get_net_frame | ( | int | model_index, |
int | n, | ||
EggCharacterDb & | db | ||
) | const |
Returns the complete transform from the root corresponding to this joint position in the nth frame in the indicated model.
Definition at line 68 of file eggJointData.cxx.
References EggComponentData::get_model().
LMatrix4d EggJointData::get_net_frame_inv | ( | int | model_index, |
int | n, | ||
EggCharacterDb & | db | ||
) | const |
Returns the inverse of get_net_frame().
Definition at line 94 of file eggJointData.cxx.
References EggComponentData::get_model().
|
inline |
Returns the rest frame of the joint.
This is the matrix value that appears for the joint in each model file; it should be the same transform in each model.
Definition at line 79 of file eggJointData.I.
|
inline |
Returns true if the joint knows its rest frame, false otherwise.
In general, this will be true as long as the joint is included in at least one model file, or false if it appears only in animation files.
Definition at line 59 of file eggJointData.I.
Referenced by force_initial_rest_frame().
void EggJointData::move_vertices_to | ( | EggJointData * | new_owner | ) |
Moves the vertices assigned to this joint into the indicated joint, without changing their weight assignments.
Definition at line 143 of file eggJointData.cxx.
References EggComponentData::get_num_models(), and EggComponentData::has_model().
void EggJointData::optimize | ( | ) |
Calls optimize() on all models, and recursively on all joints at this node and below.
Definition at line 310 of file eggJointData.cxx.
void EggJointData::quantize_channels | ( | const std::string & | components, |
double | quantum | ||
) |
Calls quantize_channels() on all models for this joint, and then recurses downwards to all joints below.
Definition at line 367 of file eggJointData.cxx.
|
inline |
Indicates an intention to change the parent of this joint to the indicated joint, or NULL to remove it from the hierarchy.
The joint is not reparented immediately, but rather all of the joints are reparented at once when do_reparent() is called.
Definition at line 91 of file eggJointData.I.
|
inline |
Returns true if the rest frames for different models differ in their initial value.
This is not technically an error, but it is unusual enough to be suspicious.
Definition at line 69 of file eggJointData.I.
Referenced by EggCharacterCollection::check_errors().
int EggJointData::score_reparent_to | ( | EggJointData * | new_parent, |
EggCharacterDb & | db | ||
) |
Computes a score >= 0 reflecting the similarity of the current joint's animation (in world space) to that of the indicated potential parent joint (in world space).
The lower the number, the more similar the motion, and the more suitable is the proposed parent-child relationship. Returns -1 if there is an error.
Definition at line 174 of file eggJointData.cxx.
References FFTCompressor::is_compression_available().
Referenced by EggCharacterData::choose_optimal_hierarchy().
void EggJointData::zero_channels | ( | const std::string & | components | ) |
Calls zero_channels() on all models for this joint, but does not recurse downwards.
Definition at line 350 of file eggJointData.cxx.