Compare commits
37 Commits
Author | SHA1 | Date | |
---|---|---|---|
9bd79a4104 | |||
f9abf21e6d | |||
fb4af33d89 | |||
9eb95daf09 | |||
d291e55bdb | |||
b5893cf506 | |||
8507fe3b52 | |||
79edd6e09d | |||
491c6c9a98 | |||
3c36db9f5a | |||
c4a750f5d4 | |||
e4d7f45103 | |||
c85b90d56d | |||
7babf734bf | |||
25ac235414 | |||
630a5cea83 | |||
a0de7f25c3 | |||
7c6174a8ee | |||
0f512d1269 | |||
246b46ffcb | |||
cc4cbcbeda | |||
64e0b492e6 | |||
52a8b1de5b | |||
5045c03953 | |||
515f1aeb27 | |||
dbb82d6f44 | |||
307a03d46c | |||
b7c03b4b9e | |||
2d1e0934ce | |||
0ff66bc897 | |||
3b68f497fe | |||
a04293b411 | |||
5a4de1cef0 | |||
99d3d8fd0a | |||
d579ce3482 | |||
67ce176b74 | |||
1a88527c60 |
@ -1,4 +1,4 @@
|
||||
version: 7.33.{build}
|
||||
version: 7.35.{build}
|
||||
|
||||
configuration:
|
||||
- Release
|
||||
|
@ -3,7 +3,7 @@ unix:!macx {
|
||||
} else {
|
||||
TARGET = GPXSee
|
||||
}
|
||||
VERSION = 7.33
|
||||
VERSION = 7.35
|
||||
|
||||
QT += core \
|
||||
gui \
|
||||
|
@ -67,10 +67,12 @@
|
||||
<file alias="cinema-11.png">icons/POI/cinema-11.png</file>
|
||||
<file alias="clothing-store-11.png">icons/POI/clothing-store-11.png</file>
|
||||
<file alias="communications-tower-11.png">icons/POI/communications-tower-11.png</file>
|
||||
<file alias="convenience-11.png">icons/POI/convenience-11.png</file>
|
||||
<file alias="dam-11.png">icons/POI/dam-11.png</file>
|
||||
<file alias="danger-11.png">icons/POI/danger-11.png</file>
|
||||
<file alias="drinking-water-11.png">icons/POI/drinking-water-11.png</file>
|
||||
<file alias="fast-food-11.png">icons/POI/fast-food-11.png</file>
|
||||
<file alias="entrance-alt1-11.png">icons/POI/entrance-alt1-11.png</file>
|
||||
<file alias="fire-station-11.png">icons/POI/fire-station-11.png</file>
|
||||
<file alias="fitness-centre-11.png">icons/POI/fitness-centre-11.png</file>
|
||||
<file alias="fuel-11.png">icons/POI/fuel-11.png</file>
|
||||
@ -97,7 +99,6 @@
|
||||
<file alias="place-of-worship-11.png">icons/POI/place-of-worship-11.png</file>
|
||||
<file alias="police-11.png">icons/POI/police-11.png</file>
|
||||
<file alias="post-11.png">icons/POI/post-11.png</file>
|
||||
<file alias="prison-11.png">icons/POI/prison-11.png</file>
|
||||
<file alias="religious-christian-11.png">icons/POI/religious-christian-11.png</file>
|
||||
<file alias="religious-jewish-11.png">icons/POI/religious-jewish-11.png</file>
|
||||
<file alias="religious-muslim-11.png">icons/POI/religious-muslim-11.png</file>
|
||||
|
BIN
icons/POI/convenience-11.png
Normal file
After Width: | Height: | Size: 650 B |
BIN
icons/POI/entrance-alt1-11.png
Normal file
After Width: | Height: | Size: 611 B |
Before Width: | Height: | Size: 323 B |
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 571 B After Width: | Height: | Size: 571 B |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
@ -1529,7 +1529,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="62"/>
|
||||
<source>cm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>cm</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="68"/>
|
||||
|
@ -1529,7 +1529,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="62"/>
|
||||
<source>cm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>cm</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="68"/>
|
||||
|
@ -1313,7 +1313,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="442"/>
|
||||
<source>Use segments</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Usar segmentos</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/optionsdialog.cpp" line="481"/>
|
||||
@ -1529,7 +1529,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="62"/>
|
||||
<source>cm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>cm</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="68"/>
|
||||
@ -1604,22 +1604,22 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/pngexportdialog.cpp" line="41"/>
|
||||
<source>Use anti-aliasing</source>
|
||||
<translation type="unfinished">Usar anti-aliasing</translation>
|
||||
<translation>Usar anti-aliasing</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pngexportdialog.cpp" line="45"/>
|
||||
<source>Image Setup</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Configuração da Imagem</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pngexportdialog.cpp" line="48"/>
|
||||
<source>Image width:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Largura da imagem:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pngexportdialog.cpp" line="49"/>
|
||||
<source>Image height:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Altura da imagem:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pngexportdialog.cpp" line="50"/>
|
||||
|
@ -531,7 +531,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="682"/>
|
||||
<source>GPXSee is distributed under the terms of the GNU General Public License version 3. For more info about GPXSee visit the project homepage at %1.</source>
|
||||
<translation>GPXSee распространяется в соответствиями с условиями версии 3 Стандартной Общественной Лицензии GNU. Для получения дополнительной информации о GPXSee посетите страницу проекта %1.</translation>
|
||||
<translation>GPXSee распространяется в соответствии с условиями GNU General Public License 3 версии. Для получения дополнительной информации о GPXSee посетите страницу проекта %1.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/gui.cpp" line="709"/>
|
||||
@ -1530,7 +1530,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="62"/>
|
||||
<source>cm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>см</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="68"/>
|
||||
|
@ -1530,7 +1530,7 @@
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="62"/>
|
||||
<source>cm</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>см</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/GUI/pdfexportdialog.cpp" line="68"/>
|
||||
|
@ -7,7 +7,7 @@
|
||||
; The name of the installer
|
||||
Name "GPXSee"
|
||||
; Program version
|
||||
!define VERSION "7.33"
|
||||
!define VERSION "7.35"
|
||||
|
||||
; The file to write
|
||||
OutFile "GPXSee-${VERSION}.exe"
|
||||
@ -17,6 +17,9 @@ SetCompressor /SOLID lzma
|
||||
; Required execution level
|
||||
RequestExecutionLevel admin
|
||||
|
||||
; Don't let the OS scale(blur) the installer GUI
|
||||
ManifestDPIAware true
|
||||
|
||||
; The default installation directory
|
||||
InstallDir "$PROGRAMFILES\GPXSee"
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
; The name of the installer
|
||||
Name "GPXSee"
|
||||
; Program version
|
||||
!define VERSION "7.33"
|
||||
!define VERSION "7.35"
|
||||
|
||||
; The file to write
|
||||
OutFile "GPXSee-${VERSION}_x64.exe"
|
||||
@ -17,6 +17,9 @@ SetCompressor /SOLID lzma
|
||||
; Required execution level
|
||||
RequestExecutionLevel admin
|
||||
|
||||
; Don't let the OS scale(blur) the installer GUI
|
||||
ManifestDPIAware true
|
||||
|
||||
; The default installation directory
|
||||
InstallDir "$PROGRAMFILES64\GPXSee"
|
||||
|
||||
|
@ -141,7 +141,7 @@
|
||||
#define PATH_AA_SETTING "pathAntiAliasing"
|
||||
#define PATH_AA_DEFAULT true
|
||||
#define GRAPH_AA_SETTING "graphAntiAliasing"
|
||||
#define GRAPH_AA_DEFAULT false
|
||||
#define GRAPH_AA_DEFAULT true
|
||||
#define ELEVATION_FILTER_SETTING "elevationFilter"
|
||||
#define ELEVATION_FILTER_DEFAULT 3
|
||||
#define SPEED_FILTER_SETTING "speedFilter"
|
||||
|
@ -15,7 +15,8 @@ public:
|
||||
bool isNull() const
|
||||
{return _tl.isNull() && _br.isNull();}
|
||||
bool isValid() const
|
||||
{return (_tl.isValid() && _br.isValid() && _tl != _br);}
|
||||
{return (_tl.isValid() && _br.isValid()
|
||||
&& _tl.lat() > _br.lat() && _tl.lon() < _br.lon());}
|
||||
|
||||
Coordinates topLeft() const {return _tl;}
|
||||
Coordinates bottomRight() const {return _br;}
|
||||
|
@ -1,7 +1,6 @@
|
||||
#ifndef RTREE_H
|
||||
#define RTREE_H
|
||||
|
||||
#include <cstdio>
|
||||
#include <cmath>
|
||||
#include <cstdlib>
|
||||
#include <QtGlobal>
|
||||
@ -387,10 +386,10 @@ RTREE_TEMPLATE
|
||||
void RTREE_QUAL::Insert(const ELEMTYPE a_min[NUMDIMS],
|
||||
const ELEMTYPE a_max[NUMDIMS], const DATATYPE& a_dataId)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
#ifndef QT_NO_DEBUG
|
||||
for (int index=0; index<NUMDIMS; ++index)
|
||||
Q_ASSERT(a_min[index] <= a_max[index]);
|
||||
#endif //_DEBUG
|
||||
#endif // QT_NO_DEBUG
|
||||
|
||||
Rect rect;
|
||||
|
||||
@ -407,10 +406,10 @@ RTREE_TEMPLATE
|
||||
void RTREE_QUAL::Remove(const ELEMTYPE a_min[NUMDIMS],
|
||||
const ELEMTYPE a_max[NUMDIMS], const DATATYPE& a_dataId)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
#ifndef QT_NO_DEBUG
|
||||
for (int index=0; index<NUMDIMS; ++index)
|
||||
Q_ASSERT(a_min[index] <= a_max[index]);
|
||||
#endif //_DEBUG
|
||||
#endif // QT_NO_DEBUG
|
||||
|
||||
Rect rect;
|
||||
|
||||
@ -427,10 +426,10 @@ RTREE_TEMPLATE
|
||||
int RTREE_QUAL::Search(const ELEMTYPE a_min[NUMDIMS], const ELEMTYPE a_max[NUMDIMS],
|
||||
bool a_resultCallback(DATATYPE a_data, void* a_context), void* a_context) const
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
#ifndef QT_NO_DEBUG
|
||||
for (int index=0; index<NUMDIMS; ++index)
|
||||
Q_ASSERT(a_min[index] <= a_max[index]);
|
||||
#endif //_DEBUG
|
||||
#endif // QT_NO_DEBUG
|
||||
|
||||
Rect rect;
|
||||
|
||||
@ -636,10 +635,10 @@ bool RTREE_QUAL::InsertRect(Rect* a_rect, const DATATYPE& a_id, Node** a_root,
|
||||
{
|
||||
Q_ASSERT(a_rect && a_root);
|
||||
Q_ASSERT(a_level >= 0 && a_level <= (*a_root)->m_level);
|
||||
#ifdef _DEBUG
|
||||
#ifndef QT_NO_DEBUG
|
||||
for (int index=0; index < NUMDIMS; ++index)
|
||||
Q_ASSERT(a_rect->m_min[index] <= a_rect->m_max[index]);
|
||||
#endif //_DEBUG
|
||||
#endif // QT_NO_DEBUG
|
||||
|
||||
Node* newRoot;
|
||||
Node* newNode;
|
||||
|
@ -12,6 +12,22 @@ bool BitStream1::flush()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool BitStream1::readUInt24(quint32 &val)
|
||||
{
|
||||
quint8 b;
|
||||
|
||||
val = 0;
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (!read(8, b))
|
||||
return false;
|
||||
val |= (b << (i * 8));
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool BitStream4F::flush()
|
||||
{
|
||||
if (_length && !_file.seek(_hdl, _file.pos(_hdl) + _length))
|
||||
|
@ -12,6 +12,8 @@ public:
|
||||
bool flush();
|
||||
quint64 bitsAvailable() const {return (quint64)_length * 8 + _remaining;}
|
||||
|
||||
bool readUInt24(quint32 &val);
|
||||
|
||||
private:
|
||||
const SubFile &_file;
|
||||
SubFile::Handle &_hdl;
|
||||
|
@ -161,7 +161,7 @@ Label LBLFile::label8b(Handle &hdl, quint32 offset, bool capitalize) const
|
||||
} else if (c <= 0x07) {
|
||||
shieldType = static_cast<Label::Shield::Type>(c);
|
||||
bap = &shieldLabel;
|
||||
} else if (bap == &shieldLabel && QChar(c).isSpace()) {
|
||||
} else if (bap == &shieldLabel && c == 0x20) {
|
||||
bap = &label;
|
||||
} else
|
||||
bap->append(c);
|
||||
|
@ -38,7 +38,6 @@ public:
|
||||
Coordinates coordinates;
|
||||
Label label;
|
||||
quint32 type;
|
||||
bool poi;
|
||||
quint64 id;
|
||||
|
||||
bool operator<(const Point &other) const
|
||||
@ -95,8 +94,7 @@ private:
|
||||
#ifndef QT_NO_DEBUG
|
||||
inline QDebug operator<<(QDebug dbg, const MapData::Point &point)
|
||||
{
|
||||
dbg.nospace() << "Point(" << hex << point.type << ", " << point.label
|
||||
<< ", " << point.poi << ")";
|
||||
dbg.nospace() << "Point(" << hex << point.type << ", " << point.label << ")";
|
||||
return dbg.space();
|
||||
}
|
||||
|
||||
|
@ -352,21 +352,19 @@ bool NETFile::linkLabel(Handle &hdl, quint32 offset, quint32 size, LBLFile *lbl,
|
||||
return false;
|
||||
BitStream1 bs(*this, hdl, size);
|
||||
|
||||
quint32 flags, b, labelPtr = 0;
|
||||
quint32 flags, labelPtr;
|
||||
if (!bs.read(8, flags))
|
||||
return false;
|
||||
for (int i = 0; i < 3; i++) {
|
||||
if (!bs.read(8, b))
|
||||
return false;
|
||||
labelPtr |= (b << (i * 8));
|
||||
}
|
||||
if (!(flags & 1))
|
||||
return true;
|
||||
|
||||
if (lbl && (labelPtr & 0x3FFFFF)) {
|
||||
if (!bs.readUInt24(labelPtr))
|
||||
return false;
|
||||
if (labelPtr & 0x3FFFFF) {
|
||||
if (labelPtr & 0x400000) {
|
||||
quint32 lblOff;
|
||||
if (lblOffset(hdl, labelPtr & 0x3FFFFF, lblOff) && lblOff)
|
||||
label = lbl->label(lblHdl, lblOff);
|
||||
|
||||
} else
|
||||
label = lbl->label(lblHdl, labelPtr & 0x3FFFFF);
|
||||
}
|
||||
@ -401,7 +399,7 @@ bool NETFile::init(Handle &hdl)
|
||||
|
||||
bool NETFile::link(const SubDiv *subdiv, quint32 shift, Handle &hdl,
|
||||
NODFile *nod, Handle &nodHdl, LBLFile *lbl, Handle &lblHdl,
|
||||
const NODFile::BlockInfo blockInfo, quint8 linkId, quint8 lineId,
|
||||
const NODFile::BlockInfo &blockInfo, quint8 linkId, quint8 lineId,
|
||||
const HuffmanTable &table, QList<IMG::Poly> *lines)
|
||||
{
|
||||
if (!_init && !init(hdl))
|
||||
@ -489,8 +487,9 @@ bool NETFile::link(const SubDiv *subdiv, quint32 shift, Handle &hdl,
|
||||
return false;
|
||||
}
|
||||
|
||||
linkLabel(hdl, linkOffset, _linksSize - (linkOffset - _linksOffset), lbl,
|
||||
lblHdl, poly.label);
|
||||
if (lbl)
|
||||
linkLabel(hdl, linkOffset, _linksSize - (linkOffset - _linksOffset),
|
||||
lbl, lblHdl, poly.label);
|
||||
|
||||
lines->append(poly);
|
||||
|
||||
|
@ -25,7 +25,7 @@ public:
|
||||
bool lblOffset(Handle &hdl, quint32 netOffset, quint32 &lblOffset);
|
||||
bool link(const SubDiv *subdiv, quint32 shift, Handle &hdl, NODFile *nod,
|
||||
Handle &nodHdl, LBLFile *lbl, Handle &lblHdl,
|
||||
const NODFile::BlockInfo blockInfo, quint8 linkId, quint8 lineId,
|
||||
const NODFile::BlockInfo &blockInfo, quint8 linkId, quint8 lineId,
|
||||
const HuffmanTable &table, QList<IMG::Poly> *lines);
|
||||
|
||||
private:
|
||||
|
@ -28,7 +28,7 @@ static int minPOIZoom(Style::POIClass cl)
|
||||
case Style::Food:
|
||||
case Style::Shopping:
|
||||
case Style::Services:
|
||||
return 27;
|
||||
return 26;
|
||||
case Style::Accommodation:
|
||||
case Style::Recreation:
|
||||
return 25;
|
||||
@ -237,10 +237,28 @@ void RasterTile::drawTextItems(QPainter *painter,
|
||||
textItems.at(i)->paint(painter);
|
||||
}
|
||||
|
||||
static void removeDuplicitLabel(QList<TextItem *> &labels, const QString &text,
|
||||
const QRectF &tileRect)
|
||||
{
|
||||
for (int i = 0; i < labels.size(); i++) {
|
||||
TextItem *item = labels.at(i);
|
||||
if (tileRect.contains(item->boundingRect()) && *(item->text()) == text) {
|
||||
labels.removeAt(i);
|
||||
delete item;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RasterTile::processPolygons(QList<TextItem*> &textItems)
|
||||
{
|
||||
QRectF tileRect(_xy, _img.size());
|
||||
QSet<QString> set;
|
||||
QList<TextItem *> labels;
|
||||
|
||||
for (int i = 0; i < _polygons.size(); i++) {
|
||||
MapData::Poly &poly = _polygons[i];
|
||||
bool exists = set.contains(poly.label.text());
|
||||
|
||||
if (poly.label.text().isEmpty())
|
||||
continue;
|
||||
@ -253,12 +271,20 @@ void RasterTile::processPolygons(QList<TextItem*> &textItems)
|
||||
centroid(poly.points).toPoint(), &poly.label.text(),
|
||||
poiFont(), 0, &style.brush().color());
|
||||
if (item->isValid() && !item->collides(textItems)
|
||||
&& rectNearPolygon(poly.points, item->boundingRect()))
|
||||
textItems.append(item);
|
||||
&& !item->collides(labels)
|
||||
&& !(exists && tileRect.contains(item->boundingRect()))
|
||||
&& rectNearPolygon(poly.points, item->boundingRect())) {
|
||||
if (exists)
|
||||
removeDuplicitLabel(labels, poly.label.text(), tileRect);
|
||||
else
|
||||
set.insert(poly.label.text());
|
||||
labels.append(item);
|
||||
} else
|
||||
delete item;
|
||||
}
|
||||
}
|
||||
|
||||
textItems.append(labels);
|
||||
}
|
||||
|
||||
void RasterTile::processLines(QList<TextItem*> &textItems)
|
||||
@ -372,14 +398,15 @@ void RasterTile::processPoints(QList<TextItem*> &textItems)
|
||||
for (int i = 0; i < _points.size(); i++) {
|
||||
MapData::Point &point = _points[i];
|
||||
const Style::Point &style = _style->point(point.type);
|
||||
bool poi = Style::isPOI(point.type);
|
||||
|
||||
if (point.poi && _zoom < minPOIZoom(Style::poiClass(point.type)))
|
||||
if (poi && _zoom < minPOIZoom(Style::poiClass(point.type)))
|
||||
continue;
|
||||
|
||||
const QString *label = point.label.text().isEmpty()
|
||||
? 0 : &(point.label.text());
|
||||
const QImage *img = style.img().isNull() ? 0 : &style.img();
|
||||
const QFont *fnt = point.poi
|
||||
const QFont *fnt = poi
|
||||
? poiFont(style.textFontSize()) : font(style.textFontSize());
|
||||
const QColor *color = style.textColor().isValid()
|
||||
? &style.textColor() : 0;
|
||||
|
@ -362,10 +362,9 @@ bool RGNFile::pointObjects(Handle &hdl, const SubDiv *subdiv,
|
||||
point.type = (quint16)type<<8 | subtype;
|
||||
point.coordinates = Coordinates(toWGS24(pos.x()), toWGS24(pos.y()));
|
||||
point.id = pointId(pos, point.type, labelPtr & 0x3FFFFF);
|
||||
point.poi = labelPtr & 0x400000;
|
||||
if (lbl && (labelPtr & 0x3FFFFF))
|
||||
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi,
|
||||
!(point.type == 0x1400 || point.type == 0x1500
|
||||
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF,
|
||||
labelPtr & 0x400000, !(point.type == 0x1400 || point.type == 0x1500
|
||||
|| point.type == 0x1e00));
|
||||
|
||||
points->append(point);
|
||||
@ -414,9 +413,8 @@ bool RGNFile::extPointObjects(Handle &hdl, const SubDiv *subdiv, LBLFile *lbl,
|
||||
|
||||
point.coordinates = Coordinates(toWGS24(pos.x()), toWGS24(pos.y()));
|
||||
point.id = pointId(pos, point.type, labelPtr & 0x3FFFFF);
|
||||
point.poi = labelPtr & 0x400000;
|
||||
if (lbl && (labelPtr & 0x3FFFFF))
|
||||
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, point.poi);
|
||||
point.label = lbl->label(lblHdl, labelPtr & 0x3FFFFF, false);
|
||||
|
||||
points->append(point);
|
||||
}
|
||||
|
@ -39,9 +39,7 @@ void Style::defaultPolygonStyle()
|
||||
_polygons[TYPE(0x1f)] = Polygon(QBrush(QColor("#9ac269"),
|
||||
Qt::BDiagPattern));
|
||||
_polygons[TYPE(0x28)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x29)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x32)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x3b)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x3c)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x3d)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x3e)] = Polygon(QBrush("#9fc4e1"));
|
||||
@ -51,13 +49,12 @@ void Style::defaultPolygonStyle()
|
||||
_polygons[TYPE(0x42)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x43)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x44)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x45)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x46)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x47)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x48)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x49)] = Polygon(QBrush("#9fc4e1"));
|
||||
_polygons[TYPE(0x4b)] = Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5"));
|
||||
_polygons[TYPE(0x4a)] = Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5"));
|
||||
_polygons[TYPE(0x4b)] = Polygon(QBrush("#f1f0e5"), QPen("#f1f0e5"));
|
||||
_polygons[TYPE(0x4c)] = Polygon(QBrush("#9fc4e1", Qt::Dense6Pattern));
|
||||
_polygons[TYPE(0x4d)] = Polygon(QBrush("#ddf1fd"));
|
||||
_polygons[TYPE(0x4e)] = Polygon(QBrush("#f8f8f8"));
|
||||
@ -66,18 +63,73 @@ void Style::defaultPolygonStyle()
|
||||
_polygons[TYPE(0x51)] = Polygon(QBrush("#9fc4e1", Qt::Dense4Pattern));
|
||||
_polygons[TYPE(0x52)] = Polygon(QBrush("#cadfaf"));
|
||||
|
||||
_drawOrder << TYPE(0x4b) << TYPE(0x4a) << TYPE(0x01) << TYPE(0x02)
|
||||
<< TYPE(0x03) << TYPE(0x17) << TYPE(0x18) << TYPE(0x1a) << TYPE(0x28)
|
||||
<< TYPE(0x29) << TYPE(0x32) << TYPE(0x3b) << TYPE(0x3c) << TYPE(0x3d)
|
||||
<< TYPE(0x3e) << TYPE(0x3f) << TYPE(0x40) << TYPE(0x41) << TYPE(0x42)
|
||||
<< TYPE(0x43) << TYPE(0x44) << TYPE(0x45) << TYPE(0x46) << TYPE(0x47)
|
||||
<< TYPE(0x48) << TYPE(0x49) << TYPE(0x4c) << TYPE(0x4d) << TYPE(0x4e)
|
||||
<< TYPE(0x4f) << TYPE(0x50) << TYPE(0x51) << TYPE(0x52) << TYPE(0x14)
|
||||
<< TYPE(0x15) << TYPE(0x16) << TYPE(0x1e) << TYPE(0x1f) << TYPE(0x04)
|
||||
<< TYPE(0x05) << TYPE(0x06) << TYPE(0x07) << TYPE(0x08) << TYPE(0x09)
|
||||
<< TYPE(0x0a) << TYPE(0x0b) << TYPE(0x0c) << TYPE(0x0d) << TYPE(0x0e)
|
||||
<< TYPE(0x0f) << TYPE(0x10) << TYPE(0x11) << TYPE(0x12) << TYPE(0x19)
|
||||
<< TYPE(0x13);
|
||||
// NT types
|
||||
_polygons[0x10800] = _polygons[TYPE(0x01)];
|
||||
_polygons[0x10801] = _polygons[TYPE(0x02)];
|
||||
_polygons[0x10802] = _polygons[TYPE(0x03)];
|
||||
_polygons[0x10901] = _polygons[TYPE(0x04)];
|
||||
_polygons[0x10902] = _polygons[TYPE(0x05)];
|
||||
_polygons[0x10903] = _polygons[TYPE(0x06)];
|
||||
_polygons[0x10904] = _polygons[TYPE(0x07)];
|
||||
_polygons[0x10905] = _polygons[TYPE(0x08)];
|
||||
_polygons[0x10906] = _polygons[TYPE(0x09)];
|
||||
_polygons[0x10907] = _polygons[TYPE(0x0a)];
|
||||
_polygons[0x10908] = _polygons[TYPE(0x0b)];
|
||||
_polygons[0x10909] = _polygons[TYPE(0x0c)];
|
||||
_polygons[0x1090a] = _polygons[TYPE(0x0d)];
|
||||
_polygons[0x1090b] = _polygons[TYPE(0x0e)];
|
||||
_polygons[0x10900] = _polygons[TYPE(0x13)];
|
||||
_polygons[0x10a01] = _polygons[TYPE(0x14)];
|
||||
_polygons[0x10a02] = _polygons[TYPE(0x15)];
|
||||
_polygons[0x10a03] = _polygons[TYPE(0x16)];
|
||||
_polygons[0x10a04] = _polygons[TYPE(0x17)];
|
||||
_polygons[0x1090c] = _polygons[TYPE(0x18)];
|
||||
_polygons[0x1090d] = _polygons[TYPE(0x19)];
|
||||
_polygons[0x1090e] = _polygons[TYPE(0x1a)];
|
||||
_polygons[0x10a05] = _polygons[TYPE(0x1e)];
|
||||
_polygons[0x10a06] = _polygons[TYPE(0x1f)];
|
||||
_polygons[0x10b01] = _polygons[TYPE(0x28)];
|
||||
_polygons[0x10b02] = _polygons[TYPE(0x32)];
|
||||
_polygons[0x10b03] = _polygons[TYPE(0x3c)];
|
||||
_polygons[0x10b04] = _polygons[TYPE(0x3d)];
|
||||
_polygons[0x10b05] = _polygons[TYPE(0x3e)];
|
||||
_polygons[0x10b06] = _polygons[TYPE(0x3f)];
|
||||
_polygons[0x10b07] = _polygons[TYPE(0x40)];
|
||||
_polygons[0x10b08] = _polygons[TYPE(0x41)];
|
||||
_polygons[0x10b09] = _polygons[TYPE(0x42)];
|
||||
_polygons[0x10b0a] = _polygons[TYPE(0x43)];
|
||||
_polygons[0x10b0b] = _polygons[TYPE(0x44)];
|
||||
_polygons[0x10b0c] = _polygons[TYPE(0x46)];
|
||||
_polygons[0x10b0d] = _polygons[TYPE(0x47)];
|
||||
_polygons[0x10b0e] = _polygons[TYPE(0x48)];
|
||||
_polygons[0x10b0f] = _polygons[TYPE(0x49)];
|
||||
_polygons[0x10d01] = _polygons[TYPE(0x4b)];
|
||||
_polygons[0x10b10] = _polygons[TYPE(0x4c)];
|
||||
_polygons[0x10c00] = _polygons[TYPE(0x4d)];
|
||||
_polygons[0x10c01] = _polygons[TYPE(0x4e)];
|
||||
_polygons[0x10c02] = _polygons[TYPE(0x4f)];
|
||||
_polygons[0x10c03] = _polygons[TYPE(0x50)];
|
||||
_polygons[0x10c04] = _polygons[TYPE(0x51)];
|
||||
_polygons[0x10c05] = _polygons[TYPE(0x52)];
|
||||
|
||||
// Draw order
|
||||
_drawOrder << TYPE(0x4b) << 0x10d01 << TYPE(0x4a) << TYPE(0x01) << 0x10800
|
||||
<< TYPE(0x02) << 0x10801 << TYPE(0x03) << 0x10802 << TYPE(0x17) << 0x10a04
|
||||
<< TYPE(0x18) << 0x1090c << TYPE(0x1a) << 0x1090e << TYPE(0x28) << 0x10b01
|
||||
<< TYPE(0x32) << 0x10b02 << TYPE(0x3c) << 0x10b03 << TYPE(0x3d) << 0x10b04
|
||||
<< TYPE(0x3e) << 0x10b05 << TYPE(0x3f) << 0x10b06 << TYPE(0x40) << 0x10b07
|
||||
<< TYPE(0x41) << 0x10b08 << TYPE(0x42) << 0x10b09 << TYPE(0x43) << 0x10b0a
|
||||
<< TYPE(0x44) << 0x10b0b << TYPE(0x46) << 0x10b0c << TYPE(0x47) << 0x10b0d
|
||||
<< TYPE(0x48) << 0x10b0e << TYPE(0x49) << 0x10b0f << TYPE(0x4c) << 0x10b10
|
||||
<< TYPE(0x4d) << 0x10c00 << TYPE(0x4e) << 0x10c01 << TYPE(0x4f) << 0x10c02
|
||||
<< TYPE(0x50) << 0x10c03 << TYPE(0x51) << 0x10c04 << TYPE(0x52) << 0x10c05
|
||||
<< TYPE(0x14) << 0x10a01 << TYPE(0x15) << 0x10a02 << TYPE(0x16) << 0x10a03
|
||||
<< TYPE(0x1e) << 0x10a05 << TYPE(0x1f) << 0x10a06 << TYPE(0x04) << 0x10901
|
||||
<< TYPE(0x05) << 0x10902 << TYPE(0x06) << 0x10903 << TYPE(0x07) << 0x10904
|
||||
<< TYPE(0x08) << 0x10905 << TYPE(0x09) << 0x10906 << TYPE(0x0a) << 0x10907
|
||||
<< TYPE(0x0b) << 0x10908 << TYPE(0x0c) << 0x10909 << TYPE(0x0d) << 0x1090a
|
||||
<< TYPE(0x0e) << 0x1090b << TYPE(0x0f) << TYPE(0x10) << TYPE(0x11)
|
||||
<< TYPE(0x12) << TYPE(0x19) << 0x1090d << TYPE(0x13) << 0x10900;
|
||||
}
|
||||
|
||||
static QImage railroad()
|
||||
@ -148,6 +200,22 @@ void Style::defaultLineStyle()
|
||||
//_lines[TYPE(0x28)] = Line(QPen(QColor("#5a5a5a"), 1, Qt::SolidLine));
|
||||
_lines[TYPE(0x29)] = Line(QPen(QColor("#5a5a5a"), 1, Qt::SolidLine));
|
||||
_lines[TYPE(0x29)].setTextFontSize(None);
|
||||
|
||||
// NT types
|
||||
_lines[0x10c00] = _lines[TYPE(0x14)];
|
||||
_lines[0x10a00] = _lines[TYPE(0x18)];
|
||||
_lines[0x10b04] = _lines[TYPE(0x1e)];
|
||||
_lines[0x10a01] = _lines[TYPE(0x1f)];
|
||||
_lines[0x10900] = _lines[TYPE(0x20)];
|
||||
_lines[0x10901] = _lines[TYPE(0x21)];
|
||||
_lines[0x10902] = _lines[TYPE(0x22)];
|
||||
_lines[0x10903] = _lines[TYPE(0x23)];
|
||||
_lines[0x10904] = _lines[TYPE(0x24)];
|
||||
_lines[0x10905] = _lines[TYPE(0x25)];
|
||||
_lines[0x10a02] = _lines[TYPE(0x26)];
|
||||
_lines[0x10c02] = _lines[TYPE(0x27)];
|
||||
//_lines[0x10c03] = _lines[TYPE(0x28)];
|
||||
_lines[0x10c04] = _lines[TYPE(0x29)];
|
||||
}
|
||||
|
||||
void Style::defaultPointStyle()
|
||||
@ -221,10 +289,13 @@ void Style::defaultPointStyle()
|
||||
_points[0x2d0b] = Point(QImage(":/airfield-11.png"));
|
||||
|
||||
_points[0x2e02] = Point(QImage(":/grocery-11.png"));
|
||||
_points[0x2e03] = Point(QImage(":/shop-11.png"));
|
||||
_points[0x2e05] = Point(QImage(":/pharmacy-11.png"));
|
||||
_points[0x2e06] = Point(QImage(":/convenience-11.png"));
|
||||
_points[0x2e07] = Point(QImage(":/clothing-store-11.png"));
|
||||
_points[0x2e08] = Point(QImage(":/garden-centre-11.png"));
|
||||
_points[0x2e09] = Point(QImage(":/furniture-11.png"));
|
||||
_points[0x2e0a] = Point(QImage(":/shop-11.png"));
|
||||
_points[0x2e0c] = Point(QImage(":/shop-11.png"));
|
||||
|
||||
_points[0x2f01] = Point(QImage(":/fuel-11.png"));
|
||||
@ -248,7 +319,8 @@ void Style::defaultPointStyle()
|
||||
_points[0x3001] = Point(QImage(":/police-11.png"));
|
||||
_points[0x3002] = Point(QImage(":/hospital-11.png"));
|
||||
_points[0x3003] = Point(QImage(":/town-hall-11.png"));
|
||||
_points[0x3007] = Point(QImage(":/prison-11.png"));
|
||||
_points[0x3006] = Point(QImage(":/entrance-alt1-11.png"));
|
||||
_points[0x3007] = Point(QImage(":/town-hall-11.png"));
|
||||
_points[0x3008] = Point(QImage(":/fire-station-11.png"));
|
||||
|
||||
_points[0x4000] = Point(QImage(":/golf-11.png"));
|
||||
@ -296,6 +368,87 @@ void Style::defaultPointStyle()
|
||||
_points[0x6513] = Point(QImage(":/wetland-11.png"));
|
||||
_points[0x6604] = Point(QImage(":/beach-11.png"));
|
||||
_points[0x6616] = Point(QImage(":/mountain-11.png"));
|
||||
|
||||
|
||||
// NT types
|
||||
_points[0x11401] = _points[TYPE(0x01)];
|
||||
_points[0x11402] = _points[TYPE(0x02)];
|
||||
_points[0x11403] = _points[TYPE(0x03)];
|
||||
_points[0x10b00] = _points[0x2a00];
|
||||
_points[0x10b01] = _points[0x2a01];
|
||||
_points[0x10b02] = _points[0x2a02];
|
||||
_points[0x10b03] = _points[0x2a03];
|
||||
_points[0x10b04] = _points[0x2a04];
|
||||
_points[0x10b05] = _points[0x2a05];
|
||||
_points[0x10b06] = _points[0x2a06];
|
||||
_points[0x10b07] = _points[0x2a07];
|
||||
_points[0x10b08] = _points[0x2a08];
|
||||
_points[0x10b09] = _points[0x2a09];
|
||||
_points[0x10b0a] = _points[0x2a0a];
|
||||
_points[0x10b0b] = _points[0x2a0b];
|
||||
_points[0x10b0c] = _points[0x2a0c];
|
||||
_points[0x10b0d] = _points[0x2a0d];
|
||||
_points[0x10b0e] = _points[0x2a0e];
|
||||
_points[0x10b0f] = _points[0x2a0f];
|
||||
_points[0x10b10] = _points[0x2a10];
|
||||
_points[0x10b11] = _points[0x2a11];
|
||||
_points[0x10c01] = _points[0x2b01];
|
||||
_points[0x10c02] = _points[0x2b02];
|
||||
_points[0x10c03] = _points[0x2b03];
|
||||
_points[0x10c04] = _points[0x2b04];
|
||||
_points[0x10d01] = _points[0x2c01];
|
||||
_points[0x10d02] = _points[0x2c02];
|
||||
_points[0x10d03] = _points[0x2c03];
|
||||
_points[0x10d04] = _points[0x2c04];
|
||||
_points[0x10d05] = _points[0x2c05];
|
||||
_points[0x10d06] = _points[0x2c06];
|
||||
_points[0x10d07] = _points[0x2c07];
|
||||
_points[0x10d08] = _points[0x2c08];
|
||||
_points[0x10d0a] = _points[0x2c0a];
|
||||
_points[0x10d0b] = _points[0x2c0b];
|
||||
_points[0x10d0d] = _points[0x2c0d];
|
||||
_points[0x10d0e] = _points[0x2c0e];
|
||||
_points[0x10d10] = _points[0x2c10];
|
||||
_points[0x10e01] = _points[0x2d01];
|
||||
_points[0x10e02] = _points[0x2d02];
|
||||
_points[0x10e03] = _points[0x2d03];
|
||||
_points[0x10e04] = _points[0x2d04];
|
||||
_points[0x10e05] = _points[0x2d05];
|
||||
_points[0x10e06] = _points[0x2d06];
|
||||
_points[0x10e07] = _points[0x2d07];
|
||||
_points[0x10e08] = _points[0x2d08];
|
||||
_points[0x10e09] = _points[0x2d09];
|
||||
_points[0x10e0a] = _points[0x2d0a];
|
||||
_points[0x10e0b] = _points[0x2d0b];
|
||||
_points[0x10f02] = _points[0x2e02];
|
||||
_points[0x10f03] = _points[0x2e03];
|
||||
_points[0x10f05] = _points[0x2e05];
|
||||
_points[0x10f06] = _points[0x2e06];
|
||||
_points[0x10f07] = _points[0x2e07];
|
||||
_points[0x10f08] = _points[0x2e08];
|
||||
_points[0x10f09] = _points[0x2e09];
|
||||
_points[0x10f0a] = _points[0x2e0a];
|
||||
_points[0x11001] = _points[0x2f01];
|
||||
_points[0x11002] = _points[0x2f02];
|
||||
_points[0x11003] = _points[0x2f03];
|
||||
_points[0x11004] = _points[0x2f04];
|
||||
_points[0x11005] = _points[0x2f05];
|
||||
_points[0x11006] = _points[0x2f06];
|
||||
_points[0x11007] = _points[0x2f07];
|
||||
_points[0x11008] = _points[0x2f08];
|
||||
_points[0x11009] = _points[0x2f09];
|
||||
_points[0x1100b] = _points[0x2f0b];
|
||||
_points[0x1100c] = _points[0x2f0c];
|
||||
_points[0x11010] = _points[0x2f10];
|
||||
_points[0x11012] = _points[0x2f12];
|
||||
_points[0x11013] = _points[0x2f13];
|
||||
_points[0x11017] = _points[0x2f17];
|
||||
_points[0x11101] = _points[0x3001];
|
||||
_points[0x11102] = _points[0x3002];
|
||||
_points[0x11103] = _points[0x3003];
|
||||
_points[0x11106] = _points[0x3006];
|
||||
_points[0x11107] = _points[0x3007];
|
||||
_points[0x11108] = _points[0x3008];
|
||||
}
|
||||
|
||||
static bool readBitmap(SubFile *file, SubFile::Handle &hdl, QImage &img,
|
||||
@ -985,19 +1138,26 @@ const Style::Point &Style::point(quint32 type) const
|
||||
|
||||
Style::POIClass Style::poiClass(quint32 type)
|
||||
{
|
||||
if ((type >= 0x2a00 && type < 0x2b00) || type == 0x2c0a || type == 0x2d02)
|
||||
if ((type >= 0x2a00 && type < 0x2b00) || type == 0x2c0a || type == 0x2d02
|
||||
|| (type & 0xffff00) == TYPE(0x10b))
|
||||
return Food;
|
||||
else if (type >= 0x2b00 && type < 0x2c00)
|
||||
else if ((type >= 0x2b00 && type < 0x2c00)
|
||||
|| (type & 0xffff00) == TYPE(0x10c))
|
||||
return Accommodation;
|
||||
else if (type >= 0x2c00 && type < 0x2e00)
|
||||
else if ((type >= 0x2c00 && type < 0x2e00)
|
||||
|| (type & 0xffff00) == TYPE(0x10d) || (type & 0xffff00) == TYPE(0x10e))
|
||||
return Recreation;
|
||||
else if (type >= 0x2e00 && type < 0x2f00)
|
||||
else if ((type >= 0x2e00 && type < 0x2f00)
|
||||
|| (type & 0xffff00) == TYPE(0x10f))
|
||||
return Shopping;
|
||||
else if ((type >= 0x2f00 && type < 0x2f0f) || type == 0x2f17)
|
||||
else if ((type >= 0x2f00 && type < 0x2f0f) || type == 0x2f17
|
||||
|| (type >= 0x11001 && type < 0x1100f))
|
||||
return Transport;
|
||||
else if (type >= 0x2f0f && type < 0x3000)
|
||||
else if ((type >= 0x2f0f && type < 0x3000)
|
||||
|| (type >= 0x1100f && type < 0x11100))
|
||||
return Services;
|
||||
else if (type >= 0x3000 && type < 0x3100)
|
||||
else if ((type >= 0x3000 && type < 0x3100)
|
||||
|| (type & 0xffff00) == TYPE(0x111))
|
||||
return Community;
|
||||
else if (type >= 0x4000 && type < 0x6000)
|
||||
return Elementary;
|
||||
|
@ -108,15 +108,19 @@ public:
|
||||
const Point &point(quint32 type) const;
|
||||
const QList<quint32> &drawOrder() const {return _drawOrder;}
|
||||
|
||||
static bool isPOI(quint32 type)
|
||||
{return !((type >= TYPE(0x01) && type <= TYPE(0x1f))
|
||||
|| (type >= 0x11400 && type < 0x11500));}
|
||||
static bool isContourLine(quint32 type)
|
||||
{return ((type >= TYPE(0x20) && type <= TYPE(0x25))
|
||||
|| (type & 0xffff00) == TYPE(0x109));}
|
||||
static bool isWaterArea(quint32 type)
|
||||
{return (type >= TYPE(0x3c) && type <= TYPE(0x44));}
|
||||
{return ((type >= TYPE(0x3c) && type <= TYPE(0x44))
|
||||
|| (type & 0xffff00) == TYPE(0x10b));}
|
||||
static bool isMilitaryArea(quint32 type)
|
||||
{return (type == TYPE(0x04));}
|
||||
{return (type == TYPE(0x04) || type == 0x10901);}
|
||||
static bool isNatureReserve(quint32 type)
|
||||
{return (type == TYPE(0x16));}
|
||||
{return (type == TYPE(0x16) || type == 0x10a03);}
|
||||
static bool isSpot(quint32 type)
|
||||
{return (type == TYPE(0x62) || type == TYPE(0x63));}
|
||||
static bool isSummit(quint32 type)
|
||||
|
@ -10,13 +10,18 @@ class QPainter;
|
||||
class TextItem
|
||||
{
|
||||
public:
|
||||
TextItem(const QString *text) : _text(text) {}
|
||||
virtual ~TextItem() {}
|
||||
|
||||
virtual QPainterPath shape() const = 0;
|
||||
virtual QRectF boundingRect() const = 0;
|
||||
virtual void paint(QPainter *painter) const = 0;
|
||||
|
||||
const QString *text() const {return _text;}
|
||||
bool collides(const QList<TextItem*> &list) const;
|
||||
|
||||
protected:
|
||||
const QString *_text;
|
||||
};
|
||||
|
||||
#endif // TEXTITEM_H
|
||||
|
@ -137,7 +137,7 @@ static bool reverse(const QPainterPath &path)
|
||||
|
||||
TextPathItem::TextPathItem(const QPolygonF &line, const QString *label,
|
||||
const QRect &tileRect, const QFont *font, const QColor *color)
|
||||
: _text(label), _font(font), _color(color)
|
||||
: TextItem(label), _font(font), _color(color)
|
||||
{
|
||||
qreal cw = font->pixelSize() * 0.7;
|
||||
qreal textWidth = _text->size() * cw;
|
||||
|
@ -8,7 +8,7 @@
|
||||
class TextPathItem : public TextItem
|
||||
{
|
||||
public:
|
||||
TextPathItem() : _text(0), _font(0), _color(0) {}
|
||||
TextPathItem() : TextItem(0), _font(0), _color(0) {}
|
||||
TextPathItem(const QPolygonF &line, const QString *label,
|
||||
const QRect &tileRect, const QFont *font, const QColor *color);
|
||||
|
||||
@ -19,7 +19,6 @@ public:
|
||||
void paint(QPainter *painter) const;
|
||||
|
||||
private:
|
||||
const QString *_text;
|
||||
const QFont *_font;
|
||||
const QColor *_color;
|
||||
QPainterPath _path;
|
||||
|
@ -17,7 +17,7 @@ static void expand(QRect &rect, int width)
|
||||
|
||||
TextPointItem::TextPointItem(const QPoint &point, const QString *text,
|
||||
const QFont *font, const QImage *img, const QColor *color,
|
||||
const QColor *bgColor) : _text(font ? text : 0), _font(font), _img(img),
|
||||
const QColor *bgColor) : TextItem(font ? text : 0), _font(font), _img(img),
|
||||
_color(color), _bgColor(bgColor)
|
||||
{
|
||||
if (_text) {
|
||||
|
@ -14,7 +14,7 @@ class QColor;
|
||||
class TextPointItem : public TextItem
|
||||
{
|
||||
public:
|
||||
TextPointItem() : _text(0), _font(0), _img(0) {}
|
||||
TextPointItem() : TextItem(0), _font(0), _img(0) {}
|
||||
TextPointItem(const QPoint &point, const QString *text, const QFont *font,
|
||||
const QImage *img, const QColor *color, const QColor *bgColor = 0);
|
||||
|
||||
@ -27,7 +27,6 @@ public:
|
||||
void setPos(const QPoint &point);
|
||||
|
||||
private:
|
||||
const QString *_text;
|
||||
const QFont *_font;
|
||||
const QImage *_img;
|
||||
const QColor *_color, *_bgColor;
|
||||
|
@ -5,7 +5,12 @@
|
||||
|
||||
static inline double RB(qint32 val)
|
||||
{
|
||||
return (val == -0x800000 || val == 0x800000) ? 180.0 : toWGS24(val);
|
||||
return (val == -0x800000 || val >= 0x800000) ? 180.0 : toWGS24(val);
|
||||
}
|
||||
|
||||
static inline double LB(qint32 val)
|
||||
{
|
||||
return (val <= -0x800000) ? -180.0 : toWGS24(val);
|
||||
}
|
||||
|
||||
static void demangle(quint8 *data, quint32 size, quint32 key)
|
||||
@ -60,7 +65,8 @@ bool TREFile::init()
|
||||
return false;
|
||||
_bounds = RectC(Coordinates(toWGS24(west), toWGS24(north)),
|
||||
Coordinates(RB(east), toWGS24(south)));
|
||||
Q_ASSERT(_bounds.left() <= _bounds.right());
|
||||
if (!_bounds.isValid())
|
||||
return false;
|
||||
|
||||
// Levels & subdivs info
|
||||
quint32 levelsOffset, levelsSize, subdivSize;
|
||||
@ -187,15 +193,17 @@ bool TREFile::load(int idx)
|
||||
|
||||
width &= 0x7FFF;
|
||||
width = LS(width, 24 - level.bits);
|
||||
height &= 0x7FFF;
|
||||
height = LS(height, 24 - level.bits);
|
||||
|
||||
s = new SubDiv(offset, lon, lat, level.level, level.bits, objects);
|
||||
sl.append(s);
|
||||
|
||||
double min[2], max[2];
|
||||
RectC bounds(Coordinates(toWGS24(lon - width), toWGS24(lat + height)),
|
||||
RectC bounds(Coordinates(LB(lon - width), toWGS24(lat + height)),
|
||||
Coordinates(RB(lon + width), toWGS24(lat - height)));
|
||||
Q_ASSERT(bounds.left() <= bounds.right());
|
||||
if (!bounds.isValid())
|
||||
goto error;
|
||||
|
||||
min[0] = bounds.left();
|
||||
min[1] = bounds.bottom();
|
||||
|
@ -28,7 +28,7 @@ Projection CRS::projection(const QString &crs)
|
||||
return Projection();
|
||||
}
|
||||
|
||||
if (authority == "EPSG") {
|
||||
if (!authority.compare("EPSG", Qt::CaseInsensitive)) {
|
||||
epsg = code.toInt(&res);
|
||||
if (!res)
|
||||
return Projection();
|
||||
@ -39,7 +39,7 @@ Projection CRS::projection(const QString &crs)
|
||||
return Projection(gcs);
|
||||
else
|
||||
return Projection();
|
||||
} else if (authority == "OGC") {
|
||||
} else if (!authority.compare("OGC", Qt::CaseInsensitive)) {
|
||||
if (code == "CRS84")
|
||||
return Projection(GCS::gcs(4326), CoordinateSystem::XY);
|
||||
else
|
||||
|
@ -61,19 +61,19 @@
|
||||
((map).contains(key) && (map).value(key).SHORT != 32767)
|
||||
|
||||
|
||||
typedef struct {
|
||||
struct GeoKeyHeader {
|
||||
quint16 KeyDirectoryVersion;
|
||||
quint16 KeyRevision;
|
||||
quint16 MinorRevision;
|
||||
quint16 NumberOfKeys;
|
||||
} Header;
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
struct GeoKeyEntry {
|
||||
quint16 KeyID;
|
||||
quint16 TIFFTagLocation;
|
||||
quint16 Count;
|
||||
quint16 ValueOffset;
|
||||
} KeyEntry;
|
||||
};
|
||||
|
||||
|
||||
bool GeoTIFF::readEntry(TIFFFile &file, Ctx &ctx) const
|
||||
@ -196,8 +196,8 @@ bool GeoTIFF::readMatrix(TIFFFile &file, quint32 offset, double matrix[16]) cons
|
||||
|
||||
bool GeoTIFF::readKeys(TIFFFile &file, Ctx &ctx, QMap<quint16, Value> &kv) const
|
||||
{
|
||||
Header header;
|
||||
KeyEntry entry;
|
||||
GeoKeyHeader header;
|
||||
GeoKeyEntry entry;
|
||||
Value value;
|
||||
|
||||
if (!file.seek(ctx.keys))
|
||||
|
@ -136,6 +136,9 @@ void IMGMap::updateTransform()
|
||||
RectD prect(_dataBounds, _projection);
|
||||
_bounds = QRectF(_transform.proj2img(prect.topLeft()),
|
||||
_transform.proj2img(prect.bottomRight()));
|
||||
// Adjust the bounds of world maps to avoid problems with wrapping
|
||||
if (_dataBounds.left() == -180.0 || _dataBounds.right() == 180.0)
|
||||
_bounds.adjust(0.5, 0, -0.5, 0);
|
||||
}
|
||||
|
||||
QPointF IMGMap::ll2xy(const Coordinates &c)
|
||||
@ -194,7 +197,7 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||
|
||||
QRectF polyRect(ttl, QPointF(ttl.x() + TILE_SIZE,
|
||||
ttl.y() + TILE_SIZE));
|
||||
polyRect &= bounds().adjusted(0.5, 0.5, -0.5, -0.5);
|
||||
polyRect &= bounds();
|
||||
RectD polyRectD(_transform.img2proj(polyRect.topLeft()),
|
||||
_transform.img2proj(polyRect.bottomRight()));
|
||||
_data.at(n)->polys(polyRectD.toRectC(_projection, 4), _zoom,
|
||||
@ -204,7 +207,7 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
|
||||
QRectF pointRect(QPointF(ttl.x() - TEXT_EXTENT,
|
||||
ttl.y() - TEXT_EXTENT), QPointF(ttl.x() + TILE_SIZE
|
||||
+ TEXT_EXTENT, ttl.y() + TILE_SIZE + TEXT_EXTENT));
|
||||
pointRect &= bounds().adjusted(0.5, 0.5, -0.5, -0.5);
|
||||
pointRect &= bounds();
|
||||
RectD pointRectD(_transform.img2proj(pointRect.topLeft()),
|
||||
_transform.img2proj(pointRect.bottomRight()));
|
||||
_data.at(n)->points(pointRectD.toRectC(_projection, 4),
|
||||
@ -241,7 +244,7 @@ void IMGMap::setProjection(const Projection &projection)
|
||||
|
||||
_projection = projection;
|
||||
// Limit the bounds for some well known Mercator projections
|
||||
// (GARMIN world maps have N/S bounds up to 90/-90!)
|
||||
// (world maps have N/S bounds up to 90/-90!)
|
||||
_dataBounds = (_projection == PCS::pcs(3857) || _projection == PCS::pcs(3395))
|
||||
? _data.first()->bounds() & OSM::BOUNDS : _data.first()->bounds();
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
#define BLOCKCOUNT(size) \
|
||||
((size)/BLOCKSIZE + ((size) % BLOCKSIZE > 0 ? 1 : 0))
|
||||
|
||||
struct Header
|
||||
struct TARHeader
|
||||
{
|
||||
char name[100]; /* 0 */
|
||||
char mode[8]; /* 100 */
|
||||
@ -61,7 +61,7 @@ bool Tar::open()
|
||||
bool Tar::loadTar()
|
||||
{
|
||||
char buffer[BLOCKSIZE];
|
||||
struct Header *hdr = (struct Header*)&buffer;
|
||||
TARHeader *hdr = (TARHeader*)&buffer;
|
||||
quint64 size;
|
||||
qint64 ret;
|
||||
|
||||
@ -113,7 +113,7 @@ bool Tar::loadTmi(const QString &path)
|
||||
QByteArray Tar::file(const QString &name)
|
||||
{
|
||||
char buffer[BLOCKSIZE];
|
||||
struct Header *hdr = (struct Header*)&buffer;
|
||||
TARHeader *hdr = (TARHeader*)&buffer;
|
||||
quint64 size;
|
||||
|
||||
QMap<QString, quint64>::const_iterator it(_index.find(name));
|
||||
|