1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-25 12:15:54 +01:00
GPXSee/src/map/IMG/vectortile.cpp

102 lines
2.0 KiB
C++
Raw Normal View History

2019-05-10 18:56:19 +02:00
#include "vectortile.h"
SubFile *VectorTile::file(SubFile::Type type)
{
switch (type) {
case SubFile::TRE:
return _tre;
case SubFile::RGN:
return _rgn;
case SubFile::LBL:
return _lbl;
case SubFile::NET:
return _net;
case SubFile::GMP:
return _gmp;
2019-05-10 18:56:19 +02:00
default:
return 0;
}
}
SubFile *VectorTile::addFile(IMG *img, SubFile::Type type)
2019-05-10 18:56:19 +02:00
{
switch (type) {
case SubFile::TRE:
_tre = new TREFile(img);
2019-05-10 18:56:19 +02:00
return _tre;
case SubFile::RGN:
_rgn = new RGNFile(img);
2019-05-10 18:56:19 +02:00
return _rgn;
case SubFile::LBL:
_lbl = new LBLFile(img);
2019-05-10 18:56:19 +02:00
return _lbl;
case SubFile::NET:
_net = new NETFile(img);
2019-05-10 18:56:19 +02:00
return _net;
case SubFile::GMP:
_gmp = new SubFile(img);
return _gmp;
2019-05-10 18:56:19 +02:00
default:
return 0;
}
}
bool VectorTile::init()
{
if (_gmp && !initGMP())
2019-05-10 18:56:19 +02:00
return false;
if (!(_tre && _tre->init() && _rgn && _rgn->init()))
2019-05-10 18:56:19 +02:00
return false;
return true;
}
bool VectorTile::initGMP()
{
SubFile::Handle hdl;
quint32 tre, rgn, lbl, net;
if (!(_gmp->seek(hdl, 0x19) && _gmp->readUInt32(hdl, tre)
&& _gmp->readUInt32(hdl, rgn) && _gmp->readUInt32(hdl, lbl)
&& _gmp->readUInt32(hdl, net)))
2019-05-10 18:56:19 +02:00
return false;
_tre = new TREFile(_gmp, tre);
_rgn = new RGNFile(_gmp, rgn);
_lbl = new LBLFile(_gmp, lbl);
_net = new NETFile(_gmp, net);
2019-05-10 18:56:19 +02:00
return true;
}
void VectorTile::objects(const RectC &rect, int bits,
QList<IMG::Poly> *polygons, QList<IMG::Poly> *lines,
QList<IMG::Point> *points) const
{
QList<SubDiv*> subdivs = _tre->subdivs(rect, bits);
for (int i = 0; i < subdivs.size(); i++) {
_rgn->objects(rect, subdivs.at(i), _lbl, _net, polygons, lines, points);
_rgn->extObjects(rect, subdivs.at(i), _lbl, polygons, lines,
points);
}
}
#ifndef QT_NO_DEBUG
QDebug operator<<(QDebug dbg, const VectorTile &tile)
{
dbg.nospace() << "VectorTile(";
if (tile._tre)
dbg << "TRE: " << *(tile._tre);
if (tile._rgn)
dbg << ", RGN: " << *(tile._rgn);
if (tile._lbl)
dbg << ", LBL: " << *(tile._lbl);
if (tile._net)
dbg << ", NET: " << *(tile._net);
dbg << ")";
return dbg.space();
}
#endif // QT_NO_DEBUG