1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2025-03-14 02:57:45 +01:00
GPXSee/src/map/ENC/rastertile.h

103 lines
3.1 KiB
C
Raw Normal View History

2022-11-04 09:03:36 +01:00
#ifndef ENC_RASTERTILE_H
#define ENC_RASTERTILE_H
#include <QPixmap>
#include "common/range.h"
2022-11-04 09:03:36 +01:00
#include "map/projection.h"
#include "map/transform.h"
#include "data.h"
#include "style.h"
#include "atlasdata.h"
2022-11-04 09:03:36 +01:00
class TextItem;
namespace ENC {
class RasterTile
{
public:
2023-03-24 22:54:53 +01:00
RasterTile(const Projection &proj, const Transform &transform,
const Style *style, Data *data, int zoom,
const Range &zoomRange, const QRect &rect, qreal ratio) :
_proj(proj), _transform(transform), _style(style),
_zoom(zoom), _zoomRange(zoomRange), _rect(rect), _ratio(ratio)
{
_data.append(data);
}
RasterTile(const Projection &proj, const Transform &transform,
const Style *style, const QList<Data*> &data, int zoom,
const Range &zoomRange, const QRect &rect, qreal ratio) :
_proj(proj), _transform(transform), _style(style), _data(data),
2024-02-23 09:45:41 +01:00
_zoom(zoom), _zoomRange(zoomRange), _rect(rect), _ratio(ratio) {}
2022-11-04 09:03:36 +01:00
int zoom() const {return _zoom;}
QPoint xy() const {return _rect.topLeft();}
const QPixmap &pixmap() const {return _pixmap;}
void render();
private:
struct SectorLight
{
2025-02-09 23:00:45 +01:00
SectorLight(const Coordinates &pos, Style::Color color, uint visibility,
2025-02-10 20:25:53 +01:00
double range, double start, double end) : pos(pos), color(color),
visibility(visibility), range(range), start(start), end(end) {}
Coordinates pos;
Style::Color color;
uint visibility;
2025-02-10 20:25:53 +01:00
double range;
double start;
double end;
};
struct Level {
QList<Data::Line> lines;
QList<Data::Poly> polygons;
QList<Data::Point> points;
bool overZoom;
bool isNull() const
{return lines.isEmpty() && polygons.isEmpty() && points.isEmpty();}
};
typedef QMap<Coordinates, Style::Color> LightMap;
typedef QSet<Coordinates> SignalSet;
2022-11-04 09:03:36 +01:00
QPointF ll2xy(const Coordinates &c) const
{return _transform.proj2img(_proj.ll2xy(c));}
QPainterPath painterPath(const Polygon &polygon) const;
QPolygonF polyline(const QVector<Coordinates> &path) const;
QVector<QPolygonF> polylineM(const QVector<Coordinates> &path) const;
QPolygonF tsslptArrow(const QPointF &p, qreal angle) const;
QPointF centroid(const QVector<Coordinates> &polygon) const;
void processPoints(const QList<Data::Point> &points,
QList<TextItem*> &textItems, QList<TextItem *> &lights,
QList<SectorLight> &sectorLights, bool overZoom) const;
void processLines(const QList<Data::Line> &lines,
QList<TextItem*> &textItems) const;
void drawArrows(QPainter *painter, const QList<Data::Point> &points) const;
void drawPolygons(QPainter *painter, const QList<Data::Poly> &polygons) const;
void drawLines(QPainter *painter, const QList<Data::Line> &lines) const;
2025-02-09 23:00:45 +01:00
void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems) const;
void drawSectorLights(QPainter *painter, const QList<SectorLight> &lights) const;
bool showLabel(const QImage *img, int type) const;
void drawLevels(QPainter *painter, const QList<Level> &levels);
QList<Level> fetchLevels();
QPainterPath shape(const QList<Data::Poly> &polygons) const;
2022-11-04 09:03:36 +01:00
Projection _proj;
Transform _transform;
const Style *_style;
QList<Data *> _data;
2022-11-04 09:03:36 +01:00
int _zoom;
Range _zoomRange;
2022-11-04 09:03:36 +01:00
QRect _rect;
qreal _ratio;
QPixmap _pixmap;
};
}
#endif // ENC_RASTERTILE_H