0,0 → 1,154 |
/* |
* |
* 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/ |
* |
*/ |
|
#ifndef GEOMETRY_H |
#define GEOMETRY_H |
#include <QObject> |
#include <QPainter> |
#include <QDebug> |
#include "mapadapter.h" |
|
namespace qmapcontrol |
{ |
class Point; |
//! Main class for objects that should be painted in maps |
/*! |
* Geometry is the root class of the hierarchy. Geometry is an abstract (non-instantiable) class. |
* |
* This class and the derived classes Point, Curve and LineString are leant on the Simple |
* Feature Specification of the Open Geospatial Consortium. |
* @see www.opengeospatial.com |
* |
* @author Kai Winter <kaiwinter@gmx.de> |
*/ |
class Geometry : public QObject |
{ |
friend class LineString; |
Q_OBJECT |
public: |
explicit Geometry(QString name = QString()); |
virtual ~Geometry(); |
|
QString GeometryType; |
|
//! |
/*! returns true if the given Geometry is equal to this Geometry |
* not implemented yet! |
* @param geom The Geometry to be tested |
* @return true if the given Geometry is equal to this |
*/ |
bool Equals(Geometry* geom); |
|
//! returns a String representation of this Geometry |
/*! |
* not implemented yet! |
* @return a String representation of this Geometry |
*/ |
QString toString(); |
|
//! returns the name of this Geometry |
/*! |
* @return the name of this Geometry |
*/ |
QString name() const; |
|
//! returns the parent Geometry of this Geometry |
/*! |
* A LineString is a composition of many Points. This methods returns the parent (the LineString) of a Point |
* @return the parent Geometry of this Geometry |
*/ |
Geometry* parentGeometry() const; |
|
//! returns true if this Geometry is visible |
/*! |
* @return true if this Geometry is visible |
*/ |
bool isVisible() const; |
|
//! sets the name of the geometry |
/*! |
* @param name the new name of the geometry |
*/ |
void setName(QString name); |
|
//! returns the QPen which is used on drawing |
/*! |
* The pen is set depending on the Geometry. A CirclePoint for example takes one with the constructor. |
* @return the QPen which is used for drawing |
*/ |
QPen* pen() const; |
|
//! returns the BoundingBox |
/*! |
* The bounding box in world coordinates |
* @return the BoundingBox |
*/ |
virtual QRectF boundingBox()=0; |
virtual bool Touches(Point* geom, const MapAdapter* mapadapter)=0; |
virtual void draw(QPainter* painter, const MapAdapter* mapadapter, const QRect &viewport, const QPoint offset)=0; |
virtual bool hasPoints() const; |
virtual bool hasClickedPoints() const; |
virtual void setPen(QPen* pen); |
virtual QList<Geometry*> clickedPoints(); |
virtual QList<Point*> points()=0; |
|
private: |
Geometry* myparentGeometry; |
Geometry(const Geometry& old); |
Geometry& operator=(const Geometry& rhs); |
|
protected: |
QPen* mypen; |
bool visible; |
QString myname; |
void setParentGeometry(Geometry* geom); |
|
signals: |
void updateRequest(Geometry* geom); |
void updateRequest(QRectF rect); |
//! This signal is emitted when a Geometry is clicked |
/*! |
* A Geometry is clickable, if the containing layer is clickable. |
* The objects emits a signal if it gets clicked |
* @param geometry The clicked Geometry |
* @param point -unused- |
*/ |
void geometryClicked(Geometry* geometry, QPoint point); |
|
//! A Geometry emits this signal, when its position gets changed |
/*! |
* @param geom the Geometry |
*/ |
void positionChanged(Geometry* geom); |
|
public slots: |
//! if visible is true, the layer is made visible |
/*! |
* @param visible if the layer should be visible |
*/ |
virtual void setVisible(bool visible); |
}; |
} |
#endif |