![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 2004 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: gdbTerrainV205Reader.h,v $ $Revision: 1.19 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef gdbTerrainV205Reader_H_ 00010 #define gdbTerrainV205Reader_H_ 00011 00012 #include "gdb/gdbDefines.h" 00013 #include <stdio.h> 00014 #include "terrainCS/coordSystem.h" 00015 #include "gdb/terModCbInfo.h" 00016 #include "gdb/gdbTerrainReader.h" 00017 00018 #include "gdb/terrainDb.h" 00019 #include "geometry/spatialSubdivision.h" 00020 #include <vlutil/vlConfig.h> 00021 #include <map> 00022 00023 //forward declarations 00024 class DtExtent; 00025 class DtChord; 00026 class DtChordBundle; 00027 class DtChordIntersectionRecord; 00028 class DtChordIntersectRecordList; 00029 class DtColor; 00030 class DtMemoryManager; 00031 class DtAllTypesPolygon; 00032 class DtTerrainInitializer; 00033 class DtBaseCoordinateSystem; 00034 class DtNetworkNode; 00035 class DtNetworkSegment; 00036 class DtNetworkEdge; 00037 class DtNetworkSpecElement; 00038 class DtFeature; 00039 class DtGroup; 00040 class DtSurface; 00041 class DtGdbTerrainV205Reader; 00042 class DtGdbReaderInitializer; 00043 class DtExtentInitializer; 00044 00045 typedef DtGdbNode* (*DtGdbTerrainV205ReaderNodeFcn)(DtGdbNode::DtGdbNodeType, FILE* , DtGdbTerrainV205Reader* , DtGroup* ); 00046 00047 // class DtGdbTerrainV205Reader: 00048 // 00049 // DtGdbTerrainV205Reader is responsible for loading the version 205 00050 // .gdb files into the system. It is used by the DtGdbTerrainReader. 00051 // 00052 00053 class DT_DLL_gdb DtGdbTerrainV205Reader : public DtGdbTerrainReader 00054 { 00055 public: 00056 00057 // default constructor 00058 DtGdbTerrainV205Reader(); 00059 00060 // destructor 00061 virtual ~DtGdbTerrainV205Reader(); 00062 00063 private: 00064 // copy constructor and assignment operator not implemented 00065 DtGdbTerrainV205Reader(const DtGdbTerrainV205Reader& orig); 00066 DtGdbTerrainV205Reader& operator=(const DtGdbTerrainV205Reader& orig); 00067 00068 public: 00069 00070 static DtTerrainReader* create(); 00071 00072 // Returns the type of file this database was loaded from. 00073 // This class returns "gdb". Override this function in derived 00074 // terrain db classes. 00075 virtual const DtString dataType() const; 00076 00077 virtual bool readFromFile(const DtFilename& basename, DtTerrainDatabase* terrain); 00078 protected: 00079 00080 // I/O calls. 00081 00082 virtual void resetStatistics(); 00083 00084 virtual bool readFrom(FILE* fp, DtTerrainDatabase* terrain); 00085 00086 virtual bool readCoordinateSystem(FILE* fp); 00087 00088 virtual bool validityCheckVersionNumber(unsigned int versionNumberFromFile); 00089 00090 virtual DtGdbNode* readNode(FILE* fp, DtGroup* parent); 00091 00092 virtual bool setReadFcn(DtGdbNode::DtGdbNodeType type, DtGdbTerrainV205ReaderNodeFcn fun); 00093 virtual DtGdbTerrainV205ReaderNodeFcn readFcn(DtGdbNode::DtGdbNodeType type); 00094 00095 static DtGdbNode* readGroup(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00096 static DtGdbNode* readPolyInd(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00097 static DtGdbNode* readLOD(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00098 static DtGdbNode* readDynamicCoordSys(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00099 static DtGdbNode* readStaticCoordSys(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00100 static DtGdbNode* readTerrainFeature(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00101 static DtGdbNode* readCulturalFeature(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00102 static DtGdbNode* readBuilding(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00103 static DtGdbNode* readTree(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00104 static DtGdbNode* readTriangleInd(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00105 static DtGdbNode* readFileNode(DtGdbNode::DtGdbNodeType type, FILE* fp, DtGdbTerrainV205Reader* me, DtGroup* parent); 00106 00107 virtual bool readSurface(FILE* fp, DtSurface &surface); 00108 // functions to read vector networks 00109 virtual bool readNetworkNode(FILE* fp, DtNetworkNode* node, std::map<unsigned, unsigned>& oldAddressToNewAddressMap); 00110 virtual bool readNetworkSpecElement(FILE* fp, DtNetworkSpecElement* elem); 00111 virtual bool readNetworkEdge(FILE* fp, DtNetworkEdge* edge, unsigned int& startNodeIndex, unsigned int& endNodeIndex); 00112 00113 virtual bool readTerrainData(FILE* fp); 00114 virtual bool readFeatureData(FILE* fp); 00115 00116 virtual bool readSurfaceManager(FILE* fp); 00117 virtual bool readSpecificationManager(FILE* fp); 00118 virtual bool readVertexManager(FILE* fp); 00119 virtual bool readVectorNetwork(FILE* fp); 00120 virtual bool readCoordSys(FILE* fp, DtBaseCoordinateSystem* coordSys); 00121 00122 virtual bool readFeature(FILE* fp, DtFeature* feature); 00123 00124 // While reading a GDB file, reports whether this database will contain 00125 // optional data 00126 bool fileHasOptionalData(DtTerrainFileOptionalData optData); 00127 00128 virtual bool readSpheroidInformation(FILE* fp); 00129 protected: 00130 00131 // For debugging purposes - prints out the numbers of the different nodes 00132 // and other file data (number of specifications, vertices, etc.) read in 00133 virtual void printReadNodeCount(); 00134 00135 unsigned int myOptionalDataFlagFromFile; 00136 00137 DtGdbTerrainV205ReaderNodeFcn* myReaderFunctionTable; 00138 }; 00139 00140 // While reading a GDB file, reports whether this database will contain 00141 // optional data 00142 inline bool DtGdbTerrainV205Reader::fileHasOptionalData( 00143 DtTerrainFileOptionalData optData) 00144 { 00145 if (myOptionalDataFlagFromFile & optData) 00146 { 00147 return true; 00148 } 00149 else 00150 { 00151 return false; 00152 } 00153 } 00154 00155 #endif