Panda3D

maxNodeTree.h

00001 // Filename: maxNodeTree.h
00002 // Created by: crevilla
00003 // from mayaNodeTree.h created by:  drose (06Jun03)
00004 //
00005 ////////////////////////////////////////////////////////////////////
00006 //
00007 // PANDA 3D SOFTWARE
00008 // Copyright (c) Carnegie Mellon University.  All rights reserved.
00009 //
00010 // All use of this software is subject to the terms of the revised BSD
00011 // license.  You should have received a copy of this license along
00012 // with this source code in a file named "LICENSE."
00013 //
00014 ////////////////////////////////////////////////////////////////////
00015 
00016 #ifndef MAXNODETREE_H
00017 #define MAXNODETREE_H
00018 
00019 class EggData;
00020 class EggGroupNode;
00021 
00022 ////////////////////////////////////////////////////////////////////
00023 //       Class : MaxNodeTree
00024 // Description : Describes a complete tree of max nodes for
00025 //               conversion.
00026 ////////////////////////////////////////////////////////////////////
00027 class MaxNodeTree {
00028 public:
00029   MaxNodeTree();
00030   MaxNodeDesc *build_node(INode *max_node);
00031   MaxNodeDesc *build_joint(INode *max_node, MaxNodeDesc *node_joint);
00032   bool build_complete_hierarchy(INode *root, ULONG *selection_list, int len);
00033   MaxNodeDesc *find_node(INode *max_node);
00034   MaxNodeDesc *find_joint(INode *max_node);
00035 
00036   int get_num_nodes() const;
00037   MaxNodeDesc *get_node(int n) const;
00038 
00039   void clear_egg(EggData *egg_data, EggGroupNode *egg_root, 
00040                  EggGroupNode *skeleton_node);
00041   EggGroup *get_egg_group(MaxNodeDesc *node_desc);
00042   EggTable *get_egg_table(MaxNodeDesc *node_desc);
00043   EggXfmSAnim *get_egg_anim(MaxNodeDesc *node_desc);
00044 
00045   MaxNodeDesc* _root;
00046   PN_stdfloat _fps;
00047   // the flag for the setting up collision
00048   //bool _has_collision;
00049   //EggGroup::CollideFlags _cf_type;
00050   //EggGroup::CollisionSolidType _cs_type;
00051   bool _export_mesh;
00052 
00053 private:
00054   EggData *_egg_data;
00055   EggGroupNode *_egg_root;
00056   EggGroupNode *_skeleton_node;
00057 
00058   MaxNodeDesc *r_build_node(INode *max_node);
00059   MaxNodeDesc *r_build_joint(MaxNodeDesc *node_desc, INode *max_node);
00060   bool node_in_list(ULONG handle, ULONG *list, int len);
00061   bool r_build_hierarchy(INode *root, ULONG *selection_list, int len);
00062   bool is_joint(INode *node);
00063   void set_collision_tags(MaxNodeDesc *node_desc, EggGroup *egg_group);
00064 
00065   typedef pmap<ULONG, MaxNodeDesc *> NodesByPath;
00066   NodesByPath _nodes_by_path;
00067 
00068   typedef pvector<MaxNodeDesc *> Nodes;
00069   Nodes _nodes;
00070 };
00071 
00072 #endif
 All Classes Functions Variables Enumerations