Panda3D
|
00001 // Filename: eggData.h 00002 // Created by: drose (20Jan99) 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 EGGDATA_H 00016 #define EGGDATA_H 00017 00018 #include "pandabase.h" 00019 00020 #include "eggGroupNode.h" 00021 #include "filename.h" 00022 #include "coordinateSystem.h" 00023 #include "pnotify.h" 00024 #include "dSearchPath.h" 00025 00026 class BamCacheRecord; 00027 00028 //////////////////////////////////////////////////////////////////// 00029 // Class : EggData 00030 // Description : This is the primary interface into all the egg data, 00031 // and the root of the egg file structure. An EggData 00032 // structure corresponds exactly with an egg file on the 00033 // disk. 00034 // 00035 // The EggData class inherits from EggGroupNode its 00036 // collection of children, which are accessed by using 00037 // the EggData itself as an STL container with begin() 00038 // and end() calls. The children of the EggData class 00039 // are the toplevel nodes in the egg file. 00040 //////////////////////////////////////////////////////////////////// 00041 class EXPCL_PANDAEGG EggData : public EggGroupNode { 00042 PUBLISHED: 00043 INLINE EggData(); 00044 INLINE EggData(const EggData ©); 00045 INLINE EggData &operator = (const EggData ©); 00046 00047 static bool resolve_egg_filename(Filename &egg_filename, 00048 const DSearchPath &searchpath = DSearchPath()); 00049 00050 bool read(Filename filename, string display_name = string()); 00051 bool read(istream &in); 00052 void merge(EggData &other); 00053 00054 bool load_externals(const DSearchPath &searchpath = DSearchPath()); 00055 bool load_externals(const DSearchPath &searchpath, BamCacheRecord *record); 00056 int collapse_equivalent_textures(); 00057 int collapse_equivalent_materials(); 00058 00059 bool write_egg(Filename filename); 00060 bool write_egg(ostream &out); 00061 00062 INLINE void set_auto_resolve_externals(bool resolve); 00063 INLINE bool get_auto_resolve_externals() const; 00064 INLINE bool original_had_absolute_pathnames() const; 00065 00066 void set_coordinate_system(CoordinateSystem coordsys); 00067 INLINE CoordinateSystem get_coordinate_system() const; 00068 00069 INLINE void set_egg_filename(const Filename &egg_filename); 00070 INLINE const Filename &get_egg_filename() const; 00071 00072 INLINE void recompute_vertex_normals(double threshold); 00073 INLINE void recompute_polygon_normals(); 00074 INLINE void strip_normals(); 00075 00076 protected: 00077 virtual void write(ostream &out, int indent_level = 0) const; 00078 00079 private: 00080 void post_read(); 00081 void pre_write(); 00082 00083 bool _auto_resolve_externals; 00084 bool _had_absolute_pathnames; 00085 CoordinateSystem _coordsys; 00086 Filename _egg_filename; 00087 00088 public: 00089 static TypeHandle get_class_type() { 00090 return _type_handle; 00091 } 00092 static void init_type() { 00093 EggGroupNode::init_type(); 00094 register_type(_type_handle, "EggData", 00095 EggGroupNode::get_class_type()); 00096 } 00097 virtual TypeHandle get_type() const { 00098 return get_class_type(); 00099 } 00100 virtual TypeHandle force_init_type() {init_type(); return get_class_type();} 00101 00102 private: 00103 static TypeHandle _type_handle; 00104 }; 00105 00106 #include "eggData.I" 00107 00108 #endif