Newer
Older
#include "Vehicle.h"
#include "qobject.h"
#include "WimaVehicle.h"
#include "WimaArea.h"
#include <QLineF>
#include <QPointF>
#include "QGCGeo.h"
#include "GeoUtilities.h"
#include "PolygonCalculus.h"
Valentin Platzgummer
committed
#include "PlanimetryCalculus.h"
class WimaArea : public QGCMapPolygon //abstract base class for all WimaAreas
WimaArea(QObject* parent = nullptr);
WimaArea(const WimaArea& other, QObject* parent = nullptr);
Valentin Platzgummer
committed
WimaArea &operator=(const WimaArea &other);
Q_PROPERTY(double maxAltitude READ maxAltitude WRITE setMaxAltitude NOTIFY maxAltitudeChanged)
Q_PROPERTY(QString mapVisualQML READ mapVisualQML CONSTANT)
Q_PROPERTY(QString editorQML READ editorQML CONSTANT)
Q_PROPERTY(Fact* borderPolygonOffset READ borderPolygonOffsetFact CONSTANT)
Q_PROPERTY(QGCMapPolygon* borderPolygon READ borderPolygon NOTIFY borderPolygonChanged)
Q_PROPERTY(Fact* showBorderPolygon READ showBorderPolygon CONSTANT)
Q_PROPERTY(bool wimaAreaInteractive READ wimaAreaInteractive WRITE setWimaAreaInteractive NOTIFY wimaAreaInteractiveChanged)
double maxAltitude (void) const { return _maxAltitude;}
Fact* borderPolygonOffsetFact (void) { return &_borderPolygonOffset;}
Fact* showBorderPolygon (void) { return &_showBorderPolygon;}
double borderPolygonOffset (void) const { return _borderPolygonOffset.rawValue().toDouble();}
QGCMapPolygon* borderPolygon (void) { return &_borderPolygon;}
bool wimaAreaInteractive (void) const { return _wimaAreaInteractive;}
void setWimaAreaInteractive (bool interactive);
Valentin Platzgummer
committed
// overrides from WimaArea
virtual QString mapVisualQML (void) const { return ""; }
virtual QString editorQML (void) const { return ""; }
Valentin Platzgummer
committed
int getClosestVertexIndex (const QGeoCoordinate& coordinate) const;
QGeoCoordinate getClosestVertex (const QGeoCoordinate& coordinate) const;
QGCMapPolygon toQGCPolygon () const;
Valentin Platzgummer
committed
bool join (WimaArea &area, QString &errorString);
Valentin Platzgummer
committed
int nextVertexIndex (int index) const;
int previousVertexIndex (int index) const;
Valentin Platzgummer
committed
bool isSimplePolygon () const;
bool containsCoordinate (const QGeoCoordinate &coordinate) const;
Valentin Platzgummer
committed
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 (const WimaArea &area1, const WimaArea &area2, WimaArea& joinedArea);
Valentin Platzgummer
committed
// Friends
friend void print(const WimaArea& area, QString& outputString);
friend void print(const WimaArea& area);
// Accurracy used to compute isDisjunct
Valentin Platzgummer
committed
static const double epsilonMeter;
static const char* maxAltitudeName;
static const char* wimaAreaName;
static const char* areaTypeName;
static const char* borderPolygonOffsetName;
static const char* showBorderPolygonName;
void borderPolygonChanged (void);
void borderPolygonOffsetChanged (void);
Valentin Platzgummer
committed
public slots:
void setMaxAltitude (double altitude);
void setShowBorderPolygon (bool showBorderPolygon);
void setBorderPolygonOffset (double offset);
void recalcPolygons (void);
void updatePolygonConnections (QVariant value);
void recalcInteractivity (void);
private:
void init();
double _maxAltitude;
QMap<QString, FactMetaData*> _metaDataMap;
SettingsFact _borderPolygonOffset;
SettingsFact _showBorderPolygon;
QGCMapPolygon _borderPolygon;