mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-04-20 12:19:11 +02:00
Compare commits
No commits in common. "816681f267083902ea327fd0e6512913d36b4b1a" and "b7bb3b649a6021e91a02c837639e5b7dee35cdd9" have entirely different histories.
816681f267
...
b7bb3b649a
@ -170,14 +170,6 @@ static bool polygonCb(const MapData::Poly *polygon, void *context)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool polygonPointCb(const MapData::Poly *polygon, void *context)
|
|
||||||
{
|
|
||||||
QList<MapData::Point> *points = (QList<MapData::Point>*)context;
|
|
||||||
points->append(MapData::Point(polygon->type(), polygon->bounds().center(),
|
|
||||||
polygon->label(), polygon->param()));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Coordinates coordinates(int x, int y, uint COMF)
|
static Coordinates coordinates(int x, int y, uint COMF)
|
||||||
{
|
{
|
||||||
return Coordinates(x / (double)COMF, y / (double)COMF);
|
return Coordinates(x / (double)COMF, y / (double)COMF);
|
||||||
@ -298,12 +290,6 @@ MapData::Point::Point(uint type, const Coordinates &c, const QString &label,
|
|||||||
_param = QVariant(params.at(0).toDouble());
|
_param = QVariant(params.at(0).toDouble());
|
||||||
}
|
}
|
||||||
|
|
||||||
MapData::Point::Point(uint type, const Coordinates &c, const QString &label,
|
|
||||||
const QVariant ¶m) : _type(type), _pos(c), _label(label), _param(param)
|
|
||||||
{
|
|
||||||
_id = ((quint64)order(type))<<32 | (uint)qHash(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
MapData::Poly::Poly(uint type, const Polygon &path, const QString &label,
|
MapData::Poly::Poly(uint type, const Polygon &path, const QString &label,
|
||||||
const QVector<QByteArray> ¶ms, uint HUNI) : _type(type), _path(path)
|
const QVector<QByteArray> ¶ms, uint HUNI) : _type(type), _path(path)
|
||||||
{
|
{
|
||||||
@ -862,7 +848,6 @@ void MapData::points(const RectC &rect, QList<Point> *points) const
|
|||||||
|
|
||||||
rectcBounds(rect, min, max);
|
rectcBounds(rect, min, max);
|
||||||
_points.Search(min, max, pointCb, points);
|
_points.Search(min, max, pointCb, points);
|
||||||
_areas.Search(min, max, polygonPointCb, points);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MapData::lines(const RectC &rect, QList<Line> *lines) const
|
void MapData::lines(const RectC &rect, QList<Line> *lines) const
|
||||||
|
@ -49,8 +49,6 @@ public:
|
|||||||
public:
|
public:
|
||||||
Point(uint type, const Coordinates &c, const QString &label,
|
Point(uint type, const Coordinates &c, const QString &label,
|
||||||
const QVector<QByteArray> ¶ms);
|
const QVector<QByteArray> ¶ms);
|
||||||
Point(uint type, const Coordinates &c, const QString &label,
|
|
||||||
const QVariant ¶m);
|
|
||||||
|
|
||||||
const Coordinates &pos() const {return _pos;}
|
const Coordinates &pos() const {return _pos;}
|
||||||
uint type() const {return _type;}
|
uint type() const {return _type;}
|
||||||
|
@ -40,6 +40,31 @@ static bool showLabel(const QImage *img, const Range &range, int zoom, int type)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QPointF RasterTile::centroid(const QVector<Coordinates> &polygon) const
|
||||||
|
{
|
||||||
|
Q_ASSERT(polygon.size() > 3);
|
||||||
|
Q_ASSERT(polygon.first() == polygon.last());
|
||||||
|
|
||||||
|
double area = 0;
|
||||||
|
double cx = 0, cy = 0;
|
||||||
|
QPointF pi;
|
||||||
|
QPointF pj(ll2xy(polygon.at(0)));
|
||||||
|
|
||||||
|
for (int i = 0; i < polygon.size() - 1; i++) {
|
||||||
|
pi = pj;
|
||||||
|
pj = ll2xy(polygon.at(i + 1));
|
||||||
|
|
||||||
|
double f = pi.x() * pj.y() - pj.x() * pi.y();
|
||||||
|
area += f;
|
||||||
|
cx += (pi.x() + pj.x()) * f;
|
||||||
|
cy += (pi.y() + pj.y()) * f;
|
||||||
|
}
|
||||||
|
|
||||||
|
double factor = 1.0 / (3.0 * area);
|
||||||
|
|
||||||
|
return QPointF(cx * factor, cy * factor);
|
||||||
|
}
|
||||||
|
|
||||||
QPainterPath RasterTile::painterPath(const Polygon &polygon) const
|
QPainterPath RasterTile::painterPath(const Polygon &polygon) const
|
||||||
{
|
{
|
||||||
QPainterPath path;
|
QPainterPath path;
|
||||||
@ -137,6 +162,20 @@ static void drawArrow(QPainter *painter, const QPolygonF &polygon, uint type)
|
|||||||
painter->drawPolygon(polygon);
|
painter->drawPolygon(polygon);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RasterTile::drawArrows(QPainter *painter,
|
||||||
|
const QList<MapData::Poly> &polygons)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < polygons.size(); i++) {
|
||||||
|
const MapData::Poly &poly = polygons.at(i);
|
||||||
|
|
||||||
|
if (poly.type()>>16 == TSSLPT || poly.type()>>16 == RCTLPT) {
|
||||||
|
QPolygonF polygon(tsslptArrow(centroid(poly.path().first()),
|
||||||
|
deg2rad(poly.param().toDouble())));
|
||||||
|
drawArrow(painter, polygon, poly.type());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RasterTile::drawArrows(QPainter *painter,
|
void RasterTile::drawArrows(QPainter *painter,
|
||||||
const QList<MapData::Point> &points)
|
const QList<MapData::Point> &points)
|
||||||
{
|
{
|
||||||
@ -213,6 +252,46 @@ void RasterTile::drawTextItems(QPainter *painter,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RasterTile::processPolygons(const QList<MapData::Poly> &polygons,
|
||||||
|
QList<TextItem*> &textItems)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < polygons.size(); i++) {
|
||||||
|
const MapData::Poly &poly = polygons.at(i);
|
||||||
|
uint type = poly.type()>>16;
|
||||||
|
const QImage *img = 0;
|
||||||
|
const QString *label = 0;
|
||||||
|
const QFont *fnt = 0;
|
||||||
|
const QColor *color = 0, *hColor = 0;
|
||||||
|
QPoint offset(0, 0);
|
||||||
|
|
||||||
|
if (!poly.label().isEmpty()) {
|
||||||
|
const Style::Point &style = _style->point(poly.type());
|
||||||
|
fnt = _style->font(style.textFontSize());
|
||||||
|
color = &style.textColor();
|
||||||
|
hColor = style.haloColor().isValid() ? &style.haloColor() : 0;
|
||||||
|
label = &poly.label();
|
||||||
|
}
|
||||||
|
if (type == HRBFAC || type == I_TRNBSN
|
||||||
|
|| poly.type() == SUBTYPE(I_BERTHS, 6)) {
|
||||||
|
const Style::Point &style = _style->point(poly.type());
|
||||||
|
img = style.img().isNull() ? 0 : &style.img();
|
||||||
|
offset = style.offset();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((!label || !fnt) && !img)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
TextPointItem *item = new TextPointItem(offset +
|
||||||
|
centroid(poly.path().first()).toPoint(), label, fnt, img, color,
|
||||||
|
hColor, 0, 0);
|
||||||
|
if (item->isValid() && _rect.contains(item->boundingRect().toRect())
|
||||||
|
&& !item->collides(textItems))
|
||||||
|
textItems.append(item);
|
||||||
|
else
|
||||||
|
delete item;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void RasterTile::processPoints(QList<MapData::Point> &points,
|
void RasterTile::processPoints(QList<MapData::Point> &points,
|
||||||
QList<TextItem*> &textItems, QList<TextItem*> &lights)
|
QList<TextItem*> &textItems, QList<TextItem*> &lights)
|
||||||
{
|
{
|
||||||
@ -333,6 +412,7 @@ void RasterTile::render()
|
|||||||
fetchData(polygons, lines, points);
|
fetchData(polygons, lines, points);
|
||||||
|
|
||||||
processPoints(points, textItems, lights);
|
processPoints(points, textItems, lights);
|
||||||
|
processPolygons(polygons, textItems);
|
||||||
processLines(lines, textItems);
|
processLines(lines, textItems);
|
||||||
|
|
||||||
QPainter painter(&img);
|
QPainter painter(&img);
|
||||||
@ -342,6 +422,7 @@ void RasterTile::render()
|
|||||||
|
|
||||||
drawPolygons(&painter, polygons);
|
drawPolygons(&painter, polygons);
|
||||||
drawLines(&painter, lines);
|
drawLines(&painter, lines);
|
||||||
|
drawArrows(&painter, polygons);
|
||||||
drawArrows(&painter, points);
|
drawArrows(&painter, points);
|
||||||
|
|
||||||
drawTextItems(&painter, lights);
|
drawTextItems(&painter, lights);
|
||||||
|
@ -47,8 +47,11 @@ private:
|
|||||||
QList<TextItem*> &textItems, QList<TextItem *> &lights);
|
QList<TextItem*> &textItems, QList<TextItem *> &lights);
|
||||||
void processLines(const QList<MapData::Line> &lines,
|
void processLines(const QList<MapData::Line> &lines,
|
||||||
QList<TextItem*> &textItems);
|
QList<TextItem*> &textItems);
|
||||||
|
void processPolygons(const QList<MapData::Poly> &polygons,
|
||||||
|
QList<TextItem*> &textItems);
|
||||||
void drawBitmapPath(QPainter *painter, const QImage &img,
|
void drawBitmapPath(QPainter *painter, const QImage &img,
|
||||||
const Polygon &polygon);
|
const Polygon &polygon);
|
||||||
|
void drawArrows(QPainter *painter, const QList<MapData::Poly> &polygons);
|
||||||
void drawArrows(QPainter *painter, const QList<MapData::Point> &points);
|
void drawArrows(QPainter *painter, const QList<MapData::Point> &points);
|
||||||
void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons);
|
void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons);
|
||||||
void drawLines(QPainter *painter, const QList<MapData::Line> &lines);
|
void drawLines(QPainter *painter, const QList<MapData::Line> &lines);
|
||||||
|
@ -82,27 +82,7 @@ void Style::polygonStyle()
|
|||||||
_polygons[SUBTYPE(I_RESARE, 12)] = Polygon(QImage(":/marine/safety-zone-line.png"));
|
_polygons[SUBTYPE(I_RESARE, 12)] = Polygon(QImage(":/marine/safety-zone-line.png"));
|
||||||
_polygons[SUBTYPE(RESARE, 1)] = Polygon(QImage(":/marine/safety-zone-line.png"));
|
_polygons[SUBTYPE(RESARE, 1)] = Polygon(QImage(":/marine/safety-zone-line.png"));
|
||||||
_polygons[SUBTYPE(ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png"));
|
_polygons[SUBTYPE(ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png"));
|
||||||
_polygons[SUBTYPE(ACHARE, 2)] = _polygons[SUBTYPE(ACHARE, 1)];
|
_polygons[SUBTYPE(I_ACHARE, 1)] = Polygon(QImage(":/marine/anchor-line.png"));
|
||||||
_polygons[SUBTYPE(ACHARE, 3)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(ACHARE, 4)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(ACHARE, 5)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(ACHARE, 6)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(ACHARE, 7)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(ACHARE, 8)] = Polygon(Qt::NoBrush,
|
|
||||||
QPen(QColor(0xeb, 0x49, 0xeb), 1, Qt::DashLine));
|
|
||||||
_polygons[SUBTYPE(ACHARE, 9)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 1)] = _polygons[SUBTYPE(ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 2)] = _polygons[SUBTYPE(ACHARE, 2)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 3)] = _polygons[SUBTYPE(ACHARE, 3)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 4)] = _polygons[SUBTYPE(ACHARE, 4)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 5)] = _polygons[SUBTYPE(ACHARE, 5)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 6)] = _polygons[SUBTYPE(ACHARE, 6)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 7)] = _polygons[SUBTYPE(ACHARE, 7)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 8)] = _polygons[SUBTYPE(ACHARE, 8)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 9)] = _polygons[SUBTYPE(ACHARE, 9)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 10)] = _polygons[SUBTYPE(I_ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 11)] = _polygons[SUBTYPE(I_ACHARE, 1)];
|
|
||||||
_polygons[SUBTYPE(I_ACHARE, 12)] = _polygons[SUBTYPE(I_ACHARE, 1)];
|
|
||||||
_polygons[TYPE(PRCARE)] = Polygon(QBrush(QColor(0xeb, 0x49, 0xeb),
|
_polygons[TYPE(PRCARE)] = Polygon(QBrush(QColor(0xeb, 0x49, 0xeb),
|
||||||
Qt::BDiagPattern));
|
Qt::BDiagPattern));
|
||||||
_polygons[TYPE(DAMCON)] = Polygon(QBrush(QColor(0xd9, 0x8b, 0x21)),
|
_polygons[TYPE(DAMCON)] = Polygon(QBrush(QColor(0xd9, 0x8b, 0x21)),
|
||||||
@ -136,9 +116,6 @@ void Style::polygonStyle()
|
|||||||
_polygons[TYPE(BERTHS)] = Polygon(Qt::NoBrush, QPen(QColor(0xeb, 0x49, 0xeb),
|
_polygons[TYPE(BERTHS)] = Polygon(Qt::NoBrush, QPen(QColor(0xeb, 0x49, 0xeb),
|
||||||
1, Qt::DashLine));
|
1, Qt::DashLine));
|
||||||
_polygons[TYPE(I_BERTHS)] = _polygons[TYPE(BERTHS)];
|
_polygons[TYPE(I_BERTHS)] = _polygons[TYPE(BERTHS)];
|
||||||
_polygons[SUBTYPE(I_BERTHS, 6)] = _polygons[TYPE(BERTHS)];
|
|
||||||
_polygons[TYPE(I_TRNBSN)] = Polygon(Qt::NoBrush, QPen(QColor(0xeb, 0x49, 0xeb),
|
|
||||||
1, Qt::DashLine));
|
|
||||||
_polygons[TYPE(CONZNE)] = Polygon(Qt::NoBrush, QPen(QColor(0xeb, 0x49, 0xeb),
|
_polygons[TYPE(CONZNE)] = Polygon(Qt::NoBrush, QPen(QColor(0xeb, 0x49, 0xeb),
|
||||||
1, Qt::DashDotLine));
|
1, Qt::DashDotLine));
|
||||||
|
|
||||||
@ -154,19 +131,13 @@ void Style::polygonStyle()
|
|||||||
<< TYPE(I_PONTON) << TYPE(HULKES) << TYPE(I_HULKES) << TYPE(FLODOC)
|
<< TYPE(I_PONTON) << TYPE(HULKES) << TYPE(I_HULKES) << TYPE(FLODOC)
|
||||||
<< TYPE(I_FLODOC) << TYPE(DRYDOC) << TYPE(DAMCON) << TYPE(PYLONS)
|
<< TYPE(I_FLODOC) << TYPE(DRYDOC) << TYPE(DAMCON) << TYPE(PYLONS)
|
||||||
<< TYPE(MORFAC) << TYPE(GATCON) << TYPE(I_GATCON) << TYPE(BERTHS)
|
<< TYPE(MORFAC) << TYPE(GATCON) << TYPE(I_GATCON) << TYPE(BERTHS)
|
||||||
<< TYPE(I_BERTHS) << SUBTYPE(I_BERTHS, 6) << TYPE(DMPGRD) << TYPE(TSEZNE)
|
<< TYPE(I_BERTHS) << TYPE(DMPGRD) << TYPE(TSEZNE) << TYPE(OBSTRN)
|
||||||
<< TYPE(OBSTRN) << TYPE(UWTROC) << TYPE(DWRTPT) << SUBTYPE(ACHARE, 1)
|
<< TYPE(UWTROC) << TYPE(DWRTPT) << SUBTYPE(ACHARE, 1)
|
||||||
<< SUBTYPE(ACHARE, 2) << SUBTYPE(ACHARE, 3) << SUBTYPE(ACHARE, 4)
|
<< SUBTYPE(I_ACHARE, 1) << SUBTYPE(RESARE, 9) << SUBTYPE(RESARE, 2)
|
||||||
<< SUBTYPE(ACHARE, 5) << SUBTYPE(ACHARE, 6) << SUBTYPE(ACHARE, 7)
|
<< SUBTYPE(I_RESARE, 2) << SUBTYPE(RESARE, 17) << SUBTYPE(I_RESARE, 17)
|
||||||
<< SUBTYPE(ACHARE, 8) << SUBTYPE(ACHARE, 9) << SUBTYPE(I_ACHARE, 1)
|
<< SUBTYPE(RESARE, 12) << SUBTYPE(I_RESARE, 12) << SUBTYPE(RESARE, 1)
|
||||||
<< SUBTYPE(I_ACHARE, 2) << SUBTYPE(I_ACHARE, 3) << SUBTYPE(I_ACHARE, 4)
|
<< TYPE(CBLARE) << TYPE(PIPARE) << TYPE(PRCARE) << SUBTYPE(MARKUL, 3)
|
||||||
<< SUBTYPE(I_ACHARE, 5) << SUBTYPE(I_ACHARE, 6) << SUBTYPE(I_ACHARE, 7)
|
<< TYPE(CONZNE);
|
||||||
<< SUBTYPE(I_ACHARE, 8) << SUBTYPE(I_ACHARE, 9) << SUBTYPE(I_ACHARE, 10)
|
|
||||||
<< SUBTYPE(I_ACHARE, 11) << SUBTYPE(I_ACHARE, 12) << SUBTYPE(RESARE, 9)
|
|
||||||
<< SUBTYPE(RESARE, 2) << SUBTYPE(I_RESARE, 2) << SUBTYPE(RESARE, 17)
|
|
||||||
<< SUBTYPE(I_RESARE, 17) << SUBTYPE(RESARE, 12) << SUBTYPE(I_RESARE, 12)
|
|
||||||
<< SUBTYPE(RESARE, 1) << TYPE(CBLARE) << TYPE(PIPARE) << TYPE(PRCARE)
|
|
||||||
<< TYPE(I_TRNBSN) << SUBTYPE(MARKUL, 3) << TYPE(CONZNE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Style::lineStyle(qreal ratio)
|
void Style::lineStyle(qreal ratio)
|
||||||
@ -266,7 +237,6 @@ void Style::pointStyle(qreal ratio)
|
|||||||
_points[SUBTYPE(LNDMRK, 7)] = Point(QImage(":/marine/pylon.png"), Small);
|
_points[SUBTYPE(LNDMRK, 7)] = Point(QImage(":/marine/pylon.png"), Small);
|
||||||
_points[SUBTYPE(LNDMRK, 9)] = Point(QImage(":/marine/monument.png"), Small,
|
_points[SUBTYPE(LNDMRK, 9)] = Point(QImage(":/marine/monument.png"), Small,
|
||||||
QPoint(0, -7));
|
QPoint(0, -7));
|
||||||
_points[SUBTYPE(LNDMRK, 10)] = Point(QImage(":/marine/pylon.png"), Small);
|
|
||||||
_points[SUBTYPE(LNDMRK, 15)] = Point(QImage(":/marine/dome.png"), Small,
|
_points[SUBTYPE(LNDMRK, 15)] = Point(QImage(":/marine/dome.png"), Small,
|
||||||
QPoint(0, -5));
|
QPoint(0, -5));
|
||||||
_points[SUBTYPE(LNDMRK, 17)] = Point(QImage(":/marine/tower.png"), Small,
|
_points[SUBTYPE(LNDMRK, 17)] = Point(QImage(":/marine/tower.png"), Small,
|
||||||
@ -355,8 +325,7 @@ void Style::pointStyle(qreal ratio)
|
|||||||
_points[SUBTYPE(I_RDOCAL, 3)].setTextColor(QColor(0xeb, 0x49, 0xeb));
|
_points[SUBTYPE(I_RDOCAL, 3)].setTextColor(QColor(0xeb, 0x49, 0xeb));
|
||||||
_points[SUBTYPE(I_RDOCAL, 4)].setTextColor(QColor(0xeb, 0x49, 0xeb));
|
_points[SUBTYPE(I_RDOCAL, 4)].setTextColor(QColor(0xeb, 0x49, 0xeb));
|
||||||
_points[TYPE(PYLONS)] = Point(QImage(":/marine/pylon.png"));
|
_points[TYPE(PYLONS)] = Point(QImage(":/marine/pylon.png"));
|
||||||
_points[SUBTYPE(I_BERTHS, 6)] = Point(QImage(":/marine/fleeting-area.png"),
|
_points[SUBTYPE(I_BERTHS, 6)] = Point(QImage(":/marine/fleeting-area.png"));
|
||||||
Small);
|
|
||||||
_points[SUBTYPE(WATTUR, 1)] = Point(QImage(":/marine/breakers.png"));
|
_points[SUBTYPE(WATTUR, 1)] = Point(QImage(":/marine/breakers.png"));
|
||||||
_points[SUBTYPE(WATTUR, 2)] = Point(QImage(":/marine/eddies.png"));
|
_points[SUBTYPE(WATTUR, 2)] = Point(QImage(":/marine/eddies.png"));
|
||||||
_points[SUBTYPE(WATTUR, 3)] = Point(QImage(":/marine/overfalls.png"));
|
_points[SUBTYPE(WATTUR, 3)] = Point(QImage(":/marine/overfalls.png"));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user