Panda3D
|
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