#ifndef IMG_TREFILE_H #define IMG_TREFILE_H #include #include #include #include "common/rectc.h" #include "common/rtree.h" #include "section.h" #include "subfile.h" namespace IMG { class SubDiv; class TREFile : public SubFile { public: TREFile(const IMGData *img) : SubFile(img), _flags(0), _extItemSize(0) {} TREFile(const QString *path) : SubFile(path), _flags(0), _extItemSize(0) {} TREFile(const SubFile *gmp, quint32 offset) : SubFile(gmp, offset), _flags(0), _extItemSize(0) {} ~TREFile(); bool init(); void clear(); const RectC &bounds() const {return _bounds;} QList subdivs(const RectC &rect, const Zoom &zoom); quint32 shift(quint8 bits) const {return (bits == _levels.last().bits) ? (_flags >> 0xb) & 7 : 0;} QVector zooms() const; private: struct MapLevel { quint8 level; quint8 bits; quint16 subdivs; }; typedef RTree SubDivTree; bool load(int idx); const SubDivTree *subdivs(const Zoom &zoom); int readExtEntry(Handle &hdl, quint32 &polygons, quint32 &lines, quint32 &points); RectC _bounds; QVector _levels; Section _subdivSec, _extSec; quint32 _flags; quint16 _extItemSize; int _firstLevel; QMap _subdivs; }; } #endif // IMG_TREFILE_H