mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 03:35:53 +01:00
Use a cleaner vector/raster layer filtering code
This commit is contained in:
parent
d412390c75
commit
344e665bed
@ -114,11 +114,8 @@ const QFont *RasterTile::poiFont(Style::FontSize size, int zoom,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterTile::ll2xy(QList<MapData::Poly> &polys, bool polygons) const
|
void RasterTile::ll2xy(QList<MapData::Poly> &polys) const
|
||||||
{
|
{
|
||||||
if (!_vectors && !polygons)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i = 0; i < polys.size(); i++) {
|
for (int i = 0; i < polys.size(); i++) {
|
||||||
MapData::Poly &poly = polys[i];
|
MapData::Poly &poly = polys[i];
|
||||||
for (int j = 0; j < poly.points.size(); j++) {
|
for (int j = 0; j < poly.points.size(); j++) {
|
||||||
@ -130,9 +127,6 @@ void RasterTile::ll2xy(QList<MapData::Poly> &polys, bool polygons) const
|
|||||||
|
|
||||||
void RasterTile::ll2xy(QList<MapData::Point> &points) const
|
void RasterTile::ll2xy(QList<MapData::Point> &points) const
|
||||||
{
|
{
|
||||||
if (!_vectors)
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (int i = 0; i < points.size(); i++) {
|
for (int i = 0; i < points.size(); i++) {
|
||||||
QPointF p(ll2xy(points.at(i).coordinates));
|
QPointF p(ll2xy(points.at(i).coordinates));
|
||||||
points[i].coordinates = Coordinates(p.x(), p.y());
|
points[i].coordinates = Coordinates(p.x(), p.y());
|
||||||
@ -198,9 +192,6 @@ void RasterTile::drawPolygons(QPainter *painter,
|
|||||||
void RasterTile::drawLines(QPainter *painter,
|
void RasterTile::drawLines(QPainter *painter,
|
||||||
const QList<MapData::Poly> &lines) const
|
const QList<MapData::Poly> &lines) const
|
||||||
{
|
{
|
||||||
if (!_vectors)
|
|
||||||
return;
|
|
||||||
|
|
||||||
painter->setBrush(Qt::NoBrush);
|
painter->setBrush(Qt::NoBrush);
|
||||||
|
|
||||||
for (int i = 0; i < lines.size(); i++) {
|
for (int i = 0; i < lines.size(); i++) {
|
||||||
@ -290,9 +281,6 @@ void RasterTile::processPolygons(const QList<MapData::Poly> &polygons,
|
|||||||
void RasterTile::processLines(QList<MapData::Poly> &lines,
|
void RasterTile::processLines(QList<MapData::Poly> &lines,
|
||||||
QList<TextItem*> &textItems, const QImage (&arrows)[2])
|
QList<TextItem*> &textItems, const QImage (&arrows)[2])
|
||||||
{
|
{
|
||||||
if (!_vectors)
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::stable_sort(lines.begin(), lines.end());
|
std::stable_sort(lines.begin(), lines.end());
|
||||||
|
|
||||||
if (_zoom >= 22)
|
if (_zoom >= 22)
|
||||||
@ -411,9 +399,6 @@ void RasterTile::processShields(const QList<MapData::Poly> &lines,
|
|||||||
void RasterTile::processPoints(QList<MapData::Point> &points,
|
void RasterTile::processPoints(QList<MapData::Point> &points,
|
||||||
QList<TextItem*> &textItems)
|
QList<TextItem*> &textItems)
|
||||||
{
|
{
|
||||||
if (!_vectors)
|
|
||||||
return;
|
|
||||||
|
|
||||||
std::sort(points.begin(), points.end());
|
std::sort(points.begin(), points.end());
|
||||||
|
|
||||||
for (int i = 0; i < points.size(); i++) {
|
for (int i = 0; i < points.size(); i++) {
|
||||||
@ -462,14 +447,16 @@ void RasterTile::fetchData(QList<MapData::Poly> &polygons,
|
|||||||
RectD polyRectD(_transform.img2proj(polyRect.topLeft()),
|
RectD polyRectD(_transform.img2proj(polyRect.topLeft()),
|
||||||
_transform.img2proj(polyRect.bottomRight()));
|
_transform.img2proj(polyRect.bottomRight()));
|
||||||
_data->polys(polyRectD.toRectC(_proj, 20), _zoom,
|
_data->polys(polyRectD.toRectC(_proj, 20), _zoom,
|
||||||
&polygons, &lines);
|
&polygons, _vectors ? &lines : 0);
|
||||||
|
|
||||||
QRectF pointRect(QPointF(ttl.x() - TEXT_EXTENT, ttl.y() - TEXT_EXTENT),
|
if (_vectors) {
|
||||||
QPointF(ttl.x() + _rect.width() + TEXT_EXTENT, ttl.y() + _rect.height()
|
QRectF pointRect(QPointF(ttl.x() - TEXT_EXTENT, ttl.y() - TEXT_EXTENT),
|
||||||
+ TEXT_EXTENT));
|
QPointF(ttl.x() + _rect.width() + TEXT_EXTENT, ttl.y() + _rect.height()
|
||||||
RectD pointRectD(_transform.img2proj(pointRect.topLeft()),
|
+ TEXT_EXTENT));
|
||||||
_transform.img2proj(pointRect.bottomRight()));
|
RectD pointRectD(_transform.img2proj(pointRect.topLeft()),
|
||||||
_data->points(pointRectD.toRectC(_proj, 20), _zoom, &points);
|
_transform.img2proj(pointRect.bottomRight()));
|
||||||
|
_data->points(pointRectD.toRectC(_proj, 20), _zoom, &points);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MatrixD RasterTile::elevation(int extend) const
|
MatrixD RasterTile::elevation(int extend) const
|
||||||
@ -540,8 +527,8 @@ void RasterTile::render()
|
|||||||
arrows[WATER] = HIDPI_IMG(":/map", "water-arrow", _ratio);
|
arrows[WATER] = HIDPI_IMG(":/map", "water-arrow", _ratio);
|
||||||
|
|
||||||
fetchData(polygons, lines, points);
|
fetchData(polygons, lines, points);
|
||||||
ll2xy(polygons, true);
|
ll2xy(polygons);
|
||||||
ll2xy(lines, false);
|
ll2xy(lines);
|
||||||
ll2xy(points);
|
ll2xy(points);
|
||||||
|
|
||||||
processPoints(points, textItems);
|
processPoints(points, textItems);
|
||||||
|
@ -54,7 +54,7 @@ private:
|
|||||||
{return _transform.proj2img(_proj.ll2xy(c));}
|
{return _transform.proj2img(_proj.ll2xy(c));}
|
||||||
Coordinates xy2ll(const QPointF &p) const
|
Coordinates xy2ll(const QPointF &p) const
|
||||||
{return _proj.xy2ll(_transform.img2proj(p));}
|
{return _proj.xy2ll(_transform.img2proj(p));}
|
||||||
void ll2xy(QList<MapData::Poly> &polys, bool polygons) const;
|
void ll2xy(QList<MapData::Poly> &polys) const;
|
||||||
void ll2xy(QList<MapData::Point> &points) const;
|
void ll2xy(QList<MapData::Point> &points) const;
|
||||||
|
|
||||||
void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons) const;
|
void drawPolygons(QPainter *painter, const QList<MapData::Poly> &polygons) const;
|
||||||
|
@ -183,12 +183,14 @@ void VectorTile::polys(const RectC &rect, const Zoom &zoom,
|
|||||||
}
|
}
|
||||||
|
|
||||||
copyPolys(rect, &polys->polygons, polygons);
|
copyPolys(rect, &polys->polygons, polygons);
|
||||||
copyPolys(rect, &polys->lines, lines);
|
if (lines)
|
||||||
|
copyPolys(rect, &polys->lines, lines);
|
||||||
|
|
||||||
cache->insert(subdiv, polys);
|
cache->insert(subdiv, polys);
|
||||||
} else {
|
} else {
|
||||||
copyPolys(rect, &polys->polygons, polygons);
|
copyPolys(rect, &polys->polygons, polygons);
|
||||||
copyPolys(rect, &polys->lines, lines);
|
if (lines)
|
||||||
|
copyPolys(rect, &polys->lines, lines);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user