15 #include "eggJointNodePointer.h" 18 #include "eggObject.h" 20 #include "pointerTo.h" 34 if (_joint != (
EggGroup *)NULL && _joint->is_joint()) {
37 if (!_joint->has_transform()) {
73 return _joint->get_transform3d();
90 _joint->set_transform3d(mat);
106 egg_parent->remove_child(_joint.p());
114 if (new_node->_joint != _joint->get_parent()) {
115 new_node->_joint->add_child(_joint.p());
129 _joint->unref_all_vertices();
133 DCAST_INTO_V(new_node, new_joint);
135 new_node->_joint->steal_vrefs(_joint);
155 if (!db.
get_matrix(
this, EggCharacterDb::TT_rebuild_frame, 0, mat)) {
160 _joint->set_transform3d(mat);
163 nassertr(!db.
get_matrix(
this, EggCharacterDb::TT_rebuild_frame, 1, mat),
false);
177 _joint->set_dcs_type(dcs_type);
193 pose = source_joint->get_frame(frame);
197 _joint->clear_default_pose();
198 _joint->modify_default_pose().add_matrix4(pose);
213 return (_joint->vref_size() != 0) || _joint->joint_has_primitives();
228 new_joint->set_group_type(EggGroup::GT_joint);
229 _joint->add_child(new_joint);
240 _joint->set_name(name);
This is a 4-by-4 transform matrix.
virtual LMatrix4d get_frame(int n) const
Returns the transform matrix corresponding to this joint position in the nth frame.
A base class for nodes in the hierarchy that are not leaf nodes.
virtual void apply_default_pose(EggJointPointer *source_joint, int frame)
Applies the pose from the indicated frame of the indicated source joint as the initial pose for this ...
virtual void move_vertices_to(EggJointPointer *new_joint)
Moves the vertices assigned to this joint into the other joint (which should be of the same type)...
virtual bool has_vertices() const
Returns true if there are any vertices referenced by the node this points to, false otherwise...
virtual bool do_rebuild(EggCharacterDb &db)
Rebuilds the entire table all at once, based on the frames added by repeated calls to add_rebuild_fra...
virtual void do_finish_reparent(EggJointPointer *new_parent)
Performs the actual reparenting operation by removing the node from its old parent and associating it...
The main glue of the egg hierarchy, this corresponds to the <Group>, <Instance>, and <Joint> type nod...
This stores a pointer back to a <Joint> node.
This class is used during joint optimization or restructuring to store the table of interim joint com...
virtual int get_num_frames() const
Returns the number of frames of animation for this particular joint.
static const LMatrix4d & ident_mat()
Returns an identity matrix.
void steal_children(EggGroupNode &other)
Moves all the children from the other node to this one.
virtual void expose(EggGroup::DCSType dcs_type)
Flags the joint with the indicated DCS flag so that it will be loaded as a separate node in the playe...
This is a base class for EggJointNodePointer and EggMatrixTablePointer.
virtual void set_name(const string &name)
Applies the indicated name change to the egg file.
virtual EggJointPointer * make_new_joint(const string &name)
Creates a new child of the current joint in the egg data, and returns a pointer to it...
TypeHandle is the identifier used to differentiate C++ class types.
The highest-level base class in the egg directory.
bool get_matrix(const EggJointPointer *joint, TableType type, int frame, LMatrix4d &mat) const
Looks up the data for the indicated joint, type, and frame, and fills it in result (and returns true)...
virtual void set_frame(int n, const LMatrix4d &mat)
Sets the transform matrix corresponding to this joint position in the nth frame.