#include "WimaAreaData.h" WimaAreaData::WimaAreaData(QObject *parent) : QObject(parent) { _maxAltitude = 0; } WimaAreaData::~WimaAreaData() {} /*! * \fn double WimaAreaData::maxAltitude() * * Returns the maximum altitude at which vehicles are allowed to fly. */ double WimaAreaData::maxAltitude() const { return _maxAltitude; } /*! * \fn double WimaAreaData::maxAltitude() * * Returns the path (vertex list defining the \l {Simple Polygon}). */ QVariantList WimaAreaData::path() const { return _path; } QGeoCoordinate WimaAreaData::center() const { return _center; } const QList &WimaAreaData::coordinateList() const { return _list; } bool WimaAreaData::containsCoordinate(const QGeoCoordinate &coordinate) const { using namespace PlanimetryCalculus; using namespace PolygonCalculus; using namespace GeoUtilities; if (_path.size() > 2) { QPolygonF polygon; toCartesianList(this->coordinateList(), coordinate, polygon); return PlanimetryCalculus::contains(polygon, QPointF(0, 0)); } else return false; } void WimaAreaData::append(const QGeoCoordinate &c) { _list.append(c); _path.push_back(QVariant::fromValue(c)); } void WimaAreaData::push_back(const QGeoCoordinate &c) { append(c); } void WimaAreaData::clear() { _list.clear(); _path.clear(); } /*! * \fn void WimaAreaData::setMaxAltitude(double maxAltitude) * * Sets the maximum altitude member to \a maxAltitude and emits the \c * maxAltitudeChanged() signal if \a maxAltitude differs from the members value. */ void WimaAreaData::setMaxAltitude(double maxAltitude) { if (!qFuzzyCompare(_maxAltitude, maxAltitude)) { _maxAltitude = maxAltitude; emit maxAltitudeChanged(_maxAltitude); } } void WimaAreaData::setPath(const QVariantList &coordinateList) { _path = coordinateList; _list.clear(); for (auto variant : coordinateList) { _list.push_back(variant.value()); } } void WimaAreaData::setCenter(const QGeoCoordinate ¢er) { if (_center != center) { _center = center; emit centerChanged(); } } /*! * \fn void WimaAreaData::assign(const WimaAreaData &other) * * Assigns \a other to the invoking object */ void WimaAreaData::assign(const WimaAreaData &other) { setMaxAltitude(other.maxAltitude()); setPath(other.path()); setCenter(other.center()); } void WimaAreaData::assign(const WimaArea &other) { setMaxAltitude(other.maxAltitude()); setPath(other.path()); setCenter(other.center()); } /*! * \fn void WimaAreaData::setPath(const QList &coordinateList) * * Sets the path member to \a coordinateList by copying all entries of \a * coordinateList. Emits the \c pathChanged() signal. */ void WimaAreaData::setPath(const QList &coordinateList) { _list = coordinateList; _path.clear(); // copy all coordinates to _path for (int i = 0; i < coordinateList.size(); i++) { _path.append(QVariant::fromValue(coordinateList.value(i))); } emit pathChanged(_path); } /*! * \class WimaArea::WimaAreaData * \brief Class to store and exchange data of a \c WimaArea Object. * Class to store and exchange data of a \c WimaArea Object. In contrast to \c * WimaArea this class does not uses the QGC Fact System. It is designed to * exchange data between the \c WimaPlaner and the \c WimaController class. And * it is the base class for any derived data objects * * \sa WimaArea */