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