00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00029 #ifndef QTR_H
00030 #define QTR_H
00031
00032 typedef struct {
00033 unsigned short numNodes;
00034 unsigned long magic;
00035 unsigned long width;
00036 unsigned long height;
00037 unsigned long rasterBytes;
00038 short elev[4];
00039 } SQTRHeader;
00040
00041 #define SIZEOF_QTR_HEADER 24
00042
00043
00044 typedef struct {
00045 unsigned char type;
00046 short center;
00047 union {
00048 struct {
00049 unsigned short nwNode;
00050 unsigned short neNode;
00051 unsigned short swNode;
00052 unsigned short seNode;
00053 } branchData;
00054 struct {
00055 short nwElevation;
00056 short neElevation;
00057 short swElevation;
00058 short seElevation;
00059 } leafData;
00060 struct {
00061 unsigned long offset;
00062 unsigned long dummy;
00063 } rasterData;
00064 };
00065 } SQTRNode;
00066
00067 #define SIZEOF_QTR_NODE 11
00068
00069
00070 #define QTR_NODE_BRANCH 0x00
00071 #define QTR_NODE_LEAF 0x01
00072 #define QTR_NODE_TYPE03 0x03
00073 #define QTR_NODE_RASTER_ABS 0x03
00074 #define QTR_NODE_TYPE85 0x85
00075 #define QTR_NODE_RASTER_REL 0x85
00076
00077
00078
00079
00080 class CQTRFile {
00081 public:
00082 CQTRFile (void);
00083 CQTRFile (int index);
00084 CQTRFile (const char* qtrFilename);
00085 ~CQTRFile (void);
00086
00087 bool Load (const char* qtrFilename);
00088 bool Save (const char* qtrFilename);
00089
00090 unsigned short NumQuadtreeNodes (void);
00091 SQTRNode *GetQuadtreeNode (unsigned short i);
00092 char *GetRasterData (unsigned long offset);
00093 float ExtractRelativeData (char* data, int x, int z);
00094 float ExtractAbsoluteData (short* data, int x, int z);
00095 float Search (int level, unsigned short node, int x, int z);
00096 void Dump (const char* txtFilename);
00097
00098 public:
00099 SQTRHeader header;
00100 SQTRNode *qtreenode;
00101 char *raster;
00102 };
00103
00104 #endif // QTR_H
00105