| 0,0 → 1,170 |
| /* |
| * |
| * This file is part of QMapControl, |
| * an open-source cross-platform map widget |
| * |
| * Copyright (C) 2007 - 2008 Kai Winter |
| * |
| * This program is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU Lesser General Public License as published by |
| * the Free Software Foundation, either version 3 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public License |
| * along with QMapControl. If not, see <http://www.gnu.org/licenses/>. |
| * |
| * Contact e-mail: kaiwinter@gmx.de |
| * Program URL : http://qmapcontrol.sourceforge.net/ |
| * |
| */ |
| |
| #include "linestring.h" |
| namespace qmapcontrol |
| { |
| LineString::LineString() |
| : Curve() |
| { |
| GeometryType = "LineString"; |
| } |
| |
| LineString::LineString(QList<Point*> const points, QString name, QPen* pen) |
| :Curve(name) |
| { |
| mypen = pen; |
| LineString(); |
| setPoints(points); |
| } |
| |
| LineString::~LineString() |
| { |
| } |
| |
| // Geometry LineString::Clone(){} |
| |
| // Point LineString::EndPoint(){} |
| // Point LineString::StartPoint(){} |
| // Point LineString::Value(){} |
| |
| |
| void LineString::addPoint(Point* point) |
| { |
| vertices.append(point); |
| } |
| |
| QList<Point*> LineString::points() |
| { |
| return vertices; |
| } |
| |
| void LineString::setPoints(QList<Point*> points) |
| { |
| for (int i=0; i<points.size(); i++) |
| { |
| points.at(i)->setParentGeometry(this); |
| } |
| vertices = points; |
| } |
| |
| void LineString::draw(QPainter* painter, const MapAdapter* mapadapter, const QRect &screensize, const QPoint offset) |
| { |
| if (!visible) |
| return; |
| |
| QPolygon p = QPolygon(); |
| |
| QPointF c; |
| for (int i=0; i<vertices.size(); i++) |
| { |
| c = vertices[i]->coordinate(); |
| p.append(mapadapter->coordinateToDisplay(c)); |
| } |
| if (mypen != 0) |
| { |
| painter->save(); |
| painter->setPen(*mypen); |
| } |
| painter->drawPolyline(p); |
| if (mypen != 0) |
| { |
| painter->restore(); |
| } |
| for (int i=0; i<vertices.size(); i++) |
| { |
| vertices[i]->draw(painter, mapadapter, screensize, offset); |
| } |
| } |
| |
| int LineString::numberOfPoints() const |
| { |
| return vertices.count(); |
| } |
| bool LineString::Touches(Point* geom, const MapAdapter* mapadapter) |
| { |
| // qDebug() << "LineString::Touches Point"; |
| touchedPoints.clear(); |
| bool touches = false; |
| for (int i=0; i<vertices.count(); i++) |
| { |
| // use implementation from Point |
| if (vertices.at(i)->Touches(geom, mapadapter)) |
| { |
| touchedPoints.append(vertices.at(i)); |
| |
| touches = true; |
| } |
| } |
| if (touches) |
| { |
| emit(geometryClicked(this, QPoint(0,0))); |
| } |
| return touches; |
| } |
| bool LineString::Touches(Geometry* /*geom*/, const MapAdapter* /*mapadapter*/) |
| { |
| // qDebug() << "LineString::Touches Geom"; |
| touchedPoints.clear(); |
| |
| return false; |
| } |
| |
| QList<Geometry*> LineString::clickedPoints() |
| { |
| return touchedPoints; |
| } |
| bool LineString::hasPoints() const |
| { |
| return vertices.size() > 0 ? true : false; |
| } |
| bool LineString::hasClickedPoints() const |
| { |
| return touchedPoints.size() > 0 ? true : false; |
| } |
| |
| QRectF LineString::boundingBox() |
| { |
| qreal minlon=180; |
| qreal maxlon=-180; |
| qreal minlat=90; |
| qreal maxlat=-90; |
| for (int i=0; i<vertices.size(); i++) |
| { |
| Point* tmp = vertices.at(i); |
| if (tmp->longitude() < minlon) minlon = tmp->longitude(); |
| if (tmp->longitude() > maxlon) maxlon = tmp->longitude(); |
| if (tmp->latitude() < minlat) minlat = tmp->latitude(); |
| if (tmp->latitude() > maxlat) maxlat = tmp->latitude(); |
| } |
| QPointF min = QPointF(minlon, minlat); |
| QPointF max = QPointF(maxlon, maxlat); |
| QPointF dist = max - min; |
| QSizeF si = QSizeF(dist.x(), dist.y()); |
| |
| return QRectF(min, si); |
| |
| } |
| } |