VR-Forces 4.0.4 Class Documentation
include/gdb/gdbTerrainV203Reader.h
Go to the documentation of this file.
00001 /*********************************************************************
00002 ** Copyright (c) 1999 MaK Technologies, Inc.
00003 ** All rights reserved.
00004 *********************************************************************/
00005 /*********************************************************************
00006 ** $RCSfile: gdbTerrainV203Reader.h,v $ $Revision: 1.18 $ $State: Exp $
00007 *********************************************************************/
00008 
00009 #ifndef gdbTerrainV203Reader_H_
00010 #define gdbTerrainV203Reader_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 //forward declarations
00022 class DtExtent;
00023 class DtChord;
00024 class DtChordBundle;
00025 class DtChordIntersectionRecord;
00026 class DtChordIntersectRecordList;
00027 class DtColor;
00028 class DtMemoryManager;
00029 class DtAllTypesPolygon;
00030 class DtTerrainInitializer;
00031 class DtBaseCoordinateSystem;
00032 class DtNetworkNode;
00033 class DtNetworkSegmentHelper;
00034 class DtNetworkEdge;
00035 class DtNetworkSpecElement;
00036 class DtFeature;
00037 class DtGroup;
00038 class DtSurface;
00039 class DtGdbTerrainV203Reader;
00040 class DtListMap;
00041 
00042 // Declare a namespace to make sure there are no conflicts with the node types
00043 // declared in the DtGdbNode class and that you can use in a forward declaration.
00044 namespace DT_GDB_V203
00045 {
00046    typedef enum
00047    {
00048       NULL_NODE = -1,              
00049       GRIDPOST_LIST = 0,          // = 0
00050       VERTEX_LIST,                // = 1
00051       SURFACE_LIST,               // = 2
00052       GROUP,                      // = 3
00053       POLYGON_IMMEDIATE,          // = 4
00054       POLYGON_INDIRECT,           // = 5
00055       LEVEL_OF_DETAIL,            // = 6
00056       GRID,                       // = 7
00057       DYNAMIC_COORDINATE_SYSTEM,  // = 8
00058       STATIC_COORDINATE_SYSTEM,   // = 9
00059       TERRAIN_FEATURE,            // = 10
00060       CULTURAL_FEATURE,           // = 11
00061       BUILDING,                   // = 12
00062       TREE,                       // = 13
00063       TRIANGLE_IMMEDIATE,         // = 14
00064       TRIANGLE_INDIRECT,          // = 15
00065       FILE_NODE,                  // = 16
00066       REF_GROUP,                  // = 17
00067       SPECIFICATION_LIST,         // = 18
00068       VECTOR_NETWORK,             // = 19
00069       LAST_NODE_TYPE
00070    } DtGdbV203NodeType;
00071 }
00072 
00073 
00074 typedef DtGdbNode* (*DtGdbTerrainV203ReaderNodeFcn)(DT_GDB_V203::DtGdbV203NodeType, FILE *, DtGdbTerrainV203Reader *, DtGroup *);
00075 
00076 // class DtGdbTerrainV203Reader:
00077 //
00078 // DtGdbTerrainV203Reader represents an entire database in GDB
00079 // format. It is assumed to be a group node (is this appropriate?? -- RVK).
00080 // The database can be written out to, and read from, a file.
00081 // NOTE:  This class used to be the DtGdbTerrainReader until that was
00082 // changed to be a general gdb file loader that used the specific loaders
00083 // for each version and the functionality for loading gdb files with 
00084 // versions between OLD and 203 was moved into this class.
00085 
00086 
00087 class DT_DLL_gdb DtGdbTerrainV203Reader : public DtGdbTerrainReader
00088 {
00089 public:
00090 
00091    // default constructor
00092    DtGdbTerrainV203Reader();
00093 
00094    // destructor
00095    virtual ~DtGdbTerrainV203Reader();
00096 
00097 private:
00098    // copy constructor and assignment operator not implemented
00099    DtGdbTerrainV203Reader(const DtGdbTerrainV203Reader& orig);
00100    DtGdbTerrainV203Reader& operator=(const DtGdbTerrainV203Reader& orig);
00101 
00102 public:
00103 
00104    static DtTerrainReader* create();
00105 
00106    // Returns the type of file this database was loaded from.
00107    // This class returns "gdb".  Override this function in derived
00108    // terrain db classes.
00109    virtual const DtString dataType() const;
00110 
00111    virtual bool readFromFile(const DtFilename& basename, DtTerrainDatabase* terrain);
00112 
00113 protected:
00114 
00115    // I/O calls.
00116 
00117    virtual bool readFrom(FILE* fp, DtTerrainDatabase *terrain);
00118 
00119    virtual bool validityCheckVersionNumber(unsigned int versionNumberFromFile);
00120    virtual bool readTerrainData(FILE* fp);
00121    virtual bool readOptionalData(FILE* fp);
00122    virtual bool adjustNewIndirectNodes(DtTerrainDatabase* terrainDb);
00123 
00124    virtual DtGdbNode* readNode(FILE *fp, DtGroup *parent);
00125 
00126    virtual bool setReadFcn(DT_GDB_V203::DtGdbV203NodeType type, DtGdbTerrainV203ReaderNodeFcn fun);
00127    virtual DtGdbTerrainV203ReaderNodeFcn readFcn(DT_GDB_V203::DtGdbV203NodeType type);
00128 
00129    static DtGdbNode* readGridPostList(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00130    static DtGdbNode* readVertexList(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00131    static DtGdbNode* readGroup(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00132    static DtGdbNode* readPolyImm(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00133    static DtGdbNode* readPolyInd(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00134    static DtGdbNode* readLOD(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00135    static DtGdbNode* readGrid(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00136    static DtGdbNode* readDynamicCoordSys(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00137    static DtGdbNode* readStaticCoordSys(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00138    static DtGdbNode* readTerrainFeature(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00139    static DtGdbNode* readCulturalFeature(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00140    static DtGdbNode* readBuilding(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00141    static DtGdbNode* readTree(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00142    static DtGdbNode* readTriangleImm(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00143    static DtGdbNode* readTriangleInd(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00144    static DtGdbNode* readFileNode(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00145    static DtGdbNode* readVectorNetwork(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00146    static DtGdbNode* readSurfaceList(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00147    static DtGdbNode* readSpecificationList(DT_GDB_V203::DtGdbV203NodeType type, FILE *fp, DtGdbTerrainV203Reader *me, DtGroup *parent);
00148 
00149    virtual bool readSurface(FILE* fp, DtSurface& surface);
00150    // functions to read vector networks
00151    virtual bool readNetworkNode(FILE* fp, DtNetworkNode* node, unsigned int topology, int numEdges);
00152    
00153    virtual bool readNetworkSpecElement(FILE* fp, DtNetworkSpecElement* elem);
00154    
00155    virtual bool readNetworkSegment(FILE* fp, DtNetworkSegmentHelper* seg, unsigned int topology);
00156 
00157    virtual bool readNetworkEdge(FILE* fp, 
00158                                 DtNetworkEdge* edge, 
00159                                 unsigned int topology,
00160                                 unsigned int& numSegments,
00161                                 std::vector<unsigned int>& segmentIndices,
00162                                 unsigned int& startNodeIndex,
00163                                 unsigned int& endNodeIndex);
00164 
00165    virtual bool readCoordSys(FILE* fp, DtBaseCoordinateSystem* coordSys);
00166 
00167    virtual bool readFeature(FILE* fp, DtFeature* feature);
00168 
00169    // While reading a GDB file, reports whether this database will contain
00170    // optional data
00171    bool fileHasOptionalData(DtTerrainFileOptionalData optData);
00172 
00173 protected:
00174 
00175    // For debugging purposes - prints out the numbers of the different nodes 
00176    // and other file data (number of specifications, vertices, etc.) read in
00177    virtual void printReadNodeCount();
00178 
00179    DtListMap*                 myVertexListMap;
00180    DtListMap*                 mySurfaceListMap;
00181    DtListMap*                 mySpecificationListMap;
00182 
00183    unsigned int   myOptionalDataFlagFromFile;
00184 
00185    // These are used to read in immediate polygons and triangles and to convert 
00186    // them to indirect without corrupting the indices already stored for existing
00187    // indirect polys/tris' vertices and surfaces.  Both should be added to the 
00188    // end of the main VertexManager and SurfaceManager and all IDs updated before 
00189    // returning from loading.
00190    DtVertexManager myImmPolyVertexManager;
00191    DtSurfaceManager myImmPolySurfaceManager;
00192 
00193    // Array of pointers to all indirect triangle and polygon nodes that were 
00194    // created from immediate nodes on disk.  Use this to go back and adjust 
00195    // the appropriate IDs (surface...) after all others are loaded.
00196    DtList myImmPolyNodeList;
00197    DtList myImmTriNodeList;
00198 
00199    DtGdbTerrainV203ReaderNodeFcn *myReaderFunctionTable;
00200 };
00201 
00202 // While reading a GDB file, reports whether this database will contain
00203 // optional data
00204 inline bool DtGdbTerrainV203Reader::fileHasOptionalData(
00205    DtTerrainFileOptionalData optData)
00206 {
00207    if (myOptionalDataFlagFromFile & optData)
00208    {
00209       return true;
00210    }
00211    else
00212    {
00213       return false;
00214    }
00215 }
00216 
00217 #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)