/* * * 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 . * * 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 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 LineString::points() { return vertices; } void LineString::setPoints(QList points) { for (int i=0; isetParentGeometry(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; icoordinate(); 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; idraw(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; iTouches(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 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; ilongitude() < 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); } }