mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 03:35:53 +01:00
Render lights merged with the root objects, not as separate objects
This commit is contained in:
parent
048198dfe1
commit
416bd3472f
@ -194,6 +194,7 @@
|
||||
<file alias="breakers.png">icons/map/marine/breakers.png</file>
|
||||
<file alias="overfalls.png">icons/map/marine/overfalls.png</file>
|
||||
<file alias="boarding-place.png">icons/map/marine/boarding-place.png</file>
|
||||
<file alias="light.png">icons/map/marine/light.png</file>
|
||||
</qresource>
|
||||
|
||||
<!-- Mapsforge rendertheme -->
|
||||
|
BIN
icons/map/marine/light.png
Normal file
BIN
icons/map/marine/light.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 441 B |
@ -38,6 +38,15 @@ inline bool operator==(const Coordinates &c1, const Coordinates &c2)
|
||||
{return (c1.lat() == c2.lat() && c1.lon() == c2.lon());}
|
||||
inline bool operator!=(const Coordinates &c1, const Coordinates &c2)
|
||||
{return !(c1 == c2);}
|
||||
inline bool operator<(const Coordinates &c1, const Coordinates &c2)
|
||||
{
|
||||
if (c1.lon() < c2.lon())
|
||||
return true;
|
||||
else if (c1.lon() > c2.lon())
|
||||
return false;
|
||||
else
|
||||
return (c1.lat() < c2.lat());
|
||||
}
|
||||
|
||||
#ifndef QT_NO_DEBUG
|
||||
QDebug operator<<(QDebug dbg, const Coordinates &c);
|
||||
|
@ -19,32 +19,33 @@ static QMap<uint,uint> orderMapInit()
|
||||
{
|
||||
QMap<uint,uint> map;
|
||||
|
||||
map.insert(TYPE(CGUSTA), 0);
|
||||
map.insert(SUBTYPE(BUAARE, 1), 1);
|
||||
map.insert(SUBTYPE(BUAARE, 5), 2);
|
||||
map.insert(SUBTYPE(BUAARE, 4), 3);
|
||||
map.insert(SUBTYPE(BUAARE, 3), 4);
|
||||
map.insert(SUBTYPE(BUAARE, 2), 5);
|
||||
map.insert(SUBTYPE(BUAARE, 6), 6);
|
||||
map.insert(SUBTYPE(BUAARE, 0), 7);
|
||||
map.insert(TYPE(RDOSTA), 8);
|
||||
map.insert(TYPE(RADSTA), 9);
|
||||
map.insert(TYPE(RTPBCN), 10);
|
||||
map.insert(TYPE(BCNISD), 11);
|
||||
map.insert(TYPE(BCNLAT), 12);
|
||||
map.insert(TYPE(I_BCNLAT), 12);
|
||||
map.insert(TYPE(BCNSAW), 13);
|
||||
map.insert(TYPE(BCNSPP), 14);
|
||||
map.insert(TYPE(BOYCAR), 15);
|
||||
map.insert(TYPE(BOYINB), 16);
|
||||
map.insert(TYPE(BOYISD), 17);
|
||||
map.insert(TYPE(BOYLAT), 18);
|
||||
map.insert(TYPE(I_BOYLAT), 18);
|
||||
map.insert(TYPE(BOYSAW), 19);
|
||||
map.insert(TYPE(BOYSPP), 20);
|
||||
map.insert(TYPE(MORFAC), 21);
|
||||
map.insert(TYPE(OFSPLF), 22);
|
||||
map.insert(TYPE(LIGHTS), 23);
|
||||
map.insert(TYPE(LIGHTS), 0);
|
||||
|
||||
map.insert(TYPE(CGUSTA), 1);
|
||||
map.insert(SUBTYPE(BUAARE, 1), 2);
|
||||
map.insert(SUBTYPE(BUAARE, 5), 3);
|
||||
map.insert(SUBTYPE(BUAARE, 4), 4);
|
||||
map.insert(SUBTYPE(BUAARE, 3), 5);
|
||||
map.insert(SUBTYPE(BUAARE, 2), 6);
|
||||
map.insert(SUBTYPE(BUAARE, 6), 7);
|
||||
map.insert(SUBTYPE(BUAARE, 0), 8);
|
||||
map.insert(TYPE(RDOSTA), 9);
|
||||
map.insert(TYPE(RADSTA), 10);
|
||||
map.insert(TYPE(RTPBCN), 11);
|
||||
map.insert(TYPE(BCNISD), 12);
|
||||
map.insert(TYPE(BCNLAT), 13);
|
||||
map.insert(TYPE(I_BCNLAT), 13);
|
||||
map.insert(TYPE(BCNSAW), 14);
|
||||
map.insert(TYPE(BCNSPP), 15);
|
||||
map.insert(TYPE(BOYCAR), 16);
|
||||
map.insert(TYPE(BOYINB), 17);
|
||||
map.insert(TYPE(BOYISD), 18);
|
||||
map.insert(TYPE(BOYLAT), 19);
|
||||
map.insert(TYPE(I_BOYLAT), 19);
|
||||
map.insert(TYPE(BOYSAW), 20);
|
||||
map.insert(TYPE(BOYSPP), 21);
|
||||
map.insert(TYPE(MORFAC), 22);
|
||||
map.insert(TYPE(OFSPLF), 23);
|
||||
map.insert(TYPE(OBSTRN), 24);
|
||||
map.insert(TYPE(WRECKS), 25);
|
||||
map.insert(TYPE(UWTROC), 26);
|
||||
|
@ -13,6 +13,8 @@ using namespace ENC;
|
||||
#define TSSLPT_SIZE 0.005 /* ll */
|
||||
#define RDOCAL_SIZE 12 /* px */
|
||||
|
||||
typedef QMap<Coordinates, const MapData::Point*> PointMap;
|
||||
|
||||
const float C1 = 0.866025f; /* sqrt(3)/2 */
|
||||
|
||||
static const QColor haloColor(Qt::white);
|
||||
@ -49,6 +51,12 @@ static QFont *font(Style::FontSize size)
|
||||
}
|
||||
}
|
||||
|
||||
static const QImage *light()
|
||||
{
|
||||
static QImage img(":/marine/light.png");
|
||||
return &img;
|
||||
}
|
||||
|
||||
static const Style& style()
|
||||
{
|
||||
static Style s;
|
||||
@ -266,13 +274,25 @@ void RasterTile::processPolygons(QList<TextItem*> &textItems)
|
||||
}
|
||||
|
||||
void RasterTile::processPoints(QList<TextItem*> &textItems,
|
||||
QList<QImage*> &images)
|
||||
QList<TextItem*> &lights, QList<QImage*> &images)
|
||||
{
|
||||
const Style &s = style();
|
||||
PointMap lightsMap;
|
||||
int i;
|
||||
|
||||
std::sort(_points.begin(), _points.end(), pointLess);
|
||||
|
||||
for (int i = 0; i < _points.size(); i++) {
|
||||
/* Lights */
|
||||
for (i = 0; i < _points.size(); i++) {
|
||||
const MapData::Point *point = _points.at(i);
|
||||
if (point->type()>>16 == LIGHTS)
|
||||
lightsMap.insert(point->pos(), point);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
/* Everything else */
|
||||
for ( ; i < _points.size(); i++) {
|
||||
const MapData::Point *point = _points.at(i);
|
||||
const Style::Point &style = s.point(point->type());
|
||||
|
||||
@ -288,12 +308,17 @@ void RasterTile::processPoints(QList<TextItem*> &textItems,
|
||||
if ((!label || !fnt) && !img)
|
||||
continue;
|
||||
|
||||
TextPointItem *item = new TextPointItem(ll2xy(point->pos()).toPoint(),
|
||||
label, fnt, img, color, hColor, 0, ICON_PADDING);
|
||||
QPoint pos(ll2xy(point->pos()).toPoint());
|
||||
TextPointItem *item = new TextPointItem(pos, label, fnt, img, color,
|
||||
hColor, 0, ICON_PADDING);
|
||||
if (item->isValid() && !item->collides(textItems)) {
|
||||
textItems.append(item);
|
||||
if (rimg)
|
||||
images.append(rimg);
|
||||
const PointMap::const_iterator it = lightsMap.find(point->pos());
|
||||
if (it != lightsMap.constEnd())
|
||||
lights.append(new TextPointItem(pos, 0, 0, light(), 0, 0, 0,
|
||||
ICON_PADDING));
|
||||
} else {
|
||||
delete item;
|
||||
delete rimg;
|
||||
@ -328,14 +353,14 @@ void RasterTile::processLines(QList<TextItem*> &textItems)
|
||||
|
||||
void RasterTile::render()
|
||||
{
|
||||
QList<TextItem*> textItems;
|
||||
QList<TextItem*> textItems, lights;
|
||||
QList<QImage*> images;
|
||||
|
||||
_pixmap.setDevicePixelRatio(_ratio);
|
||||
_pixmap.fill(Qt::transparent);
|
||||
|
||||
processPolygons(textItems);
|
||||
processPoints(textItems, images);
|
||||
processPoints(textItems, lights, images);
|
||||
processLines(textItems);
|
||||
|
||||
QPainter painter(&_pixmap);
|
||||
@ -347,9 +372,11 @@ void RasterTile::render()
|
||||
drawLines(&painter);
|
||||
drawArrows(&painter);
|
||||
|
||||
drawTextItems(&painter, lights);
|
||||
drawTextItems(&painter, textItems);
|
||||
|
||||
qDeleteAll(textItems);
|
||||
qDeleteAll(lights);
|
||||
qDeleteAll(images);
|
||||
|
||||
//painter.setPen(Qt::red);
|
||||
|
@ -33,7 +33,8 @@ private:
|
||||
QPainterPath painterPath(const Polygon &polygon) const;
|
||||
QPolygonF polyline(const QVector<Coordinates> &path) const;
|
||||
QPolygonF tsslptArrow(const Coordinates &c, qreal angle) const;
|
||||
void processPoints(QList<TextItem*> &textItems, QList<QImage*> &images);
|
||||
void processPoints(QList<TextItem*> &textItems, QList<TextItem *> &lights,
|
||||
QList<QImage*> &images);
|
||||
void processLines(QList<TextItem*> &textItems);
|
||||
void processPolygons(QList<TextItem*> &textItems);
|
||||
void drawBitmapPath(QPainter *painter, const QImage &img,
|
||||
|
Loading…
Reference in New Issue
Block a user