From e63bb1422e0faf1f5a6cf30e34dd13230d2b9a02 Mon Sep 17 00:00:00 2001 From: Valentin Platzgummer Date: Mon, 8 Jul 2019 13:51:13 +0200 Subject: [PATCH] about to add SphericalGeometryCalculus class --- qgroundcontrol.pro | 6 ++- src/FlightDisplay/FlightDisplayViewMap.qml | 5 +- src/Wima/SphericalGeometryCalculus.cc | 6 +++ src/Wima/SphericalGeometryCalculus.h | 17 +++++++ src/Wima/WimaArea.h | 4 +- src/Wima/WimaAreaData.cc | 53 +++++----------------- src/Wima/WimaAreaData.h | 2 + src/Wima/WimaController.cc | 38 +++++++--------- src/Wima/WimaController.h | 2 +- src/Wima/WimaCorridorData.cpp | 14 +++++- src/Wima/WimaCorridorData.h | 4 ++ src/Wima/WimaJoinedAreaData.cc | 15 +++++- src/Wima/WimaJoinedAreaData.h | 4 ++ src/Wima/WimaMeasurementAreaData.cc | 16 ++++++- src/Wima/WimaMeasurementAreaData.h | 4 ++ src/Wima/WimaPlanData.cc | 6 +-- src/Wima/WimaPlanData.h | 5 +- src/Wima/WimaPlaner.cc | 2 +- src/Wima/WimaServiceAreaData.cc | 22 ++++++--- src/Wima/WimaServiceAreaData.h | 3 ++ 20 files changed, 142 insertions(+), 86 deletions(-) create mode 100644 src/Wima/SphericalGeometryCalculus.cc create mode 100644 src/Wima/SphericalGeometryCalculus.h diff --git a/qgroundcontrol.pro b/qgroundcontrol.pro index f495fb24d..c04f6f32d 100644 --- a/qgroundcontrol.pro +++ b/qgroundcontrol.pro @@ -423,7 +423,8 @@ HEADERS += \ src/Wima/WimaMeasurementAreaData.h \ src/Wima/WimaPlanData.h \ src/Wima/WimaJoinedArea.h \ - src/Wima/WimaJoinedAreaData.h + src/Wima/WimaJoinedAreaData.h \ + src/Wima/SphericalGeometryCalculus.h SOURCES += \ src/api/QGCCorePlugin.cc \ src/api/QGCOptions.cc \ @@ -445,7 +446,8 @@ SOURCES += \ src/Wima/WimaPlanData.cc \ src/Wima/WimaMeasurementAreaData.cc \ src/Wima/WimaJoinedArea.cc \ - src/Wima/WimaJoinedAreaData.cc + src/Wima/WimaJoinedAreaData.cc \ + src/Wima/SphericalGeometryCalculus.cc # # Unit Test specific configuration goes here (requires full debug build with all plugins) diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index 8b8cdb543..8cfb22f49 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -200,7 +200,10 @@ FlightMap { delegate: MapPolygon{ path: object.path; border.color: "black" - color: "green" + color: object.type === "WimaJoinedAreaData" ? "gray" + : object.type === "WimaServiceAreaData" ? "yellow" + : object.type === "WimaMeasurementAreaData" ? "green" + : "transparent" opacity: 0.25 z: QGroundControl.zOrderTrajectoryLines-1 } diff --git a/src/Wima/SphericalGeometryCalculus.cc b/src/Wima/SphericalGeometryCalculus.cc new file mode 100644 index 000000000..97a5b5382 --- /dev/null +++ b/src/Wima/SphericalGeometryCalculus.cc @@ -0,0 +1,6 @@ +#include "SphericalGeometryCalculus.h" + +SphericalGeometryCalculus::SphericalGeometryCalculus(QObject *parent) : QObject(parent) +{ + +} diff --git a/src/Wima/SphericalGeometryCalculus.h b/src/Wima/SphericalGeometryCalculus.h new file mode 100644 index 000000000..3139352e4 --- /dev/null +++ b/src/Wima/SphericalGeometryCalculus.h @@ -0,0 +1,17 @@ +#ifndef SPHERICALGEOMETRYCALCULUS_H +#define SPHERICALGEOMETRYCALCULUS_H + +#include + +class SphericalGeometryCalculus : public QObject +{ + Q_OBJECT +public: + explicit SphericalGeometryCalculus(QObject *parent = nullptr); + +signals: + +public slots: +}; + +#endif // SPHERICALGEOMETRYCALCULUS_H \ No newline at end of file diff --git a/src/Wima/WimaArea.h b/src/Wima/WimaArea.h index 60e099663..f0adc793f 100644 --- a/src/Wima/WimaArea.h +++ b/src/Wima/WimaArea.h @@ -28,8 +28,8 @@ public: double maxAltitude (void) const { return _maxAltitude;} // overrides from WimaArea - virtual QString mapVisualQML (void) const; - virtual QString editorQML (void) const; + virtual QString mapVisualQML (void) const { return ""; } + virtual QString editorQML (void) const { return ""; } // Member Methodes int getClosestVertexIndex (const QGeoCoordinate& coordinate) const; diff --git a/src/Wima/WimaAreaData.cc b/src/Wima/WimaAreaData.cc index 371cc627f..e8c8b686f 100644 --- a/src/Wima/WimaAreaData.cc +++ b/src/Wima/WimaAreaData.cc @@ -6,47 +6,6 @@ WimaAreaData::WimaAreaData(QObject *parent) _maxAltitude = 0; } -WimaAreaData::WimaAreaData(const WimaAreaData &other, QObject *parent) - : QObject (parent) -{ - *this = other; -} - -WimaAreaData::WimaAreaData(const WimaArea &other, QObject *parent) - : QObject (parent) -{ - *this = other; -} - -/*! - * \fn WimaAreaData &WimaAreaData::operator=(const WimaAreaData &otherData) - * - * Copies the maximum altitude and the path of the \c WimaAreaData \a otherData to the calling object. - * Returns a reference to the calling object. - */ -WimaAreaData &WimaAreaData::operator=(const WimaAreaData &otherData) -{ - setMaxAltitude(otherData.maxAltitude()); - setPath(otherData.path()); - - return *this; -} - -/*! - * \overload operator=() - * - * Copies the maximum altitude and the path of \c WimaArea \a otherArea to the calling object. - * Returns a reference to the calling object. - */ -WimaAreaData &WimaAreaData::operator=(const WimaArea &otherArea) -{ - setMaxAltitude(otherArea.maxAltitude()); - setPath(otherArea.coordinateList()); - - return *this; -} - - /*! * \fn double WimaAreaData::maxAltitude() * @@ -88,9 +47,21 @@ void WimaAreaData::setPath(const QVariantList &coordinateList) _path.append(coordinateList); } +/*! + * \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()); +} +void WimaAreaData::assign(const WimaArea &other) +{ + setMaxAltitude(other.maxAltitude()); + setPath(other.path()); } diff --git a/src/Wima/WimaAreaData.h b/src/Wima/WimaAreaData.h index 62699edc8..79231757a 100644 --- a/src/Wima/WimaAreaData.h +++ b/src/Wima/WimaAreaData.h @@ -12,6 +12,7 @@ class WimaAreaData : public QObject // Abstract class for all WimaAreaData deriv public: Q_PROPERTY(const QVariantList path READ path NOTIFY pathChanged) + Q_PROPERTY(QString type READ type CONSTANT) WimaAreaData(QObject *parent = nullptr); //WimaAreaData(const WimaAreaData &other, QObject *parent = nullptr); @@ -35,6 +36,7 @@ public slots: protected: void assign(const WimaAreaData &other); + void assign(const WimaArea &other); private: // Member Functions diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index 31c989061..1d2ed915a 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -145,6 +145,7 @@ void WimaController::containerDataValidChanged(bool valid) qWarning("WimaController::containerDataValidChanged(): No container assigned!"); } _localPlanDataValid = false; + _visualItems.clear(); WimaPlanData planData = _container->pull(); // extract list with WimaAreas @@ -152,58 +153,53 @@ void WimaController::containerDataValidChanged(bool valid) int areaCounter = 0; int numAreas = 4; // extract only numAreas Areas, if there are more they are invalid and ignored - bool joinedAreaAssigned = false; qWarning() << QString("List Size: %1").arg(areaList.size()); for (int i = 0; i < areaList.size(); i++) { const WimaAreaData *areaData = areaList[i]; qWarning() << areaData->type(); if (areaData->type() == WimaServiceAreaData::typeString) { // is it a service area? - //_serviceArea = *qobject_cast(areaData); + _serviceArea = *qobject_cast(areaData); qWarning("Service area, wuhuuu!"); areaCounter++; + _visualItems.append(&_serviceArea); continue; } - /*WimaMeasurementAreaData *measurementAreaData = qobject_cast(areaData); - if (measurementAreaData != nullptr) { // is it a measurement area? - _measurementArea = *measurementAreaData; + if (areaData->type() == WimaMeasurementAreaData::typeString) { // is it a measurement area? + _measurementArea = *qobject_cast(areaData); qWarning("Measurement area, wuhuuu!"); areaCounter++; + _visualItems.append(&_measurementArea); continue; } - WimaCorridorData *corridorAreaData = qobject_cast(areaData); - if (corridorAreaData != nullptr) { // is it a corridor? - _corridor = *corridorAreaData; - qWarning("Corridor, wuhuuu!"); + if (areaData->type() == WimaCorridorData::typeString) { // is it a corridor? + _corridor = *qobject_cast(areaData); + qWarning("WimaCorridorData, wuhuuu!"); areaCounter++; + //_visualItems.append(&_corridor); // not needed continue; } - if (!joinedAreaAssigned) { // first WimaAreaData object is assumed to be the joined Area - _joinedArea = *areaData; - qWarning("Joined area, wuhuuu!"); + if (areaData->type() == WimaJoinedAreaData::typeString) { // is it a corridor? + _joinedArea = *qobject_cast(areaData); + qWarning("WimaJoinedAreaData, wuhuuu!"); areaCounter++; - joinedAreaAssigned = true; + _visualItems.append(&_joinedArea); continue; - }*/ + } if (areaCounter >= numAreas) break; } - // append areas to _visualItems, don't append _corridor, it's not necessary to display it in flyView - _visualItems.clear(); - //_visualItems.append(&_measurementArea); - //_visualItems.append(&_serviceArea); - _visualItems.append(&_joinedArea); - - _localPlanDataValid = true; + if (areaCounter == numAreas) + _localPlanDataValid = true; } else { _localPlanDataValid = false; _visualItems.clear(); diff --git a/src/Wima/WimaController.h b/src/Wima/WimaController.h index 92f81ae30..38b4e0aec 100644 --- a/src/Wima/WimaController.h +++ b/src/Wima/WimaController.h @@ -98,7 +98,7 @@ private: QString _currentFile; // file for saveing WimaDataContainer *_container; // container for data exchange with WimaController QmlObjectListModel _visualItems; // contains all visible areas - WimaAreaData _joinedArea; // joined area fromed by opArea, serArea, _corridor + WimaJoinedAreaData _joinedArea; // joined area fromed by opArea, serArea, _corridor WimaMeasurementAreaData _measurementArea; // measurement area WimaServiceAreaData _serviceArea; // area for supplying WimaCorridorData _corridor; // corridor connecting opArea and serArea diff --git a/src/Wima/WimaCorridorData.cpp b/src/Wima/WimaCorridorData.cpp index 915c39bad..7d64e4eb4 100644 --- a/src/Wima/WimaCorridorData.cpp +++ b/src/Wima/WimaCorridorData.cpp @@ -27,7 +27,7 @@ WimaCorridorData::WimaCorridorData(const WimaCorridor &other, QObject *parent) */ WimaCorridorData &WimaCorridorData::operator=(const WimaCorridorData &other) { - WimaAreaData::operator=(other); + this->assign(other); return *this; } @@ -39,7 +39,7 @@ WimaCorridorData &WimaCorridorData::operator=(const WimaCorridorData &other) */ WimaCorridorData &WimaCorridorData::operator=(const WimaCorridor &other) { - WimaAreaData::operator=(other); + this->assign(other); return *this; } @@ -49,6 +49,16 @@ QString WimaCorridorData::type() const return this->typeString; } +void WimaCorridorData::assign(const WimaCorridorData &corridorData) +{ + WimaAreaData::assign(corridorData); +} + +void WimaCorridorData::assign(const WimaCorridor &corridor) +{ + WimaAreaData::assign(corridor); +} + /*! * \class WimaAreaData::WimaCorridorData diff --git a/src/Wima/WimaCorridorData.h b/src/Wima/WimaCorridorData.h index 634b73562..e24fb3e26 100644 --- a/src/Wima/WimaCorridorData.h +++ b/src/Wima/WimaCorridorData.h @@ -27,6 +27,10 @@ signals: public slots: +protected: + void assign(const WimaCorridorData &corridorData); + void assign(const WimaCorridor &corridor); + private: }; diff --git a/src/Wima/WimaJoinedAreaData.cc b/src/Wima/WimaJoinedAreaData.cc index 309e4c010..1a7b7f0b2 100644 --- a/src/Wima/WimaJoinedAreaData.cc +++ b/src/Wima/WimaJoinedAreaData.cc @@ -27,7 +27,7 @@ WimaJoinedAreaData::WimaJoinedAreaData(const WimaJoinedArea &other, QObject *par */ WimaJoinedAreaData &WimaJoinedAreaData::operator=(const WimaJoinedAreaData &other) { - WimaAreaData::operator=(other); + assign(other); return *this; } @@ -39,7 +39,7 @@ WimaJoinedAreaData &WimaJoinedAreaData::operator=(const WimaJoinedAreaData &othe */ WimaJoinedAreaData &WimaJoinedAreaData::operator=(const WimaJoinedArea &other) { - WimaAreaData::operator=(other); + assign(other); return *this; } @@ -48,6 +48,17 @@ QString WimaJoinedAreaData::type() const return this->typeString; } +void WimaJoinedAreaData::assign(const WimaJoinedAreaData &other) +{ + WimaAreaData::assign(other); +} + +void WimaJoinedAreaData::assign(const WimaJoinedArea &other) +{ + WimaAreaData::assign(other); +} + + /*! * \class WimaAreaData::WimaJoinedAreaData diff --git a/src/Wima/WimaJoinedAreaData.h b/src/Wima/WimaJoinedAreaData.h index 1ef83dcfb..c31108cd6 100644 --- a/src/Wima/WimaJoinedAreaData.h +++ b/src/Wima/WimaJoinedAreaData.h @@ -26,6 +26,10 @@ signals: public slots: +protected: + void assign(const WimaJoinedAreaData &other); + void assign(const WimaJoinedArea &other); + private: }; diff --git a/src/Wima/WimaMeasurementAreaData.cc b/src/Wima/WimaMeasurementAreaData.cc index 9d5b9e007..a9de85cfb 100644 --- a/src/Wima/WimaMeasurementAreaData.cc +++ b/src/Wima/WimaMeasurementAreaData.cc @@ -27,7 +27,7 @@ WimaMeasurementAreaData::WimaMeasurementAreaData(const WimaMeasurementArea &othe */ WimaMeasurementAreaData &WimaMeasurementAreaData::operator=(const WimaMeasurementAreaData &other) { - WimaAreaData::operator=(other); + assign(other); return *this; } @@ -39,7 +39,7 @@ WimaMeasurementAreaData &WimaMeasurementAreaData::operator=(const WimaMeasuremen */ WimaMeasurementAreaData &WimaMeasurementAreaData::operator=(const WimaMeasurementArea &other) { - WimaAreaData::operator=(other); + assign(other); return *this; } @@ -49,4 +49,16 @@ QString WimaMeasurementAreaData::type() const return this->typeString; } +void WimaMeasurementAreaData::assign(const WimaMeasurementAreaData &other) +{ + WimaAreaData::assign(other); +} + +void WimaMeasurementAreaData::assign(const WimaMeasurementArea &other) +{ + WimaAreaData::assign(other); +} + + + diff --git a/src/Wima/WimaMeasurementAreaData.h b/src/Wima/WimaMeasurementAreaData.h index fb6c81814..af83e8645 100644 --- a/src/Wima/WimaMeasurementAreaData.h +++ b/src/Wima/WimaMeasurementAreaData.h @@ -28,6 +28,10 @@ signals: public slots: +protected: + void assign(const WimaMeasurementAreaData &other); + void assign(const WimaMeasurementArea &other); + private: // see WimaMeasurementArea.h for explanation }; diff --git a/src/Wima/WimaPlanData.cc b/src/Wima/WimaPlanData.cc index acb52193d..5e254214c 100644 --- a/src/Wima/WimaPlanData.cc +++ b/src/Wima/WimaPlanData.cc @@ -24,8 +24,8 @@ WimaPlanData &WimaPlanData::operator=(const WimaPlanData &other) _areaList.clear(); for (int i = 0; i < areaList.size(); i++) { const WimaAreaData *areaData = areaList[i]; - if (areaData->type() == WimaAreaData::typeString) { - this->append(*areaData); + if (areaData->type() == WimaJoinedAreaData::typeString) { + this->append(*qobject_cast(areaData)); }else if (areaData->type() == WimaServiceAreaData::typeString) { this->append(*qobject_cast(areaData)); }else if (areaData->type() == WimaMeasurementAreaData::typeString) { @@ -44,7 +44,7 @@ WimaPlanData &WimaPlanData::operator=(const WimaPlanData &other) * * Adds a WimaAreaData item. */ -void WimaPlanData::append(const WimaAreaData &areaData) +void WimaPlanData::append(const WimaJoinedAreaData &areaData) { _joinedArea = areaData; diff --git a/src/Wima/WimaPlanData.h b/src/Wima/WimaPlanData.h index 5fb0a3335..d59fea368 100644 --- a/src/Wima/WimaPlanData.h +++ b/src/Wima/WimaPlanData.h @@ -6,6 +6,7 @@ #include "WimaServiceAreaData.h" #include "WimaCorridorData.h" #include "WimaMeasurementAreaData.h" +#include "WimaJoinedAreaData.h" class WimaPlanData : QObject { @@ -16,7 +17,7 @@ public: WimaPlanData& operator=(const WimaPlanData &other); // Member Methodes - void append(const WimaAreaData &areaData); + void append(const WimaJoinedAreaData &areaData); void append(const WimaServiceAreaData &areaData); void append(const WimaCorridorData &areaData); void append(const WimaMeasurementAreaData &areaData); @@ -30,7 +31,7 @@ signals: void areaListChanged(); private: - WimaAreaData _joinedArea; + WimaJoinedAreaData _joinedArea; WimaServiceAreaData _serviceArea; WimaCorridorData _corridor; WimaMeasurementAreaData _measurementArea; diff --git a/src/Wima/WimaPlaner.cc b/src/Wima/WimaPlaner.cc index e10749c7f..11f960972 100644 --- a/src/Wima/WimaPlaner.cc +++ b/src/Wima/WimaPlaner.cc @@ -516,7 +516,7 @@ bool WimaPlaner::recalcJoinedArea(QString &errorString) } // join service area, op area and corridor - _joinedArea.WimaArea::operator=(_serviceArea); + _joinedArea.setPath(_serviceArea.path()); _joinedArea.join(_corridor); if ( !_joinedArea.join(_measurementArea) ) { errorString.append(tr("Not able to join areas. Service area and measurement are" diff --git a/src/Wima/WimaServiceAreaData.cc b/src/Wima/WimaServiceAreaData.cc index 1e6f66f97..c30da881e 100644 --- a/src/Wima/WimaServiceAreaData.cc +++ b/src/Wima/WimaServiceAreaData.cc @@ -23,18 +23,14 @@ WimaServiceAreaData::WimaServiceAreaData(const WimaServiceArea &other, QObject * WimaServiceAreaData &WimaServiceAreaData::operator=(const WimaServiceAreaData &otherData) { - WimaAreaData::operator=(otherData); - setLandPosition(otherData.landPosition()); - setTakeOffPosition(otherData.takeOffPosition()); + this->assign(otherData); return *this; } WimaServiceAreaData &WimaServiceAreaData::operator=(const WimaServiceArea &otherArea) { - WimaAreaData::operator=(otherArea); - setLandPosition(otherArea.landPosition()); - setTakeOffPosition(otherArea.takeOffPosition()); + this->assign(otherArea); return *this; } @@ -93,6 +89,20 @@ void WimaServiceAreaData::setLandPosition(const QGeoCoordinate &newCoordinate) } } +void WimaServiceAreaData::assign(const WimaServiceAreaData &other) +{ + WimaAreaData::assign(other); + setLandPosition(other.landPosition()); + setTakeOffPosition(other.takeOffPosition()); +} + +void WimaServiceAreaData::assign(const WimaServiceArea &other) +{ + WimaAreaData::assign(other); + setLandPosition(other.landPosition()); + setTakeOffPosition(other.takeOffPosition()); +} + /*! * \class WimaAreaData::WimaServiceAreaData diff --git a/src/Wima/WimaServiceAreaData.h b/src/Wima/WimaServiceAreaData.h index c6e91a7b2..1529d9fb8 100644 --- a/src/Wima/WimaServiceAreaData.h +++ b/src/Wima/WimaServiceAreaData.h @@ -34,6 +34,9 @@ public slots: void setTakeOffPosition(const QGeoCoordinate& newCoordinate); void setLandPosition(const QGeoCoordinate& newCoordinate); +protected: + void assign(const WimaServiceAreaData &other); + void assign(const WimaServiceArea &other); private: // see WimaServieArea.h for explanation QGeoCoordinate _takeOffPosition; -- 2.22.0