00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __OMREADER_HH__
00035 #define __OMREADER_HH__
00036
00037
00038
00039
00040
00041 #include <OpenMesh/Core/System/config.h>
00042 #include <OpenMesh/Core/Utils/SingletonT.hh>
00043 #include <OpenMesh/Core/IO/OMFormat.hh>
00044 #include <OpenMesh/Core/IO/IOManager.hh>
00045 #include <OpenMesh/Core/IO/importer/BaseImporter.hh>
00046 #include <OpenMesh/Core/IO/reader/BaseReader.hh>
00047
00048
00049 #include <iostream>
00050 #include <string>
00051
00052
00053
00054
00055
00056 namespace OpenMesh {
00057 namespace IO {
00058
00059
00060
00061
00062
00067 class _OMReader_ : public BaseReader
00068 {
00069 public:
00070
00071 _OMReader_() { IOManager::Instance().register_module(this); }
00072
00073 virtual ~_OMReader_() { }
00074
00075 std::string get_description() const { return "OpenMesh File Format"; }
00076 std::string get_extensions() const { return "om"; }
00077 std::string get_magic() const { return "OM"; }
00078
00079 bool read(const std::string& _filename,
00080 BaseImporter& _bi,
00081 Options& _opt );
00082
00083 virtual bool can_u_read(const std::string& _filename) const;
00084 virtual bool can_u_read(std::istream& _is) const;
00085
00086
00087 private:
00088
00089 bool supports( const OMFormat::uint8 version ) const;
00090
00091 bool read(std::istream& _is, BaseImporter& _bi, Options& _opt ) const;
00092 bool read_ascii(std::istream& _is, BaseImporter& _bi, Options& _opt) const;
00093 bool read_binary(std::istream& _is, BaseImporter& _bi, Options& _opt) const;
00094
00095 typedef OMFormat::Header Header;
00096 typedef OMFormat::Chunk::Header ChunkHeader;
00097 typedef OMFormat::Chunk::PropertyName PropertyName;
00098
00099
00100 mutable size_t bytes_;
00101 mutable Header header_;
00102 mutable ChunkHeader chunk_header_;
00103 mutable PropertyName property_name_;
00104
00105 bool read_binary_vertex_chunk( std::istream &_is,
00106 BaseImporter &_bi,
00107 Options &_opt,
00108 bool _swap) const;
00109
00110 bool read_binary_face_chunk( std::istream &_is,
00111 BaseImporter &_bi,
00112 Options &_opt,
00113 bool _swap) const;
00114
00115 bool read_binary_edge_chunk( std::istream &_is,
00116 BaseImporter &_bi,
00117 Options &_opt,
00118 bool _swap) const;
00119
00120 bool read_binary_halfedge_chunk( std::istream &_is,
00121 BaseImporter &_bi,
00122 Options &_opt,
00123 bool _swap) const;
00124
00125 bool read_binary_mesh_chunk( std::istream &_is,
00126 BaseImporter &_bi,
00127 Options &_opt,
00128 bool _swap) const;
00129
00130 size_t restore_binary_custom_data( std::istream& _is,
00131 BaseProperty* _bp,
00132 size_t _n_elem,
00133 bool _swap) const;
00134
00135 };
00136
00137
00138
00139
00140
00142 typedef SingletonT<_OMReader_> OMReader;
00143
00144
00145
00146 }
00147 }
00148
00149 #endif
00150