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