![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1998 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: tdbMetafile.h,v $ $Revision: 1.20 $ $State: Exp $ 00007 *******************************************************************************/ 00008 #ifndef tdbMetafile_H_ 00009 #define tdbMetafile_H_ 00010 00011 // \file tdbMetafile.h 00012 // \brief Contains the DtTdbMetafile class declaration. 00013 00014 #include "terrainDbFactory/terrainDbFactoryDefines.h" 00015 #include <vlutil/vlFilename.h> 00016 #include <iosfwd> 00017 #include <vlutil/vlConfig.h> 00018 #include <list> 00019 #include <vector> 00020 00021 class DtTerrainMetafileRecord; 00022 class DtGdbProcessingMetafileRecord; 00023 class DtTerrainDescriptorRecord; 00024 class DtExtentMetafileRecord; 00025 class DtTdbMetafileFactory; 00026 class DtMetafileRecord; 00027 class DtVectorDataRecord; 00028 class DtPaperMapRecord; 00029 class DtAdditionalDataRecord; 00030 class Dt3DViewMetafileRecord; 00031 class DtTerrainIntersectorRecord; 00032 00033 // 00034 // Instances of this class are accessors to Mak terrain database metafiles. 00035 // Certain database formats require the use of a metafile as the top-level 00036 // file. Example: gdf, dted 00037 class DT_DLL_terrainDbFactory DtTdbMetafile 00038 { 00039 00040 public: 00041 // Includes both terrain and extent metafiles 00042 typedef std::list<DtMetafileRecord*> DtTerrainMfRecContainer; 00043 typedef DtTerrainMfRecContainer::iterator DtTerrainMfRecIter; 00044 typedef DtTerrainMfRecContainer::const_iterator DtTerrainMfRecConstIter; 00045 00046 // Holds all vector records 00047 typedef std::list<DtVectorDataRecord*> DtVecMfRecContainer; 00048 typedef DtVecMfRecContainer::iterator DtVecMfRecIter; 00049 typedef DtVecMfRecContainer::const_iterator DtVecMfRecConstIter; 00050 00051 // Holds all papermap records 00052 typedef std::list<DtPaperMapRecord*> DtPaperMapRecContainer; 00053 typedef DtPaperMapRecContainer::iterator DtPaperMapRecIter; 00054 typedef DtPaperMapRecContainer::const_iterator DtPaperMapRecConstIter; 00055 00056 // Holds all additional records. 00057 typedef std::list<DtAdditionalDataRecord*> DtAdditionalMetafileRecordContainer; 00058 00059 // default constructor. 00060 DtTdbMetafile(DtTdbMetafileFactory *factory); 00061 00062 // destructor 00063 virtual ~DtTdbMetafile(); 00064 00065 // Load the metafile from the given filename. 00066 virtual bool init(const DtFilename& filename); 00067 00068 virtual void setFilename(const DtFilename & name); 00069 virtual const DtFilename & filename() const; 00070 00071 // For now the metafile factory requires a string hash look up to 00072 // create the metafiles. Would be nice if this was perhaps an unsigned int 00073 // but for now strings are the way it is done. 00074 00075 // Creates any metafile 00076 virtual DtMetafileRecord * createMetafileRecord(const DtString & recordString); 00077 00078 // Creates a particular type of metafile 00079 virtual DtTerrainMetafileRecord* createTerrainMetafile(const DtString& recordString); 00080 virtual DtVectorDataRecord* createVectorRecord(const DtString& recordString); 00081 virtual DtPaperMapRecord* createPaperMapRecord(const DtString& recordString); 00082 00083 virtual DtGdbProcessingMetafileRecord* createTerrainProcessingRecord(); 00084 00085 // Returns a pointer to the terrain processing record. 00086 virtual const DtGdbProcessingMetafileRecord* terrainProcessingRecord() const; 00087 virtual DtGdbProcessingMetafileRecord* terrainProcessingRecord(); 00088 00089 // Sets the terrain record pointer 00090 virtual void setTerrainProcessingRecord(DtGdbProcessingMetafileRecord* processMfRec); 00091 00092 // Returns a pointer to the terrain intersector record. 00093 virtual const DtTerrainIntersectorRecord* terrainIntersectorRecord() const; 00094 virtual DtTerrainIntersectorRecord* terrainIntersectorRecord(); 00095 00096 // Sets the terrain intersector pointer. Note that a clone of the record coming 00097 // in is created, so, delete any memory allocated for the record passed into this 00098 // routine 00099 virtual void setTerrainIntersectorRecord(DtTerrainIntersectorRecord* processMfRec); 00100 00101 // Returns a pointer to the terrain descriptor record. This record holds the 00102 // file name for the Mak Terrain Descriptor file and whether the terrain it 00103 // describes has been altered since it was imported 00104 virtual const DtTerrainDescriptorRecord* terrainDescriptorRecord() const; 00105 virtual DtTerrainDescriptorRecord* terrainDescriptorRecord(); 00106 00107 // Sets the terrain record pointer 00108 virtual void setTerrainDescriptorRecord(DtTerrainDescriptorRecord* terrainDescriptorMfRec); 00109 00110 // Returns the list of terrain and extent Metafile Records 00111 virtual const DtTerrainMfRecContainer& terrainMetafileRecordList() const; 00112 virtual DtTerrainMfRecContainer& terrainMetafileRecordList(); 00113 00114 // Add a terrain data record 00115 virtual void addTerrainMfRec(DtMetafileRecord* rec); 00116 00117 // Returns the list of papermaps. 00118 virtual const DtPaperMapRecContainer& paperMapMetafileRecordList() const; 00119 virtual DtPaperMapRecContainer& paperMapMetafileRecordList(); 00120 00121 // Add a paperMap data record 00122 virtual void addPaperMapMfRec(DtPaperMapRecord* paperRec); 00123 00124 // Returns the list of vectorData Metafile Records 00125 virtual const DtVecMfRecContainer& vectorDataMetafileRecordList() const; 00126 virtual DtVecMfRecContainer& vectorDataMetafileRecordList(); 00127 00128 // Returns the list of terrain records that are marked as importable 00129 virtual DtTerrainMfRecContainer importableTerrainMetafileRecordList(); 00130 00131 // Returns the type of the vector files used 00132 virtual const unsigned int vectorFilesType(); 00133 00134 // Add a vector data record 00135 virtual void addVectorDataMfRec(DtVectorDataRecord* vecRec); 00136 00137 // These are records that may not be any of the above types. For use by 00138 // plugins, and other arbitrary pieces of data to be stored in a metafile. 00140 virtual const DtAdditionalMetafileRecordContainer& additionalMetafileRecordList() const; 00141 virtual DtAdditionalMetafileRecordContainer& additionalMetafileRecordList(); 00142 virtual void addAdditionalMfRec(DtAdditionalDataRecord* rec); 00144 00145 // Sets the key value of this record, and adds it to the appropriate 00146 // list based on the recordCategory(). The DtMetafileRecord takes 00147 // ownership of this record. If it cannot be places in a list, 00148 // false is returned and the record is not deleted. 00149 virtual bool addRecord(DtMetafileRecord* record); 00150 00151 // Look up a metafile record by its key. 00152 virtual DtMetafileRecord * findRecord(unsigned int key); 00153 00154 // Removes a metafile record that matches the given key 00155 virtual bool removeRecord(unsigned int key); 00156 00157 // Write self to the given filename 00158 virtual bool put(const DtFilename& filename); 00159 00160 // Write self to stream. 00161 virtual bool put(std::ostream& stream) const; 00162 00163 // Read self from stream. 00164 virtual bool get(std::istream& stream); 00165 00166 // Returns a pointer to the 3DView record (if exists) or null otherwise. 00167 virtual const Dt3DViewMetafileRecord* threeDViewMetafileRecord() const; 00168 virtual Dt3DViewMetafileRecord* threeDViewMetafileRecord(); 00169 00170 // Sets the 3DView record pointer 00171 virtual void setThreeDViewMetafileRecord(Dt3DViewMetafileRecord* extMfRec); 00172 00173 // Deprecated--These supported a single extent or terrain record for the 00174 // terrain database. We need to support multiple terrain records. There's no real 00175 // reason not to. For now these will return the first on their kind. 00176 00177 // Returns a pointer to the extent record. 00178 virtual const DtExtentMetafileRecord* extentMetafileRecord() const; 00179 virtual DtExtentMetafileRecord* extentMetafileRecord(); 00180 00181 // Sets the extent record pointer 00182 virtual void setExtentMfRecord(DtExtentMetafileRecord* extMfRec); 00183 00184 // Returns a pointer to the terrain record. 00185 virtual const DtTerrainMetafileRecord* terrainMetafileRecord() const; 00186 virtual DtTerrainMetafileRecord* terrainMetafileRecord(); 00187 00188 // Sets the terrain record pointer 00189 virtual void setTerrainMfRecord(DtTerrainMetafileRecord* terrainMfRec); 00190 // End functions to deprecate 00191 00192 static int nextUniqueRecordKey(); 00193 00194 virtual void emptyAllRecords(); 00195 00196 // Return a list of metafile records of the specified type (as matched by recordTypeName) 00197 virtual std::vector<DtMetafileRecord*> recordsOfType(const std::string& type) const; 00198 00199 private: 00200 00201 // copy constructor 00202 DtTdbMetafile(const DtTdbMetafile& orig); 00203 00204 // assignment operator 00205 DtTdbMetafile& operator=(const DtTdbMetafile& rhs); 00206 00207 protected: 00208 00209 DtTdbMetafile(); 00210 00211 // Removes and deletes all entries in myVectorDataMetafileRecordList. 00212 // Non-virtual because it is called from the destructor. 00213 void emptyTerrainMetafileRecordList(); 00214 00215 // Removes and deletes all entries in myPaperMapMetafileRecordList. 00216 // Non-virtual because it is called from the destructor. 00217 void emptyPaperMapMetafileRecordList(); 00218 00219 // Removes and deletes all entries in myVectorDataMetafileRecordList. 00220 // Non-virtual because it is called from the destructor. 00221 void emptyVectorDataMetafileRecordList(); 00222 00223 // Removes and deletes all entries in myAdditionalMetafileRecordList. 00224 // Non-virtual because it is called from the destructor. 00225 void emptyAdditionalMetafileRecordList(); 00226 00227 00228 DtTdbMetafileFactory* myFactory; 00229 00230 DtFilename myFilename; 00231 00232 DtGdbProcessingMetafileRecord* myGdbOptionsRecord; 00233 00234 DtTerrainDescriptorRecord * myTerrainDescriptorRecord; 00235 00236 DtTerrainMfRecContainer myTerrainMetafileRecordList; 00237 00238 DtPaperMapRecContainer myPaperMapMetafileRecordList; 00239 00240 DtVecMfRecContainer myVectorDataMetafileRecordList; 00241 00242 Dt3DViewMetafileRecord* my3DViewMetafileRecord; 00243 00244 DtTerrainIntersectorRecord* myTerrainIntersectorRecord; 00245 00246 DtAdditionalMetafileRecordContainer myAdditionalMetafileRecordList; 00247 00248 // Deprecated-- These imposed a single terrain record. 00249 // We need to support multiple terrain records. 00250 DtExtentMetafileRecord* myExtentMetafileRecord; 00251 DtTerrainMetafileRecord* myTerrainMetafileRecord; 00252 00253 unsigned int myVectorFilesType; 00254 00255 // This is the next available unique record key 00256 static int myNextRecordKey; 00257 }; 00258 00259 #endif 00260