Commit 1ac83998 authored by Valentin Platzgummer's avatar Valentin Platzgummer

wima planer, cs and cs worker edited

parent 46adaf36
This diff is collapsed.
...@@ -241,7 +241,7 @@ FlightMap { ...@@ -241,7 +241,7 @@ FlightMap {
color: "green" color: "green"
} }
// Add Snake tiles center points to the map // Add Snake tile center points to the map
MapItemView { MapItemView {
property bool _enable: wimaController.enableWimaController.value property bool _enable: wimaController.enableWimaController.value
&& wimaController.enableSnake.value && wimaController.enableSnake.value
...@@ -249,7 +249,7 @@ FlightMap { ...@@ -249,7 +249,7 @@ FlightMap {
delegate: MapCircle{ delegate: MapCircle{
center: modelData center: modelData
border.color: "black" border.color: "transparent"
border.width: 1 border.width: 1
color: getColor(wimaController.nemoProgress[index]) color: getColor(wimaController.nemoProgress[index])
radius: 0.6 radius: 0.6
...@@ -258,7 +258,7 @@ FlightMap { ...@@ -258,7 +258,7 @@ FlightMap {
function getColor(progress) { function getColor(progress) {
if (progress < 50) if (progress < 50)
return "orangered" return "red"
if (progress < 100) if (progress < 100)
return "orange" return "orange"
......
This diff is collapsed.
#pragma once #pragma once
#include <QGeoCoordinate> #include <QGeoCoordinate>
#include <QList>
#include <QSharedPointer> #include <QSharedPointer>
#include <QThread> #include <QThread>
#include "snake.h" #include "snake.h"
#include <atomic> #include <atomic>
#include <condition_variable> #include <condition_variable>
#include <functional>
#include <mutex> #include <mutex>
struct RoutingData {
snake::BoostLineString route;
snake::Transects transects;
std::vector<snake::TransectInfo> transectsInfo;
};
//! //!
//! \brief The CSWorker class //! \brief The CSWorker class
//! \note Don't call QThread::start, QThread::quit, etc. onyl use Worker //! \note Don't call QThread::start, QThread::quit, etc. onyl use Worker
//! members! //! members!
class CSWorker : public QThread { class RoutingWorker : public QThread {
Q_OBJECT Q_OBJECT
using Lock = std::unique_lock<std::mutex>; using Lock = std::unique_lock<std::mutex>;
public: public:
using Route = QList<QGeoCoordinate>; using PtrRoutingData = QSharedPointer<RoutingData>;
using PtrRoute = QSharedPointer<Route>; using Generator = std::function<bool(snake::Transects &)>;
CSWorker(QObject *parent = nullptr); RoutingWorker(QObject *parent = nullptr);
~CSWorker() override; ~RoutingWorker() override;
bool calculating(); bool calculating();
public slots: public slots:
void update(const QList<QGeoCoordinate> &polygon, void route(const snake::BoostPolygon &safeArea, const Generator &generator);
const QGeoCoordinate &origin, snake::Length deltaR,
snake::Length minLength, snake::Angle deltaAlpha);
void update(const QGeoCoordinate &depot,
const QList<QGeoCoordinate> &safeArea,
const QList<QGeoCoordinate> &polygon,
const QGeoCoordinate &origin, snake::Length deltaR,
snake::Length minLength, snake::Angle deltaAlpha);
signals: signals:
void ready(PtrRoute pTransects); void result(PtrRoutingData pTransects);
void calculatingChanged(); void calculatingChanged();
protected: protected:
...@@ -48,17 +47,9 @@ private: ...@@ -48,17 +47,9 @@ private:
mutable std::mutex _mutex; mutable std::mutex _mutex;
mutable std::condition_variable _cv; mutable std::condition_variable _cv;
// Internal data // Internal data
QGeoCoordinate _depot; snake::BoostPolygon _safeArea;
QList<QGeoCoordinate> _safeArea; Generator _generator; // transect generator
QList<QGeoCoordinate> _polygon;
QGeoCoordinate _origin;
snake::Length _deltaR;
snake::Angle _deltaAlpha;
snake::Length _minLength;
std::size_t _maxWaypoints;
// State // State
std::atomic_bool _useDepotSafeArea;
std::atomic_bool _calculating; std::atomic_bool _calculating;
std::atomic_bool _stop; std::atomic_bool _stop;
std::atomic_bool _restart; std::atomic_bool _restart;
......
This diff is collapsed.
...@@ -6,13 +6,13 @@ ...@@ -6,13 +6,13 @@
#include "SettingsFact.h" #include "SettingsFact.h"
#include "TransectStyleComplexItem.h" #include "TransectStyleComplexItem.h"
class CSWorker; class RoutingWorker;
class RoutingData;
class CircularSurvey : public TransectStyleComplexItem { class CircularSurvey : public TransectStyleComplexItem {
Q_OBJECT Q_OBJECT
public: public:
using Route = QList<QGeoCoordinate>; using PtrRoutingData = QSharedPointer<RoutingData>;
using PtrRoute = QSharedPointer<Route>;
/// @param vehicle Vehicle which this is being contructed for /// @param vehicle Vehicle which this is being contructed for
/// @param flyView true: Created for use in the Fly View, false: Created for /// @param flyView true: Created for use in the Fly View, false: Created for
...@@ -87,7 +87,7 @@ private slots: ...@@ -87,7 +87,7 @@ private slots:
void _rebuildTransectsPhase1(void) final; void _rebuildTransectsPhase1(void) final;
void _recalcComplexDistance(void) final; void _recalcComplexDistance(void) final;
void _recalcCameraShots(void) final; void _recalcCameraShots(void) final;
void _setTransects(PtrRoute pRoute); void _setTransects(PtrRoutingData pRoute);
private: private:
void _appendLoadedMissionItems(QList<MissionItem *> &items, void _appendLoadedMissionItems(QList<MissionItem *> &items,
...@@ -107,9 +107,10 @@ private: ...@@ -107,9 +107,10 @@ private:
// this value // this value
SettingsFact _minLength; SettingsFact _minLength;
using PtrWorker = std::shared_ptr<CSWorker>; using PtrWorker = std::shared_ptr<RoutingWorker>;
PtrWorker _pWorker; PtrWorker _pWorker;
PtrRoute _pRoute; PtrRoutingData _workerOutput;
QList<QList<QGeoCoordinate>> _rawTransects;
bool _needsStoring; bool _needsStoring;
bool _needsReversal; bool _needsReversal;
bool _hidePolygon; bool _hidePolygon;
......
#pragma once #pragma once
#include <QObject>
#include "WimaArea.h" #include "WimaArea.h"
#include "WimaServiceArea.h" #include <QObject>
#include "WimaMeasurementArea.h"
class WimaCorridor : public WimaArea class WimaCorridor : public WimaArea {
{ Q_OBJECT
Q_OBJECT
public: public:
WimaCorridor(QObject* parent = nullptr); WimaCorridor(QObject *parent = nullptr);
WimaCorridor(const WimaCorridor& other, QObject* parent = nullptr); WimaCorridor(const WimaCorridor &other, QObject *parent = nullptr);
WimaCorridor &operator=(const WimaCorridor &other); WimaCorridor &operator=(const WimaCorridor &other);
// Overrides from WimaPolygon // Overrides from WimaPolygon
QString mapVisualQML (void) const { return "WimaCorridorMapVisual.qml";} QString mapVisualQML(void) const { return "WimaCorridorMapVisual.qml"; }
QString editorQML (void) const { return "WimaCorridorEditor.qml";} QString editorQML(void) const { return "WimaCorridorEditor.qml"; }
// Methodes // Methodes
void saveToJson (QJsonObject& json); void saveToJson(QJsonObject &json);
bool loadFromJson (const QJsonObject& json, QString& errorString); bool loadFromJson(const QJsonObject &json, QString &errorString);
// static Members // static Members
static const char* WimaCorridorName; static const char *WimaCorridorName;
// Friends // Friends
friend void print(const WimaCorridor& area, QString& outputString); friend void print(const WimaCorridor &area, QString &outputString);
friend void print(const WimaCorridor& area); friend void print(const WimaCorridor &area);
signals: signals:
public slots: public slots:
private: private:
void init(); void init();
}; };
#include "WimaServiceArea.h" #include "WimaServiceArea.h"
const char *WimaServiceArea::wimaServiceAreaName = "Service Area"; const char *WimaServiceArea::wimaServiceAreaName = "Service Area";
const char *WimaServiceArea::depotLatitudeName = "DepotLatitude";
const char *WimaServiceArea::depotLongitudeName = "DepotLongitude";
const char *WimaServiceArea::depotAltitudeName = "DepotAltitude";
WimaServiceArea::WimaServiceArea(QObject *parent) : WimaArea(parent) { init(); } WimaServiceArea::WimaServiceArea(QObject *parent) : WimaArea(parent) { init(); }
WimaServiceArea::WimaServiceArea(const WimaServiceArea &other, QObject *parent) WimaServiceArea::WimaServiceArea(const WimaServiceArea &other, QObject *parent)
: WimaArea(other, parent) { : WimaArea(other, parent), _depot(other.depot()) {
init(); init();
} }
...@@ -16,7 +19,7 @@ WimaServiceArea::WimaServiceArea(const WimaServiceArea &other, QObject *parent) ...@@ -16,7 +19,7 @@ WimaServiceArea::WimaServiceArea(const WimaServiceArea &other, QObject *parent)
*/ */
WimaServiceArea &WimaServiceArea::operator=(const WimaServiceArea &other) { WimaServiceArea &WimaServiceArea::operator=(const WimaServiceArea &other) {
WimaArea::operator=(other); WimaArea::operator=(other);
this->setDepot(other.depot());
return *this; return *this;
} }
...@@ -34,18 +37,41 @@ bool WimaServiceArea::setDepot(const QGeoCoordinate &coordinate) { ...@@ -34,18 +37,41 @@ bool WimaServiceArea::setDepot(const QGeoCoordinate &coordinate) {
void WimaServiceArea::saveToJson(QJsonObject &json) { void WimaServiceArea::saveToJson(QJsonObject &json) {
this->WimaArea::saveToJson(json); this->WimaArea::saveToJson(json);
json[areaTypeName] = wimaServiceAreaName; json[areaTypeName] = wimaServiceAreaName;
json[depotLatitudeName] = _depot.latitude();
json[depotLongitudeName] = _depot.longitude();
json[depotAltitudeName] = _depot.altitude();
} }
bool WimaServiceArea::loadFromJson(const QJsonObject &json, bool WimaServiceArea::loadFromJson(const QJsonObject &json,
QString &errorString) { QString &errorString) {
bool retVal = false;
if (this->WimaArea::loadFromJson(json, errorString)) { if (this->WimaArea::loadFromJson(json, errorString)) {
bool retVal = true; double lat = 0;
// code for loading here if (json.contains(depotLatitudeName) &&
return retVal; json[depotLatitudeName].isDouble()) {
} else { lat = json[depotLatitudeName].toDouble();
qWarning() << errorString; double lon = 0;
return false; if (json.contains(depotLongitudeName) &&
json[depotLongitudeName].isDouble()) {
lon = json[depotLongitudeName].toDouble();
double alt = 0;
if (json.contains(depotAltitudeName) &&
json[depotAltitudeName].isDouble()) {
alt = json[depotAltitudeName].toDouble();
this->setDepot(QGeoCoordinate(lat, lon, alt));
retVal = true;
} else {
errorString = "Not able to load depot altitude.";
}
} else {
errorString = "Not able to load depot longitude.";
}
} else {
errorString = "Not able to load depot latitude.";
}
retVal = true;
} }
return retVal;
} }
void print(const WimaServiceArea &area) { void print(const WimaServiceArea &area) {
......
...@@ -30,6 +30,9 @@ public: ...@@ -30,6 +30,9 @@ public:
// static Members // static Members
static const char *wimaServiceAreaName; static const char *wimaServiceAreaName;
static const char *depotLatitudeName;
static const char *depotLongitudeName;
static const char *depotAltitudeName;
signals: signals:
void depotChanged(void); void depotChanged(void);
......
This diff is collapsed.
...@@ -424,21 +424,24 @@ bool WimaController::setWimaPlanData(QSharedPointer<WimaPlanData> planData) { ...@@ -424,21 +424,24 @@ bool WimaController::setWimaPlanData(QSharedPointer<WimaPlanData> planData) {
emit visualItemsChanged(); emit visualItemsChanged();
// extract mission items // extract mission items
QList<MissionItem> tempMissionItems = planData->missionItems(); auto tempMissionItems = planData->missionItems();
if (tempMissionItems.size() < 1) { if (tempMissionItems.size() < 1) {
qWarning("WimaController: Mission items from WimaPlaner empty!"); qWarning("WimaController: Mission items from WimaPlaner empty!");
return false; return false;
} }
for (auto item : tempMissionItems) { qWarning() << "WimaController:";
_defaultWM.push_back(item.coordinate()); for (auto *item : tempMissionItems) {
qWarning() << item->coordinate();
_defaultWM.push_back(item->coordinate());
} }
_WMSettings.setHomePosition(QGeoCoordinate( _WMSettings.setHomePosition(QGeoCoordinate(
_serviceArea.depot().latitude(), _serviceArea.depot().longitude(), 0)); _serviceArea.depot().latitude(), _serviceArea.depot().longitude(), 0));
qWarning() << "service area depot: " << _serviceArea.depot();
if (!_defaultWM.reset()) { if (!_defaultWM.reset()) {
Q_ASSERT(false); qWarning() << "_defaultWM.reset() failed";
return false; return false;
} }
......
...@@ -110,7 +110,7 @@ const QList<const WimaAreaData *> &WimaPlanData::areaList() const { ...@@ -110,7 +110,7 @@ const QList<const WimaAreaData *> &WimaPlanData::areaList() const {
return _areaList; return _areaList;
} }
const QList<MissionItem> &WimaPlanData::missionItems() const { const QList<MissionItem *> &WimaPlanData::missionItems() const {
return _missionItems; return _missionItems;
} }
......
...@@ -29,7 +29,7 @@ public: ...@@ -29,7 +29,7 @@ public:
void clear(); void clear();
const QList<const WimaAreaData *> &areaList() const; const QList<const WimaAreaData *> &areaList() const;
const QList<MissionItem> &missionItems() const; const QList<MissionItem *> &missionItems() const;
signals: signals:
void areaListChanged(); void areaListChanged();
...@@ -44,5 +44,5 @@ private: ...@@ -44,5 +44,5 @@ private:
WimaMeasurementAreaData _measurementArea; WimaMeasurementAreaData _measurementArea;
QList<const WimaAreaData *> _areaList; QList<const WimaAreaData *> _areaList;
QList<MissionItem> _missionItems; QList<MissionItem *> _missionItems;
}; };
...@@ -740,6 +740,10 @@ QSharedPointer<WimaPlanData> WimaPlaner::toPlanData() { ...@@ -740,6 +740,10 @@ QSharedPointer<WimaPlanData> WimaPlaner::toPlanData() {
QList<MissionItem *> missionItems; QList<MissionItem *> missionItems;
_TSComplexItem->appendMissionItems(missionItems, nullptr); _TSComplexItem->appendMissionItems(missionItems, nullptr);
// store mavlink commands // store mavlink commands
qWarning() << "WimaPlaner";
for (auto *item : missionItems) {
qWarning() << item->coordinate();
}
planData->append(missionItems); planData->append(missionItems);
return planData; return planData;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment