Skip to content
WimaArea.h 2.68 KiB
Newer Older
#pragma once
#include "QGCMapPolygon.h"
#include "QGCMapPolyline.h"
#include "Vehicle.h"
#include "qobject.h"
#include "WimaVehicle.h"
#include "WimaArea.h"
#include <QLineF>
#include <QPointF>
#include "QGCGeo.h"
#include <QPair>
#include "GeoUtilities.h"
#include "PolygonCalculus.h"

class WimaArea : public QGCMapPolygon //abstract base class for all WimaAreas
public:
    WimaArea(QObject* parent = nullptr);
    WimaArea(const WimaArea& other, QObject* parent = nullptr);
    Q_PROPERTY(double   maxAltitude     READ maxAltitude    WRITE setMaxAltitude    NOTIFY maxAltitudeChanged)
    Q_PROPERTY(QString  mapVisualQML    READ mapVisualQML                           CONSTANT)
    Q_PROPERTY(QString  editorQML       READ editorQML                              CONSTANT)

    //Property accessors
    double      maxAltitude         (void) const    { return _maxAltitude;}
    virtual QString                 mapVisualQML    (void) const { return ""; }
    virtual QString                 editorQML       (void) const { return ""; }

    // Member Methodes
    int             getClosestVertexIndex   (const QGeoCoordinate& coordinate) const;
    QGeoCoordinate  getClosestVertex        (const QGeoCoordinate& coordinate) const;
    QGCMapPolygon   toQGCPolygon            () const;
    bool            join                    (WimaArea &area);
    bool            join                    (WimaArea &area, QString &errorString);
    int             nextVertexIndex         (int index) const;
    int             previousVertexIndex     (int index) const;


    void saveToJson     (QJsonObject& jsonObject);
    bool loadFromJson   (const QJsonObject &jsonObject, QString& errorString);

    // static Methodes
    static QGCMapPolygon    toQGCPolygon        (const WimaArea& area);
    static bool             join                (const WimaArea &area1, const WimaArea &area2, WimaArea& joinedArea, QString &errorString);
    static bool             join                (WimaArea &area1, WimaArea &area2, WimaArea& joinedArea);
           bool             isSimplePolygon   ();
    // Friends
    friend void print(const WimaArea& area, QString& outputString);
    friend void print(const WimaArea& area);

    // static Members
    // Accurracy used to compute isDisjunct
    static const char*  maxAltitudeName;
    static const char*  wimaAreaName;
    static const char*  areaTypeName;

signals:
    void    maxAltitudeChanged      (void);

    void        setMaxAltitude     (double altitude);
    double                  _maxAltitude;