VR-Forces 4.0.4 Class Documentation
include/gdb/oldGdbTerrainReader.h
Go to the documentation of this file.
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

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)