94 lines
2.2 KiB
Text
94 lines
2.2 KiB
Text
|
/**
|
||
|
* PANDA 3D SOFTWARE
|
||
|
* Copyright (c) Carnegie Mellon University. All rights reserved.
|
||
|
*
|
||
|
* All use of this software is subject to the terms of the revised BSD
|
||
|
* license. You should have received a copy of this license along
|
||
|
* with this source code in a file named "LICENSE."
|
||
|
*
|
||
|
* @file eggJointData.I
|
||
|
* @author drose
|
||
|
* @date 2001-02-23
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE EggJointData *EggJointData::
|
||
|
get_parent() const {
|
||
|
return _parent;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE int EggJointData::
|
||
|
get_num_children() const {
|
||
|
return _children.size();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
INLINE EggJointData *EggJointData::
|
||
|
get_child(int n) const {
|
||
|
nassertr(n >= 0 && n < (int)_children.size(), nullptr);
|
||
|
return _children[n];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the first descendent joint found with the indicated name, or NULL
|
||
|
* if no joint has that name.
|
||
|
*/
|
||
|
INLINE EggJointData *EggJointData::
|
||
|
find_joint(const std::string &name) {
|
||
|
EggJointData *joint = find_joint_exact(name);
|
||
|
if (joint == nullptr) {
|
||
|
joint = find_joint_matches(name);
|
||
|
}
|
||
|
return joint;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* 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.
|
||
|
*/
|
||
|
INLINE bool EggJointData::
|
||
|
has_rest_frame() const {
|
||
|
return _has_rest_frame;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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.
|
||
|
*/
|
||
|
INLINE bool EggJointData::
|
||
|
rest_frames_differ() const {
|
||
|
return _rest_frames_differ;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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.
|
||
|
*/
|
||
|
INLINE const LMatrix4d &EggJointData::
|
||
|
get_rest_frame() const {
|
||
|
nassertr(has_rest_frame(), LMatrix4d::ident_mat());
|
||
|
return _rest_frame;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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.
|
||
|
*/
|
||
|
INLINE void EggJointData::
|
||
|
reparent_to(EggJointData *new_parent) {
|
||
|
_new_parent = new_parent;
|
||
|
}
|