Panda3D

characterJoint.h
Go to the documentation of this file.
1 /**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file characterJoint.h
10 * @author drose
11 * @date 1999-02-23
12 */
13
14 #ifndef CHARACTERJOINT_H
15 #define CHARACTERJOINT_H
16
17 #include "pandabase.h"
18 #include "transformState.h"
19
20 #include "movingPartMatrix.h"
21 #include "pandaNode.h"
22 #include "nodePathCollection.h"
23 #include "ordered_vector.h"
24
25 class JointVertexTransform;
26 class Character;
27
28 /**
29 * This represents one joint of the character's animation, containing an
30 * animating transform matrix.
31 */
32 class EXPCL_PANDA_CHAR CharacterJoint : public MovingPartMatrix {
33 protected:
34 CharacterJoint();
35 CharacterJoint(const CharacterJoint &copy);
36
37 PUBLISHED:
38 explicit CharacterJoint(Character *character, PartBundle *root,
39 PartGroup *parent, const std::string &name,
40 const LMatrix4 &default_value);
41 virtual ~CharacterJoint();
42
43 public:
44 virtual bool is_character_joint() const;
45 virtual PartGroup *make_copy() const;
46
47 virtual bool update_internals(PartBundle *root, PartGroup *parent,
48 bool self_changed, bool parent_changed,
49 Thread *current_thread);
50 virtual void do_xform(const LMatrix4 &mat, const LMatrix4 &inv_mat);
51
52 PUBLISHED:
53 bool add_net_transform(PandaNode *node);
54 bool remove_net_transform(PandaNode *node);
55 bool has_net_transform(PandaNode *node) const;
56 void clear_net_transforms();
57 NodePathCollection get_net_transforms();
58
59 bool add_local_transform(PandaNode *node);
60 bool remove_local_transform(PandaNode *node);
61 bool has_local_transform(PandaNode *node) const;
62 void clear_local_transforms();
63 NodePathCollection get_local_transforms();
64
65 void get_transform(LMatrix4 &transform) const;
66 INLINE const LMatrix4 &get_transform() const;
67 CPT(TransformState) get_transform_state() const;
68
69 void get_net_transform(LMatrix4 &transform) const;
70
71 Character *get_character() const;
72
73 private:
74 void set_character(Character *character);
75
76 private:
77 // Not a reference-counted pointer.
78 Character *_character;
79
80 typedef ov_set< PT(PandaNode) > NodeList;
81 NodeList _net_transform_nodes;
82 NodeList _local_transform_nodes;
83
84 typedef ov_set<JointVertexTransform *> VertexTransforms;
85 VertexTransforms _vertex_transforms;
86
87 public:
88 static void register_with_read_factory();
89 virtual void write_datagram(BamWriter* manager, Datagram &me);
90 virtual int complete_pointers(TypedWritable **p_list,
91 BamReader *manager);
92
93 static TypedWritable *make_CharacterJoint(const FactoryParams &params);
94
95 protected:
96 void fillin(DatagramIterator& scan, BamReader* manager);
97
98 private:
99 int _num_net_nodes, _num_local_nodes;
100
101 public:
102 // The _geom_node member just holds a temporary pointer to a node for the
103 // CharacterMaker's convenenience while creating the character. It does not
104 // store any meaningful value after creation is complete.
105 PT(PandaNode) _geom_node;
106
107 // These are filled in as the joint animates.
108 LMatrix4 _net_transform;
109 LMatrix4 _initial_net_transform_inverse;
110
111 // This is the product of the above; the matrix that gets applied to a
112 // vertex (whose coordinates are in the coordinate space of the character
113 // in its neutral pose) to transform it from its neutral position to its
114 // animated position.
115 LMatrix4 _skinning_matrix;
116
117 public:
118 virtual TypeHandle get_type() const {
119 return get_class_type();
120 }
121 virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
122 static TypeHandle get_class_type() {
123 return _type_handle;
124 }
125 static void init_type() {
126 MovingPartMatrix::init_type();
127 register_type(_type_handle, "CharacterJoint",
128 MovingPartMatrix::get_class_type());
129 }
130
131 private:
132 static TypeHandle _type_handle;
133
134 friend class Character;
135 friend class CharacterJointBundle;
136 friend class JointVertexTransform;
137 };
138
139 #include "characterJoint.I"
140
141 #endif
characterJoint.I
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
BamReader
This is the fundamental interface for extracting binary objects from a Bam file, as generated by a Ba...
Definition: bamReader.h:110
BamWriter
This is the fundamental interface for writing binary objects to a Bam file, to be extracted later by ...
Definition: bamWriter.h:63
CharacterJointBundle
The collection of all the joints and sliders in the character.
Definition: characterJointBundle.h:28
CharacterJoint
This represents one joint of the character's animation, containing an animating transform matrix.
Definition: characterJoint.h:32
Character
An animated character, with skeleton-morph animation and either soft- skinned or hard-skinned vertice...
Definition: character.h:38
DatagramIterator
A class to retrieve the individual data elements previously stored in a Datagram.
Definition: datagramIterator.h:27
Datagram
An ordered list of data elements, formatted in memory for transmission over a socket or writing to a ...
Definition: datagram.h:38
FactoryParams
An instance of this class is passed to the Factory when requesting it to do its business and construc...
Definition: factoryParams.h:36
JointVertexTransform
This is a specialization on VertexTransform that returns the transform necessary to move vertices as ...
Definition: jointVertexTransform.h:33
MovingPartBase::update_internals
virtual bool update_internals(PartBundle *root, PartGroup *parent, bool self_changed, bool parent_changed, Thread *current_thread)
This is called by do_update() whenever the part or some ancestor has changed values.
Definition: movingPartBase.cxx:180
MovingPartBase::complete_pointers
virtual int complete_pointers(TypedWritable **plist, BamReader *manager)
Receives an array of pointers, one for each time manager->read_pointer() was called in fillin().
Definition: movingPartBase.cxx:366
MovingPartMatrix
This is a particular kind of MovingPart that accepts a matrix each frame.
Definition: movingPartMatrix.h:29
MovingPartMatrix::register_with_read_factory
static void register_with_read_factory()
Factory method to generate a MovingPartMatrix object.
Definition: movingPartMatrix.cxx:405
MovingPart< ACMatrixSwitchType >::write_datagram
virtual void write_datagram(BamWriter *manager, Datagram &me)
Function to write the important information in the particular object to a Datagram.
Definition: movingPart.I:100
NodePathCollection
This is a set of zero or more NodePaths.
Definition: nodePathCollection.h:26
PandaNode
A basic node of the scene graph or data graph.
Definition: pandaNode.h:65
PartBundle
This is the root of a MovingPart hierarchy.
Definition: partBundle.h:46
PartGroup
This is the base class for PartRoot and MovingPart.
Definition: partGroup.h:43
PartGroup::make_copy
virtual PartGroup * make_copy() const
Allocates and returns a new copy of the node.
Definition: partGroup.cxx:67
PartGroup::is_character_joint
virtual bool is_character_joint() const
Returns true if this part is a CharacterJoint, false otherwise.
Definition: partGroup.cxx:58
PartGroup::do_xform
virtual void do_xform(const LMatrix4 &mat, const LMatrix4 &inv_mat)
Called by PartBundle::xform(), this indicates the indicated transform is being applied to the root jo...
Definition: partGroup.cxx:490
Thread
A thread; that is, a lightweight process.
Definition: thread.h:46
TransformState
Indicates a coordinate-system transform on vertices.
Definition: transformState.h:54
TypeHandle
TypeHandle is the identifier used to differentiate C++ class types.
Definition: typeHandle.h:81
TypedWritable
Base class for objects that can be written to and read from Bam files.
Definition: typedWritable.h:35
ov_set
A specialization of ordered_vector that emulates a standard STL set: one copy of each element is allo...
Definition: ordered_vector.h:269
movingPartMatrix.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
nodePathCollection.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
ordered_vector.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
pandaNode.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
pandabase.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
register_type
void register_type(TypeHandle &type_handle, const std::string &name)
This inline function is just a convenient way to call TypeRegistry::register_type(),...
Definition: register_type.I:22
transformState.h
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.