Panda3D
characterMaker.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 characterMaker.h
10  * @author drose
11  * @date 2002-03-06
12  */
13 
14 #ifndef CHARACTERMAKER_H
15 #define CHARACTERMAKER_H
16 
17 #include "pandabase.h"
18 
19 #include "vertexTransform.h"
20 #include "vertexSlider.h"
21 #include "character.h"
22 #include "vector_PartGroupStar.h"
23 #include "typedef.h"
24 #include "pmap.h"
25 
26 
27 class EggNode;
28 class EggGroup;
29 class EggGroupNode;
30 class EggPrimitive;
31 class EggBin;
32 class PartGroup;
34 class Character;
35 class GeomNode;
36 class CharacterSlider;
37 class MovingPartBase;
38 class EggLoader;
39 class PandaNode;
40 
41 /**
42  * Converts an EggGroup hierarchy, beginning with a group with <Dart> set, to
43  * a character node with joints.
44  */
45 class EXPCL_PANDA_EGG2PG CharacterMaker {
46 public:
47  CharacterMaker(EggGroup *root, EggLoader &loader, bool structured = false);
48 
49  Character *make_node();
50 
51  std::string get_name() const;
52  PartGroup *egg_to_part(EggNode *egg_node) const;
53  VertexTransform *egg_to_transform(EggNode *egg_node);
54  int egg_to_index(EggNode *egg_node) const;
55  PandaNode *part_to_node(PartGroup *part, const std::string &name) const;
56 
57  int create_slider(const std::string &name);
58  VertexSlider *egg_to_slider(const std::string &name);
59 
60 private:
61  CharacterJointBundle *make_bundle();
62  void build_joint_hierarchy(EggNode *egg_node, PartGroup *part, int index);
63  void parent_joint_nodes(PartGroup *part);
64 
65  void make_geometry(EggNode *egg_node);
66 
67  EggGroupNode *determine_primitive_home(EggPrimitive *egg_primitive);
68  EggGroupNode *determine_bin_home(EggBin *egg_bin);
69  VertexTransform *get_identity_transform();
70 
72  NodeMap _node_map;
73 
74  typedef vector_PartGroupStar Parts;
75  Parts _parts;
76 
77  typedef pmap<int, PT(VertexTransform) > VertexTransforms;
78  VertexTransforms _vertex_transforms;
79  PT(VertexTransform) _identity_transform;
80 
81  typedef pmap<std::string, PT(VertexSlider) > VertexSliders;
82  VertexSliders _vertex_sliders;
83 
84  EggLoader &_loader;
85  EggGroup *_egg_root;
86  PT(Character) _character_node;
87  CharacterJointBundle *_bundle;
88  PartGroup *_morph_root;
89  PartGroup *_skeleton_root;
90 
91  bool _structured;
92 
93 };
94 
95 #endif
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
The collection of all the joints and sliders in the character.
Converts an EggGroup hierarchy, beginning with a group with <Dart> set, to a character node with join...
This is a morph slider within the character.
An animated character, with skeleton-morph animation and either soft- skinned or hard-skinned vertice...
Definition: character.h:38
A type of group node that holds related subnodes.
Definition: eggBin.h:26
A base class for nodes in the hierarchy that are not leaf nodes.
Definition: eggGroupNode.h:46
The main glue of the egg hierarchy, this corresponds to the <Group>, <Instance>, and <Joint> type nod...
Definition: eggGroup.h:34
Converts an egg data structure, possibly read from an egg file but not necessarily,...
Definition: eggLoader.h:67
A base class for things that may be directly added into the egg hierarchy.
Definition: eggNode.h:36
A base class for any of a number of kinds of geometry primitives: polygons, point lights,...
Definition: eggPrimitive.h:49
A node that holds Geom objects, renderable pieces of geometry.
Definition: geomNode.h:34
This is the base class for a single animatable piece that may be bound to one channel (or more,...
A basic node of the scene graph or data graph.
Definition: pandaNode.h:65
This is the base class for PartRoot and MovingPart.
Definition: partGroup.h:43
This is an abstract base class that retains some slider value, which is a linear value that typically...
Definition: vertexSlider.h:37
This is an abstract base class that holds a pointer to some transform, computed in some arbitrary way...
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.
PANDA 3D SOFTWARE Copyright (c) Carnegie Mellon University.