# PartBundle

from pandac.PandaModules import PartBundle

Class : PartBundle
Description : This is the root of a MovingPart hierarchy. It defines the hierarchy of moving parts that make up an animatable object.

## Inheritance:

PartBundle: PartGroup
PartGroup: TypedWritableReferenceCount Namable
TypedWritableReferenceCount: TypedWritable ReferenceCount
TypedWritable: TypedObject
TypedObject: MemoryBase
MemoryBase:
ReferenceCount: MemoryBase
Namable:

## Methods of PartBundle:

PartBundle (Constructor)
applyTransform
bindAnim
clearAnimPreload
clearControlEffects
controlJoint
forceUpdate
freezeJoint
getAnimBlendFlag
getAnimPreload
getBlendType
getClassType
getControlEffect
getFrameBlendFlag
getNode
getNumNodes
getRootXform
loadBindAnim
mergeAnimPreloads
modifyAnimPreload
output
releaseJoint
setAnimBlendFlag
setAnimPreload
setBlendType
setControlEffect
setFrameBlendFlag
setRootXform
update
waitPending
xform

## Methods of PartGroup:

PartGroup (Constructor)
applyControl
applyFreeze
applyFreezeMatrix
applyFreezeScalar
clearForcedChannel
copySubgraph
findChild
getChild
getClassType
getForcedChannel
getNumChildren
isCharacterJoint
makeCopy
write
writeWithValue

## Methods of TypedWritableReferenceCount:

getClassType

## Methods of TypedWritable:

getClassType

## Methods of TypedObject:

getClassType
getType
getTypeIndex
isExactType
isOfType

## Methods of ReferenceCount:

getClassType
getRefCount
ref
testRefCountIntegrity
testRefCountNonzero
unref

## Methods of Namable:

Namable (Constructor)
clearName
getClassType
getName
hasName
operator =
output
setName

## Constants in PartBundle:

BTLinear | (BlendType)
BTNormalizedLinear | (BlendType)
BTComponentwise | (BlendType)
BTComponentwiseQuat | (BlendType)

PartBundle PartBundle::PartBundle(string const &name = ("")); Description: Normally, you'd use make_copy() or copy_subgraph() to make a copy of this. Description: Normally, a PartBundle constructor should not be called directly--it will get created when a PartBundleNode is created.

applyTransform PointerTo< PartBundle > PartBundle::apply_transform(TransformState const *transform); Description: Returns a PartBundle that is a duplicate of this one, but with the indicated transform applied. If this is called multiple times with the same TransformState pointer, it returns the same PartBundle each time.

bindAnim PointerTo< AnimControl > PartBundle::bind_anim(AnimBundle *anim, int hierarchy_match_flags = (0), PartSubset const &subset = ((()))); Description: Binds the animation to the bundle, if possible, and returns a new AnimControl that can be used to start and stop the animation. If the anim hierarchy does not match the part hierarchy, returns NULL. If hierarchy_match_flags is 0, only an exact match is accepted; otherwise, it may contain a union of PartGroup::HierarchyMatchFlags values indicating conditions that will be tolerated (but warnings will still be issued). If subset is specified, it restricts the binding only to the named subtree of joints. The AnimControl is not stored within the PartBundle; it is the user's responsibility to maintain the pointer. The animation will automatically unbind itself when the AnimControl destructs (i.e. its reference count goes to zero).

clearAnimPreload void PartBundle::clear_anim_preload(void); Description: Removes any AnimPreloadTable associated with the PartBundle.

clearControlEffects void PartBundle::clear_control_effects(void); Description: Sets the control effect of all AnimControls to zero (but does not "stop" the AnimControls). The character will no longer be affected by any animation, and will return to its default pose (unless restore-initial-pose is false). The AnimControls which are no longer associated will not be using any CPU cycles, but they may still be in the "playing" state; if they are later reassociated with the PartBundle they will resume at their current frame as if they'd been running all along.

controlJoint bool PartBundle::control_joint(string const &joint_name, PandaNode *node); Description: Specifies that the joint with the indicated name should be animated with the transform on the indicated node. It will henceforth always follow the node's transform, regardless of any animations that may subsequently be bound to the joint. Returns true if the joint is successfully controlled, or false if the named child is not a joint (or slider) or does not exist.

forceUpdate bool PartBundle::force_update(void); Description: Updates all the parts in the bundle to reflect the data for the current frame, whether we believe it needs it or not.

freezeJoint bool PartBundle::freeze_joint(string const &joint_name, TransformState const *transform); Description: Specifies that the joint with the indicated name should be frozen with the specified transform. It will henceforth always hold this fixed transform, regardless of any animations that may subsequently be bound to the joint. Returns true if the joint is successfully frozen, or false if the named child is not a joint (or slider) or does not exist.

getAnimBlendFlag bool PartBundle::get_anim_blend_flag(void) const; Description: Returns whether the character allows multiple different animations to be bound simultaneously. See set_anim_blend_flag().

getAnimPreload ConstPointerTo< AnimPreloadTable > PartBundle::get_anim_preload(void) const; Description: Returns the AnimPreloadTable associated with the PartBundle. This table, if present, can be used for the benefit of load_bind_anim() to allow asynchronous binding.

getBlendType PartBundle::BlendType PartBundle::get_blend_type(void) const; Description: Returns the algorithm that is used when blending multiple frames or multiple animations together, when either anim_blend_flag or frame_blend_flag is set to true.

getClassType static TypeHandle PartBundle::get_class_type(void); Undocumented function.

getControlEffect float PartBundle::get_control_effect(AnimControl *control) const; Description: Returns the amount by which the character is affected by the indicated AnimControl and its associated animation. See set_control_effect().

getFrameBlendFlag bool PartBundle::get_frame_blend_flag(void) const; Description: Returns whether the character interpolates (blends) between two sequential animation frames, or whether it holds the current frame until the next one is ready. See set_frame_blend_flag().

getNode PartBundleNode *PartBundle::get_node(int n) const; Description: Returns the nth PartBundleNode associated with this PartBundle.

getNumNodes int PartBundle::get_num_nodes(void) const; Description: Returns the number of PartBundleNodes that contain a pointer to this PartBundle.

getRootXform LMatrix4f const &PartBundle::get_root_xform(void) const; Description: Returns the transform matrix which is implicitly applied at the root of the animated hierarchy.

loadBindAnim PointerTo< AnimControl > PartBundle::load_bind_anim(Loader *loader, Filename const &filename, int hierarchy_match_flags, PartSubset const &subset, bool allow_async); Description: Binds an animation to the bundle. The animation is loaded from the disk via the indicated Loader object. In other respects, this behaves similarly to bind_anim(), with the addition of asynchronous support. If allow_aysnc is true, the load will be asynchronous if possible. This requires that the animation basename can be found in the PartBundle's preload table (see get_anim_preload()). In an asynchronous load, the animation file will be loaded and bound in a sub-thread. This means that the animation will not necessarily be available at the time this method returns. You may still use the returned AnimControl immediately, though, but no visible effect will occur until the animation eventually becomes available. You can test AnimControl::is_pending() to see if the animation has been loaded yet, or wait for it to finish with AnimControl::wait_pending() or even PartBundle::wait_pending(). You can also set an event to be triggered when the animation finishes loading with AnimControl::set_pending_done_event().

mergeAnimPreloads void PartBundle::merge_anim_preloads(PartBundle const *other); Description: Copies the contents of the other PartBundle's preload table into this one.

modifyAnimPreload PointerTo< AnimPreloadTable > PartBundle::modify_anim_preload(void); Description: Returns a modifiable pointer to the AnimPreloadTable associated with the PartBundle, if any.

output virtual void PartBundle::output(ostream &out) const; Description: Writes a one-line description of the bundle.

releaseJoint bool PartBundle::release_joint(string const &joint_name); Description: Releases the named joint from the effects of a previous call to freeze_joint() or control_joint(). It will henceforth once again follow whatever transforms are dictated by the animation. Returns true if the joint is released, or false if the named child was not previously controlled or frozen, or it does not exist.

setAnimBlendFlag void PartBundle::set_anim_blend_flag(bool anim_blend_flag); Description: Defines the way the character responds to multiple calls to set_control_effect()). By default, this flag is set false, which disallows multiple animations. When this flag is false, it is not necessary to explicitly set the control_effect when starting an animation; starting the animation will implicitly remove the control_effect from the previous animation and set it on the current one. However, if this flag is set true, the control_effect must be explicitly set via set_control_effect() whenever an animation is to affect the character.

setAnimPreload void PartBundle::set_anim_preload(AnimPreloadTable *table); Description: Replaces the AnimPreloadTable associated with the PartBundle.

setBlendType void PartBundle::set_blend_type(PartBundle::BlendType bt); Description: Defines the algorithm that is used when blending multiple frames or multiple animations together, when either anim_blend_flag or frame_blend_flag is set to true. See partBundle.h for a description of the meaning of each of the BlendType values.

setControlEffect void PartBundle::set_control_effect(AnimControl *control, float effect); Description: Sets the amount by which the character is affected by the indicated AnimControl (and its associated animation). Normally, this will only be zero or one. Zero indicates the animation does not affect the character, and one means it does. If the _anim_blend_flag is not false (see set_anim_blend_flag()), it is possible to have multiple AnimControls in effect simultaneously. In this case, the effect is a weight that indicates the relative importance of each AnimControl to the final animation.

setFrameBlendFlag void PartBundle::set_frame_blend_flag(bool frame_blend_flag); Description: Specifies whether the character interpolates (blends) between two sequential frames of an active animation, showing a smooth intra-frame motion, or whether it holds each frame until the next frame is ready, showing precisely the specified animation. When this value is false, the character holds each frame until the next is ready. When this is true, the character will interpolate between two consecutive frames of animation for each frame the animation is onscreen, according to the amount of time elapsed between the frames. The default value of this flag is determined by the interpolate-frames Config.prc variable. Use set_blend_type() to change the algorithm that the character uses to interpolate matrix positions.

setRootXform void PartBundle::set_root_xform(LMatrix4f const &root_xform); Description: Specifies the transform matrix which is implicitly applied at the root of the animated hierarchy.

update bool PartBundle::update(void); Description: Updates all the parts in the bundle to reflect the data for the current frame (as set in each of the AnimControls). Returns true if any part has changed as a result of this, or false otherwise.

waitPending void PartBundle::wait_pending(void); Description: Blocks the current thread until all currently-pending AnimControls, with a nonzero control effect, have been loaded and are properly bound.

xform void PartBundle::xform(LMatrix4f const &mat); Description: Applies the indicated transform to the root of the animated hierarchy.

PartGroup PartGroup::PartGroup(PartGroup *parent, string const &name); This is the normal PartGroup constructor. Filename: partGroup.I Created by: drose (22Feb99) 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." Description: This constructor is only intended for interal use and for derived classes. You should normally use the non-default constructor, below. Description: This constructor is only intended for interal use and for derived classes. You should normally use the make_copy() interface to make copies.. Description: Creates the PartGroup, and adds it to the indicated parent. The only way to delete it subsequently is to delete the entire hierarchy.

applyControl virtual bool PartGroup::apply_control(PandaNode *node); Description: Specifies a node to influence this particular joint so that it will always hold the node's transform. Returns true if this is a joint that can be so controlled, false otherwise. This is normally only called internally by PartBundle::control_joint(), but you may also call it directly.

applyFreeze bool PartGroup::apply_freeze(TransformState const *transform); Description: Freezes this particular joint so that it will always hold the specified transform. Returns true if this is a joint that can be so frozen, false otherwise. This is normally only called internally by PartBundle::freeze_joint(), but you may also call it directly.

applyFreezeMatrix virtual bool PartGroup::apply_freeze_matrix(LVecBase3f const &pos, LVecBase3f const &hpr, LVecBase3f const &scale); Description: Freezes this particular joint so that it will always hold the specified transform. Returns true if this is a joint that can be so frozen, false otherwise. This is normally only called internally by PartBundle::freeze_joint(), but you may also call it directly.

applyFreezeScalar virtual bool PartGroup::apply_freeze_scalar(float value); Description: Freezes this particular joint so that it will always hold the specified transform. Returns true if this is a joint that can be so frozen, false otherwise. This is normally only called internally by PartBundle::freeze_joint(), but you may also call it directly.

clearForcedChannel virtual bool PartGroup::clear_forced_channel(void); Description: Undoes the effect of a previous call to apply_freeze() or apply_control(). Returns true if the joint was modified, false otherwise. This is normally only called internally by PartBundle::release_joint(), but you may also call it directly.

copySubgraph PartGroup *PartGroup::copy_subgraph(void) const; Description: Allocates and returns a new copy of this node and of all of its children.

findChild PartGroup *PartGroup::find_child(string const &name) const; Description: Returns the first descendant found with the indicated name, or NULL if no such descendant exists.

getChild PartGroup *PartGroup::get_child(int n) const; Description: Returns the nth child of the group.

getClassType static TypeHandle PartGroup::get_class_type(void); Undocumented function.

getForcedChannel virtual AnimChannelBase *PartGroup::get_forced_channel(void) const; Description: Returns the AnimChannelBase that has been forced to this joint by a previous call to apply_freeze() or apply_control(), or NULL if no such channel has been applied.

getNumChildren int PartGroup::get_num_children(void) const; Description: Returns the number of child nodes of the group.

isCharacterJoint virtual bool PartGroup::is_character_joint(void) const; Description: Returns true if this part is a CharacterJoint, false otherwise. This is a tiny optimization over is_of_type(CharacterType::get_class_type()).

makeCopy virtual PartGroup *PartGroup::make_copy(void) const; Description: Allocates and returns a new copy of the node. Children are not copied, but see copy_subgraph().

write virtual void PartGroup::write(ostream &out, int indent_level) const; Description: Writes a brief description of the group and all of its descendants.

writeWithValue virtual void PartGroup::write_with_value(ostream &out, int indent_level) const; Description: Writes a brief description of the group, showing its current value, and that of all of its descendants.

getClassType static TypeHandle TypedWritableReferenceCount::get_class_type(void); Undocumented function.

getClassType static TypeHandle TypedWritable::get_class_type(void); Undocumented function.

getClassType static TypeHandle TypedObject::get_class_type(void); Undocumented function.

getType virtual TypeHandle TypedObject::get_type(void) const = 0; Derived classes should override this function to return get_class_type().

getTypeIndex int TypedObject::get_type_index(void) const; Description: Returns the internal index number associated with this object's TypeHandle, a unique number for each different type. This is equivalent to get_type().get_index().

isExactType bool TypedObject::is_exact_type(TypeHandle handle) const; Description: Returns true if the current object is the indicated type exactly.

isOfType bool TypedObject::is_of_type(TypeHandle handle) const; Description: Returns true if the current object is or derives from the indicated type.

getClassType static TypeHandle ReferenceCount::get_class_type(void); Undocumented function.

getRefCount int ReferenceCount::get_ref_count(void) const; Description: Returns the current reference count.

ref void ReferenceCount::ref(void) const; Description: Explicitly increments the reference count. User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically. This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it.

testRefCountIntegrity bool ReferenceCount::test_ref_count_integrity(void) const; Description: Does some easy checks to make sure that the reference count isn't completely bogus. Returns true if ok, false otherwise.

testRefCountNonzero bool ReferenceCount::test_ref_count_nonzero(void) const; Description: Does some easy checks to make sure that the reference count isn't zero, or completely bogus. Returns true if ok, false otherwise.

unref bool ReferenceCount::unref(void) const; Description: Explicitly decrements the reference count. Note that the object will not be implicitly deleted by unref() simply because the reference count drops to zero. (Having a member function delete itself is problematic; plus, we don't have a virtual destructor anyway.) However, see the helper function unref_delete(). User code should avoid using ref() and unref() directly, which can result in missed reference counts. Instead, let a PointerTo object manage the reference counting automatically. This function is const, even though it changes the object, because generally fiddling with an object's reference count isn't considered part of fiddling with the object. An object might be const in other ways, but we still need to accurately count the number of references to it. The return value is true if the new reference count is nonzero, false if it is zero.

Namable Namable::Namable(string const &initial_name = ("")); Description:

clearName void Namable::clear_name(void); Description: Resets the Namable's name to empty.

getClassType static TypeHandle Namable::get_class_type(void); Undocumented function.

getName string const &Namable::get_name(void) const; Description:

hasName bool Namable::has_name(void) const; Description: Returns true if the Namable has a nonempty name set, false if the name is empty.

operator = Namable &Namable::operator =(Namable const &other); Description:

output void Namable::output(ostream &out) const; In the absence of any definition to the contrary, outputting a Namable will write out its name. Description: Outputs the Namable. This function simply writes the name to the output stream; most Namable derivatives will probably redefine this.

setName void Namable::set_name(string const &name); Description: