![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 1999 MaK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: gdbTerrainV204Reader.h,v $ $Revision: 1.16 $ $State: Exp $ 00007 *********************************************************************/ 00008 00009 #ifndef gdbTerrainV204Reader_H_ 00010 #define gdbTerrainV204Reader_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 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 DtNetworkSegmentHelper; 00035 class DtNetworkEdge; 00036 class DtNetworkSpecElement; 00037 class DtFeature; 00038 class DtGroup; 00039 class DtSurface; 00040 class DtGdbTerrainV204Reader; 00041 00042 typedef DtGdbNode* (*DtGdbTerrainV204ReaderNodeFcn)(DtGdbNode::DtGdbNodeType, FILE *, DtGdbTerrainV204Reader *, DtGroup *); 00043 00044 // class DtGdbTerrainV204Reader: 00045 // 00046 // DtGdbTerrainV204Reader is responsible for loading the version 204 00047 // .gdb files into the system. It is used by the DtGdbTerrainReader. 00048 // 00049 00050 class DT_DLL_gdb DtGdbTerrainV204Reader : public DtGdbTerrainReader 00051 { 00052 public: 00053 00054 // default constructor 00055 DtGdbTerrainV204Reader(); 00056 00057 // destructor 00058 virtual ~DtGdbTerrainV204Reader(); 00059 00060 private: 00061 // copy constructor and assignment operator not implemented 00062 DtGdbTerrainV204Reader(const DtGdbTerrainV204Reader& orig); 00063 DtGdbTerrainV204Reader& operator=(const DtGdbTerrainV204Reader& orig); 00064 00065 public: 00066 00067 static DtTerrainReader* create(); 00068 00069 // Returns the type of file this database was loaded from. 00070 // This class returns "gdb". Override this function in derived 00071 // terrain db classes. 00072 virtual const DtString dataType() const; 00073 00074 virtual bool readFromFile(const DtFilename& basename, DtTerrainDatabase* terrain); 00075 00076 protected: 00077 00078 // I/O calls. 00079 00080 virtual bool readFrom(FILE* fp, DtTerrainDatabase *terrain); 00081 00082 virtual bool validityCheckVersionNumber(unsigned int versionNumberFromFile); 00083 00084 virtual DtGdbNode *readNode(FILE *fp, DtGroup *parent); 00085 00086 virtual bool setReadFcn(DtGdbNode::DtGdbNodeType type, DtGdbTerrainV204ReaderNodeFcn fun); 00087 virtual DtGdbTerrainV204ReaderNodeFcn readFcn(DtGdbNode::DtGdbNodeType type); 00088 00089 static DtGdbNode *readGroup(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00090 static DtGdbNode *readPolyInd(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00091 static DtGdbNode *readLOD(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00092 static DtGdbNode *readDynamicCoordSys(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00093 static DtGdbNode *readStaticCoordSys(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00094 static DtGdbNode *readTerrainFeature(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00095 static DtGdbNode *readCulturalFeature(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00096 static DtGdbNode *readBuilding(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00097 static DtGdbNode *readTree(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00098 static DtGdbNode *readTriangleInd(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00099 static DtGdbNode *readFileNode(DtGdbNode::DtGdbNodeType type, FILE *fp, DtGdbTerrainV204Reader *me, DtGroup *parent); 00100 00101 virtual bool readSurface(FILE *fp, DtSurface &surface); 00102 // functions to read vector networks 00103 virtual bool readNetworkNode(FILE *fp, DtNetworkNode *node, unsigned int topology, int numEdges); 00104 virtual bool readNetworkSpecElement(FILE *fp, DtNetworkSpecElement *elem); 00105 virtual bool readNetworkSegment(FILE *fp, DtNetworkSegmentHelper *seg, unsigned int topology); 00106 virtual bool readNetworkEdge(FILE* fp, 00107 DtNetworkEdge* edge, 00108 unsigned int topology, 00109 unsigned int& numSegments, 00110 std::vector<unsigned int>& segmentIndices, 00111 unsigned int& startNodeIndex, 00112 unsigned int& endNodeIndex); 00113 00114 virtual bool readTerrainData(FILE* fp); 00115 virtual bool readFeatureData(FILE* fp); 00116 00117 virtual bool readSurfaceManager(FILE *fp); 00118 virtual bool readSpecificationManager(FILE *fp); 00119 virtual bool readVertexManager(FILE *fp); 00120 virtual bool readVectorNetwork(FILE *fp); 00121 virtual bool readCoordSys(FILE *fp, DtBaseCoordinateSystem* coordSys); 00122 00123 virtual bool readFeature(FILE *fp, DtFeature *feature); 00124 00125 // While reading a GDB file, reports whether this database will contain 00126 // optional data 00127 bool fileHasOptionalData(DtTerrainFileOptionalData optData); 00128 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 DtGdbTerrainV204ReaderNodeFcn* myReaderFunctionTable; 00138 }; 00139 00140 // While reading a GDB file, reports whether this database will contain 00141 // optional data 00142 inline bool DtGdbTerrainV204Reader::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