1
0
mirror of https://github.com/tumic0/GPXSee.git synced 2024-11-24 11:45:53 +01:00

Process all the ll2xy operations in parallel

This commit is contained in:
Martin Tůma 2020-11-15 22:37:49 +01:00
parent 3635a7dfdc
commit baf574b68b
4 changed files with 41 additions and 43 deletions

View File

@ -1,5 +1,6 @@
#include <QFont> #include <QFont>
#include <QPainter> #include <QPainter>
#include "map/imgmap.h"
#include "textpathitem.h" #include "textpathitem.h"
#include "textpointitem.h" #include "textpointitem.h"
#include "bitmapline.h" #include "bitmapline.h"
@ -166,6 +167,10 @@ void RasterTile::render()
{ {
QList<TextItem*> textItems; QList<TextItem*> textItems;
ll2xy(_polygons);
ll2xy(_lines);
ll2xy(_points);
processPoints(textItems); processPoints(textItems);
processPolygons(textItems); processPolygons(textItems);
processLines(textItems); processLines(textItems);
@ -186,6 +191,25 @@ void RasterTile::render()
qDeleteAll(textItems); qDeleteAll(textItems);
} }
void RasterTile::ll2xy(QList<MapData::Poly> &polys)
{
for (int i = 0; i < polys.size(); i++) {
MapData::Poly &poly = polys[i];
for (int j = 0; j < poly.points.size(); j++) {
QPointF &p = poly.points[j];
p = _map->ll2xy(Coordinates(p.x(), p.y()));
}
}
}
void RasterTile::ll2xy(QList<MapData::Point> &points)
{
for (int i = 0; i < points.size(); i++) {
QPointF p(_map->ll2xy(points.at(i).coordinates));
points[i].coordinates = Coordinates(p.x(), p.y());
}
}
void RasterTile::drawPolygons(QPainter *painter) void RasterTile::drawPolygons(QPainter *painter)
{ {
for (int n = 0; n < _style->drawOrder().size(); n++) { for (int n = 0; n < _style->drawOrder().size(); n++) {

View File

@ -7,14 +7,15 @@
class QPainter; class QPainter;
class TextItem; class TextItem;
class Style; class Style;
class IMGMap;
class RasterTile class RasterTile
{ {
public: public:
RasterTile(const Style *style, int zoom, const QRect &rect, RasterTile(IMGMap *map, const Style *style, int zoom, const QRect &rect,
const QString &key, const QList<MapData::Poly> &polygons, const QString &key, const QList<MapData::Poly> &polygons,
const QList<MapData::Poly> &lines, QList<MapData::Point> &points) const QList<MapData::Poly> &lines, QList<MapData::Point> &points)
: _style(style), _zoom(zoom), _xy(rect.topLeft()), : _map(map), _style(style), _zoom(zoom), _xy(rect.topLeft()),
_key(key), _img(rect.size(), QImage::Format_ARGB32_Premultiplied), _key(key), _img(rect.size(), QImage::Format_ARGB32_Premultiplied),
_polygons(polygons), _lines(lines), _points(points) {} _polygons(polygons), _lines(lines), _points(points) {}
@ -25,6 +26,9 @@ public:
void render(); void render();
private: private:
void ll2xy(QList<MapData::Poly> &polys);
void ll2xy(QList<MapData::Point> &points);
void drawPolygons(QPainter *painter); void drawPolygons(QPainter *painter);
void drawLines(QPainter *painter); void drawLines(QPainter *painter);
void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems); void drawTextItems(QPainter *painter, const QList<TextItem*> &textItems);
@ -35,6 +39,7 @@ private:
void processShields(const QRect &tileRect, QList<TextItem*> &textItems); void processShields(const QRect &tileRect, QList<TextItem*> &textItems);
void processStreetNames(const QRect &tileRect, QList<TextItem*> &textItems); void processStreetNames(const QRect &tileRect, QList<TextItem*> &textItems);
IMGMap *_map;
const Style *_style; const Style *_style;
int _zoom; int _zoom;
QPoint _xy; QPoint _xy;

View File

@ -141,35 +141,6 @@ void IMGMap::updateTransform()
_bounds.adjust(0.5, 0, -0.5, 0); _bounds.adjust(0.5, 0, -0.5, 0);
} }
QPointF IMGMap::ll2xy(const Coordinates &c)
{
return _transform.proj2img(_projection.ll2xy(c));
}
Coordinates IMGMap::xy2ll(const QPointF &p)
{
return _projection.xy2ll(_transform.img2proj(p));
}
void IMGMap::ll2xy(QList<MapData::Poly> &polys)
{
for (int i = 0; i < polys.size(); i++) {
MapData::Poly &poly = polys[i];
for (int j = 0; j < poly.points.size(); j++) {
QPointF &p = poly.points[j];
p = ll2xy(Coordinates(p.x(), p.y()));
}
}
}
void IMGMap::ll2xy(QList<MapData::Point> &points)
{
for (int i = 0; i < points.size(); i++) {
QPointF p(ll2xy(points.at(i).coordinates));
points[i].coordinates = Coordinates(p.x(), p.y());
}
}
void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags) void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
{ {
Q_UNUSED(flags); Q_UNUSED(flags);
@ -202,7 +173,6 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
_transform.img2proj(polyRect.bottomRight())); _transform.img2proj(polyRect.bottomRight()));
_data.at(n)->polys(polyRectD.toRectC(_projection, 4), _zoom, _data.at(n)->polys(polyRectD.toRectC(_projection, 4), _zoom,
&polygons, &lines); &polygons, &lines);
ll2xy(polygons); ll2xy(lines);
QRectF pointRect(QPointF(ttl.x() - TEXT_EXTENT, QRectF pointRect(QPointF(ttl.x() - TEXT_EXTENT,
ttl.y() - TEXT_EXTENT), QPointF(ttl.x() + TILE_SIZE ttl.y() - TEXT_EXTENT), QPointF(ttl.x() + TILE_SIZE
@ -212,9 +182,8 @@ void IMGMap::draw(QPainter *painter, const QRectF &rect, Flags flags)
_transform.img2proj(pointRect.bottomRight())); _transform.img2proj(pointRect.bottomRight()));
_data.at(n)->points(pointRectD.toRectC(_projection, 4), _data.at(n)->points(pointRectD.toRectC(_projection, 4),
_zoom, &points); _zoom, &points);
ll2xy(points);
tiles.append(RasterTile(_data.at(n)->style(), _zoom, tiles.append(RasterTile(this, _data.at(n)->style(), _zoom,
QRect(ttl, QSize(TILE_SIZE, TILE_SIZE)), key, polygons, QRect(ttl, QSize(TILE_SIZE, TILE_SIZE)), key, polygons,
lines, points)); lines, points));
} }

View File

@ -19,14 +19,16 @@ public:
QRectF bounds() {return _bounds;} QRectF bounds() {return _bounds;}
virtual int zoom() const {return _zoom;} int zoom() const {return _zoom;}
virtual void setZoom(int zoom); void setZoom(int zoom);
virtual int zoomFit(const QSize &, const RectC &); int zoomFit(const QSize &, const RectC &);
virtual int zoomIn(); int zoomIn();
virtual int zoomOut(); int zoomOut();
QPointF ll2xy(const Coordinates &c); QPointF ll2xy(const Coordinates &c)
Coordinates xy2ll(const QPointF &p); {return _transform.proj2img(_projection.ll2xy(c));}
Coordinates xy2ll(const QPointF &p)
{return _projection.xy2ll(_transform.img2proj(p));}
void draw(QPainter *painter, const QRectF &rect, Flags flags); void draw(QPainter *painter, const QRectF &rect, Flags flags);
@ -39,8 +41,6 @@ public:
QString errorString() const {return _errorString;} QString errorString() const {return _errorString;}
private: private:
void ll2xy(QList<MapData::Poly> &polys);
void ll2xy(QList<MapData::Point> &points);
Transform transform(int zoom) const; Transform transform(int zoom) const;
void updateTransform(); void updateTransform();