![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: gdbTerrainWriter.h,v $ $Revision: 1.22 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00009 #ifndef gdbTerrainWriter_H_ 00010 #define gdbTerrainWriter_H_ 00011 00012 #include "gdb/gdbDefines.h" 00013 #include <stdio.h> 00014 #include <vlutil/vlFilename.h> 00015 #include "terrainCS/coordSystem.h" 00016 #include "gdb/terModCbInfo.h" 00017 #include "gdb/terrainWriter.h" 00018 00019 #include "gdb/terrainDb.h" 00020 #include "geometry/spatialSubdivision.h" 00021 00022 00023 //forward declarations 00024 class DtExtent; 00025 class DtChord; 00026 class DtChordBundle; 00027 class DtChordIntersectionRecord; 00028 class DtChordIntersectRecordList; 00029 class DtColor; 00030 class DtGdbNode; 00031 class DtAllTypesPolygon; 00032 class DtTerrainInitializer; 00033 class DtBaseCoordinateSystem; 00034 class DtNetworkNode; 00035 class DtNetworkSegment; 00036 class DtNetworkEdge; 00037 class DtNetworkSpecElement; 00038 class DtFeature; 00039 class DtGroup; 00040 class DtSurface; 00041 class DtSpatialSubdivisionTerrainIntersectorDescriptor; 00042 class DtGdbTerrainWriter; 00043 00044 typedef bool (*DtGdbTerrainWriterNodeFcn)(DtGdbNode* node, FILE *, DtGdbTerrainWriter *); 00045 00046 // class DtGdbTerrainWriter: 00047 // 00048 // DtGdbTerrainWriter represents an entire database in GDB 00049 // format. 00050 00051 class DT_DLL_gdb DtGdbTerrainWriter : public DtTerrainWriter 00052 { 00053 public: 00054 00055 // default constructor 00056 DtGdbTerrainWriter(); 00057 00058 // initialization function 00059 virtual bool writeTerrain(const DtFilename& filename, DtTerrainDatabase *terrain); 00060 00061 // destructor 00062 virtual ~DtGdbTerrainWriter(); 00063 00064 static DtTerrainWriter* create(); 00065 00066 // Returns the type of file this database was loaded from. 00067 // This class returns "gdb". Override this function in derived 00068 // terrain db classes. 00069 virtual const DtString dataType() const; 00070 00071 protected: 00072 00073 // I/O calls. 00074 virtual bool writeTo(FILE* fp, DtTerrainDatabase *terrain); 00075 00076 // copy constructor 00077 DtGdbTerrainWriter(const DtGdbTerrainWriter& orig); 00078 00079 // assignment operator 00080 DtGdbTerrainWriter& operator=(const DtGdbTerrainWriter& orig); 00081 00082 virtual bool writeVersionNumber(FILE* fp); 00083 virtual bool writeTerrainIntersectionModelType(FILE* fp); 00084 00085 virtual bool writeOptionalFlags(FILE* fp, int optionalFlags); 00086 virtual bool writeCoordinateSystem(FILE* fp); 00087 00088 virtual bool writeNode(FILE *fp, DtGdbNode *node); 00089 00090 virtual bool setWriteFcn(DtGdbNode::DtGdbNodeType type, DtGdbTerrainWriterNodeFcn fun); 00091 00092 virtual DtGdbTerrainWriterNodeFcn writeFcn(DtGdbNode::DtGdbNodeType type); 00093 virtual bool writeSpheroidInformation(FILE* fp); 00094 00095 static bool writeGroup(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00096 static bool writeLOD(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00097 static bool writeDynamicCoordSys(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00098 static bool writeStaticCoordSys(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00099 static bool writeTerrainFeature(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00100 static bool writeCulturalFeature(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00101 static bool writeBuilding(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00102 static bool writeTree(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00103 static bool writePolyInd(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00104 static bool writeTriangleInd(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00105 static bool writeFileNode(DtGdbNode *node, FILE *fp, DtGdbTerrainWriter *me); 00106 00107 virtual bool writeVertexManager(FILE *fp); 00108 virtual bool writeSurfaceManager(FILE *fp); 00109 virtual bool writeSurface(FILE *fp, DtSurface &surface); 00110 virtual bool writeCoordSys(FILE *fp, DtBaseCoordinateSystem*coordSys); 00111 00112 virtual bool writeSpecificationManager(FILE *fp); 00113 virtual bool writeVectorNetwork(FILE *fp); 00114 00115 // functions to write vector networks 00116 virtual bool writeNetworkNode(FILE *fp, DtNetworkNode *node); 00117 virtual bool writeNetworkEdge(FILE *fp, DtNetworkEdge *edge); 00118 virtual bool writeNetworkSpecElement(FILE *fp, DtNetworkSpecElement *elem); 00119 00120 virtual bool writeFeature(FILE *fp, DtFeature *feature); 00121 00122 // While writeing a GDB file, reports whether this database will contain 00123 // optional data 00124 bool fileHasOptionalData(DtTerrainFileOptionalData optData); 00125 00126 // Save the spatial subdivision info from the descriptor into the file. 00127 virtual bool writeSpatialSubdivision(FILE* fp, 00128 const DtSpatialSubdivisionTerrainIntersectorDescriptor& descriptor); 00129 00130 protected: 00131 // This is used to denote whether the specification manager is holding the old style specifications 00132 // or the new style (not yet implemented). Can be anything, but treat it as a sub-version number, 00133 static unsigned int DtTempSpecificationMgrVersionNumber; 00134 00135 DtGdbTerrainWriterNodeFcn* myWriterFunctionTable; 00136 }; 00137 00138 #endif