Panda3D
|
00001 // Filename: xFileMesh.h 00002 // Created by: drose (19Jun01) 00003 // 00004 //////////////////////////////////////////////////////////////////// 00005 // 00006 // PANDA 3D SOFTWARE 00007 // Copyright (c) Carnegie Mellon University. All rights reserved. 00008 // 00009 // All use of this software is subject to the terms of the revised BSD 00010 // license. You should have received a copy of this license along 00011 // with this source code in a file named "LICENSE." 00012 // 00013 //////////////////////////////////////////////////////////////////// 00014 00015 #ifndef XFILEMESH_H 00016 #define XFILEMESH_H 00017 00018 #include "pandatoolbase.h" 00019 #include "pvector.h" 00020 #include "pmap.h" 00021 #include "indirectCompareTo.h" 00022 #include "namable.h" 00023 #include "coordinateSystem.h" 00024 00025 class XFileNode; 00026 class XFileDataNode; 00027 class XFileMesh; 00028 class XFileVertex; 00029 class XFileNormal; 00030 class XFileMaterial; 00031 class XFileFace; 00032 class XFileToEggConverter; 00033 class XFileDataNode; 00034 class EggGroupNode; 00035 class EggVertex; 00036 class EggPolygon; 00037 class EggPrimitive; 00038 class Datagram; 00039 00040 //////////////////////////////////////////////////////////////////// 00041 // Class : XFileMesh 00042 // Description : This is a collection of polygons; i.e. a polyset. 00043 //////////////////////////////////////////////////////////////////// 00044 class XFileMesh : public Namable { 00045 public: 00046 XFileMesh(CoordinateSystem cs = CS_yup_left); 00047 ~XFileMesh(); 00048 00049 void clear(); 00050 00051 void add_polygon(EggPolygon *egg_poly); 00052 int add_vertex(EggVertex *egg_vertex, EggPrimitive *egg_prim); 00053 int add_normal(EggVertex *egg_vertex, EggPrimitive *egg_prim); 00054 int add_material(EggPrimitive *egg_prim); 00055 00056 int add_vertex(XFileVertex *vertex); 00057 int add_normal(XFileNormal *normal); 00058 int add_material(XFileMaterial *material); 00059 00060 void set_egg_parent(EggGroupNode *egg_parent); 00061 00062 bool create_polygons(XFileToEggConverter *converter); 00063 00064 bool has_normals() const; 00065 bool has_colors() const; 00066 bool has_uvs() const; 00067 bool has_materials() const; 00068 00069 int get_num_materials() const; 00070 XFileMaterial *get_material(int n) const; 00071 00072 XFileDataNode *make_x_mesh(XFileNode *x_parent, const string &suffix); 00073 XFileDataNode *make_x_normals(XFileNode *x_mesh, const string &suffix); 00074 XFileDataNode *make_x_colors(XFileNode *x_mesh, const string &suffix); 00075 XFileDataNode *make_x_uvs(XFileNode *x_mesh, const string &suffix); 00076 XFileDataNode *make_x_material_list(XFileNode *x_mesh, const string &suffix); 00077 00078 bool fill_mesh(XFileDataNode *obj); 00079 bool fill_mesh_child(XFileDataNode *obj); 00080 bool fill_normals(XFileDataNode *obj); 00081 bool fill_colors(XFileDataNode *obj); 00082 bool fill_uvs(XFileDataNode *obj); 00083 bool fill_skin_weights(XFileDataNode *obj); 00084 bool fill_material_list(XFileDataNode *obj); 00085 00086 private: 00087 typedef pvector<XFileVertex *> Vertices; 00088 typedef pvector<XFileNormal *> Normals; 00089 typedef pvector<XFileMaterial *> Materials; 00090 typedef pvector<XFileFace *> Faces; 00091 00092 CoordinateSystem _cs; 00093 00094 Vertices _vertices; 00095 Normals _normals; 00096 Materials _materials; 00097 Faces _faces; 00098 00099 typedef pmap<int, PN_stdfloat> WeightMap; 00100 00101 class SkinWeightsData { 00102 public: 00103 LMatrix4d _matrix_offset; 00104 string _joint_name; 00105 WeightMap _weight_map; 00106 }; 00107 typedef epvector<SkinWeightsData> SkinWeights; 00108 SkinWeights _skin_weights; 00109 00110 typedef pmap<XFileVertex *, int, IndirectCompareTo<XFileVertex> > UniqueVertices; 00111 typedef pmap<XFileNormal *, int, IndirectCompareTo<XFileNormal> > UniqueNormals; 00112 typedef pmap<XFileMaterial *, int, IndirectCompareTo<XFileMaterial> > UniqueMaterials; 00113 UniqueVertices _unique_vertices; 00114 UniqueNormals _unique_normals; 00115 UniqueMaterials _unique_materials; 00116 00117 bool _has_normals; 00118 bool _has_colors; 00119 bool _has_uvs; 00120 bool _has_materials; 00121 00122 EggGroupNode *_egg_parent; 00123 }; 00124 00125 #endif 00126