![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /********************************************************************* 00002 ** Copyright (c) 1999 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *********************************************************************/ 00005 /********************************************************************* 00006 ** $RCSfile: oldGdbTerrainReader.h,v $ $Revision: 1.12 $ $State: Exp $ 00007 *********************************************************************/ 00008 #ifndef oldGdbTerrainReader_H_ 00009 #define oldGdbTerrainReader_H_ 00010 00011 // 00012 // \file oldGdbTerrainReader.h 00013 // \brief This file contains the DtOldGdbTerrainReader class declaration and other, related declarations. 00014 // 00015 00016 #include "gdb/gdbDefines.h" 00017 #include "gdb/gdbTerrainReader.h" 00018 #include "terrainCS/coordSystem.h" 00019 #include "gdb/terModCbInfo.h" 00020 #include "gdb/terrainDb.h" 00021 #include <vlutil/vlConfig.h> 00022 #include <vector> 00023 #include <map> 00024 00025 00026 class DtBaseCoordinateSystem; 00027 class DtSurfaceManager; 00028 class DtOldGdbTerrainReader; 00029 class DtSpecificationManager; 00030 class DtSurfaceManager; 00031 class DtFeature; 00032 class DtNodeMap; 00033 00034 // Declare a namespace to make sure there are no conflicts with the node types 00035 // declared in the DtGdbNode class and that you can use in a forward declaration. 00036 namespace DT_GDB_VOLD 00037 { 00038 typedef enum 00039 { 00040 NULL_NODE = -1, 00041 GRIDPOST_LIST = 0, // = 0 00042 VERTEX_LIST, // = 1 00043 SURFACE_LIST, // = 2 00044 GROUP, // = 3 00045 POLYGON_IMMEDIATE, // = 4 00046 POLYGON_INDIRECT, // = 5 00047 LEVEL_OF_DETAIL, // = 6 00048 GRID, // = 7 00049 DYNAMIC_COORDINATE_SYSTEM, // = 8 00050 STATIC_COORDINATE_SYSTEM, // = 9 00051 TERRAIN_FEATURE, // = 10 00052 CULTURAL_FEATURE, // = 11 00053 BUILDING, // = 12 00054 TREE, // = 13 00055 TRIANGLE_IMMEDIATE, // = 14 00056 TRIANGLE_INDIRECT, // = 15 00057 FILE_NODE, // = 16 00058 REF_GROUP, // = 17 00059 SPECIFICATION_LIST, // = 18 00060 VECTOR_NETWORK, // = 19 00061 LAST_NODE_TYPE 00062 } DtOldGdbNodeType; 00063 } 00064 00065 // Declares a function pointer typedef so that users can register reader functions to 00066 // process the appropriate nodes while reading the old gdb file. 00067 typedef DtGdbNode* (*DtOldGdbTerrainReaderNodeFcn)(DT_GDB_VOLD::DtOldGdbNodeType, 00068 FILE *, DtOldGdbTerrainReader *, DtGroup *); 00069 00070 00071 // 00072 // The DtOldGdbTerrainReader represents an entire database in GDB format. 00073 // It is an old and deprecated file format, which can only be read in, not 00074 // written out. 00075 class DT_DLL_gdb DtOldGdbTerrainReader : public DtGdbTerrainReader 00076 { 00077 public: 00078 00079 // default constructor 00080 DtOldGdbTerrainReader(); 00081 00082 // destructor 00083 virtual ~DtOldGdbTerrainReader(); 00084 00085 private: 00086 // Copy constructor and Assignment operator not implemented 00087 DtOldGdbTerrainReader(const DtOldGdbTerrainReader& original); 00088 const DtOldGdbTerrainReader& operator=(const DtOldGdbTerrainReader& original); 00089 00090 public: 00091 00092 static DtTerrainReader* create(); 00093 00094 // Returns the type of file this database was loaded from. 00095 // This class returns "oldgdb". Override this function in derived 00096 // terrain db classes. 00097 virtual const DtString dataType() const; 00098 00099 virtual bool readFromFile(const DtFilename& basename, DtTerrainDatabase* terrain); 00100 00101 protected: 00102 00103 // I/O calls. 00104 virtual bool readCoordinateSystem(FILE* fp); 00105 virtual bool readFrom(FILE* fp, DtTerrainDatabase* terrain); 00106 virtual DtGdbNode* readGdbNodePointer(FILE* fp); 00107 00108 virtual bool setReadFcn(DT_GDB_VOLD::DtOldGdbNodeType type, DtOldGdbTerrainReaderNodeFcn fun); 00109 virtual DtOldGdbTerrainReaderNodeFcn readFcn(DT_GDB_VOLD::DtOldGdbNodeType type); 00110 00111 virtual bool validityCheckVersionNumber(unsigned int versionNumberFromFile); 00112 virtual bool readTerrainData(FILE* fp); 00113 00114 virtual bool adjustNewIndirectNodes(DtTerrainDatabase* terrainDb); 00115 00116 virtual DtGdbNode* readNode(FILE* fp, DtGroup* parent, bool likelyToBeReferenced = false); 00117 00118 static DtGdbNode* readGridPostList(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00119 static DtGdbNode* readVertexList(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00120 static DtGdbNode* readGroup(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00121 static DtGdbNode* readPolyInd(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00122 static DtGdbNode* readGrid(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00123 static DtGdbNode* readFileNode(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00124 static DtGdbNode* readRefGroup(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00125 static DtGdbNode* readSpecificationList(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00126 static DtGdbNode* readVectorNetwork(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00127 00128 static DtGdbNode* readSurfaceList(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00129 static DtGdbNode *readPolyImm(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00130 static DtGdbNode* readLOD(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00131 static DtGdbNode* readDynamicCoordSys(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00132 static DtGdbNode* readStaticCoordSys(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00133 static DtGdbNode* readTerrainFeature(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00134 static DtGdbNode* readCulturalFeature(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00135 static DtGdbNode* readBuilding(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00136 static DtGdbNode* readTree(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00137 static DtGdbNode* readTriangleImm(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00138 static DtGdbNode* readTriangleInd(DT_GDB_VOLD::DtOldGdbNodeType type, FILE *fp, DtOldGdbTerrainReader *me, DtGroup *parent); 00139 00140 virtual bool readSurface(FILE *fp, DtSurface& surface); 00141 virtual bool readFeature(FILE *fp, DtFeature* feature); 00142 00143 virtual bool readCoordSys(FILE* fp, DtBaseCoordinateSystem* coordSys); 00144 00145 protected: 00146 00147 DtNodeMap* myNodeMap; 00148 00149 typedef std::map<DT_GDB_VOLD::DtOldGdbNodeType, DtOldGdbTerrainReaderNodeFcn> DtNodeReaderFunctions; 00150 typedef DtNodeReaderFunctions::iterator DtNodeReaderFcnIter; 00151 typedef DtNodeReaderFunctions::const_iterator DtNodeReaderFcnConstIter; 00152 00153 DtNodeReaderFunctions myReaderFunctions; 00154 00155 DtSurfaceManager* mySurfaceMgrPtr; 00156 00157 // These are used to read in immediate polygons and triangles and to convert 00158 // them to indirect without corrupting the indices already stored for existing 00159 // indirect polys/tris' vertices and surfaces. Both should be added to the 00160 // end of the main VertexManager and SurfaceManager and all IDs updated before 00161 // returning from loading. 00162 DtVertexManager myImmPolyVertexManager; 00163 DtSurfaceManager myImmPolySurfaceManager; 00164 00165 // Array of pointers to all indirect triangle and polygon nodes that were 00166 // created from immediate nodes on disk. Use this to go back and adjust 00167 // the appropriate IDs (surface...) after all others are loaded. 00168 std::vector<DtPolygonIndirect*> myImmPolyNodes; 00169 std::vector<DtTriangleIndirect*> myImmTriNodes; 00170 }; 00171 00172 #endif