Commit b4c66b1b authored by Valentin Platzgummer's avatar Valentin Platzgummer

snake integration continuded

parent 2601b482
This diff is collapsed.
...@@ -30,6 +30,7 @@ DebugBuild { ...@@ -30,6 +30,7 @@ DebugBuild {
} }
else { else {
DESTDIR = $${OUT_PWD}/release DESTDIR = $${OUT_PWD}/release
DEFINES += NDEBUG
} }
# #
......
...@@ -68,24 +68,16 @@ public: ...@@ -68,24 +68,16 @@ public:
{ {
assert((m > 0) || (n > 0)); assert((m > 0) || (n > 0));
assert(!_isInitialized); assert(!_isInitialized);
if (!_isInitialized){ _m = m;
_m = m; _n = n;
_n = n; _elements = n*m;
_elements = n*m; _matrix.resize(_elements, value);
_matrix.resize(_elements, value); _isInitialized = true;
}
} }
void setDimension(size_t m, size_t n) void setDimension(size_t m, size_t n)
{ {
assert((m > 0) || (n > 0)); setDimension(m, n, T{0});
assert(!_isInitialized);
if (!_isInitialized){
_m = m;
_n = n;
_elements = n*m;
_matrix.resize(_elements);
}
} }
private: private:
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
#include "utilities.h" #include "utilities.h"
#include "time.h" #include "time.h"
#include "assert.h"
const char* WimaController::wimaFileExtension = "wima"; const char* WimaController::wimaFileExtension = "wima";
...@@ -20,7 +21,7 @@ const char* WimaController::altitudeName = "Altitude"; ...@@ -20,7 +21,7 @@ const char* WimaController::altitudeName = "Altitude";
const char* WimaController::reverseName = "Reverse"; const char* WimaController::reverseName = "Reverse";
const char* WimaController::snakeTileWidthName = "SnakeTileWidth"; const char* WimaController::snakeTileWidthName = "SnakeTileWidth";
const char* WimaController::snakeTileHeightName = "SnakeTileHeight"; const char* WimaController::snakeTileHeightName = "SnakeTileHeight";
const char* WimaController::snakeMinTileAreaName = "SnakeMinTileAreaWidth"; const char* WimaController::snakeMinTileAreaName = "SnakeMinTileArea";
const char* WimaController::snakeLineDistanceName = "SnakeLineDistance"; const char* WimaController::snakeLineDistanceName = "SnakeLineDistance";
const char* WimaController::snakeMinTransectLengthName = "SnakeMinTransectLength"; const char* WimaController::snakeMinTransectLengthName = "SnakeMinTransectLength";
...@@ -87,7 +88,7 @@ WimaController::WimaController(QObject *parent) ...@@ -87,7 +88,7 @@ WimaController::WimaController(QObject *parent)
_enableDisableLowBatteryHandling(enableLowBatteryHandling->rawValue()); _enableDisableLowBatteryHandling(enableLowBatteryHandling->rawValue());
// Snake Worker Thread. // Snake Worker Thread.
connect(&_snakeWorker, &SnakeWorker::resultReady, this, &WimaController::_snakeResultsReady); connect(&_snakeWorker, &SnakeWorker::resultReady, this, &WimaController::_snakeStoreWorkerResults);
} }
QmlObjectListModel* WimaController::visualItems() QmlObjectListModel* WimaController::visualItems()
...@@ -1039,6 +1040,7 @@ void WimaController::_eventTimerHandler() ...@@ -1039,6 +1040,7 @@ void WimaController::_eventTimerHandler()
_snakeWorker.setLineDistance(_snakeLineDistance.rawValue().toDouble()); _snakeWorker.setLineDistance(_snakeLineDistance.rawValue().toDouble());
_snakeWorker.setMinTransectLength(_snakeMinTransectLength.rawValue().toDouble()); _snakeWorker.setMinTransectLength(_snakeMinTransectLength.rawValue().toDouble());
_snakeWorker.start(); _snakeWorker.start();
_setSnakeCalcInProgress(true);
} }
} }
} }
...@@ -1311,11 +1313,73 @@ bool WimaController::_verifyScenarioDefinedWithErrorMessage() ...@@ -1311,11 +1313,73 @@ bool WimaController::_verifyScenarioDefinedWithErrorMessage()
errorString.push_back(c); errorString.push_back(c);
qgcApp()->showMessage(errorString); qgcApp()->showMessage(errorString);
} }
return value;
} }
void WimaController::_snakeResultsReady(const WorkerResult_t &r) void WimaController::_snakeStoreWorkerResults(const WorkerResult_t &r)
{ {
// continue here _setSnakeCalcInProgress(false);
if (!r.success) {
qgcApp()->showMessage(r.errorMessage);
return;
}
// create Mission items from r.waypoints
long n = r.waypoints.size() - r.returnPathIdx.size() - r.arrivalPathIdx.size() + 2;
assert(n >= 1);
QVector<MissionItem> missionItems;
missionItems.reserve(int(n));
unsigned long startIdx = r.returnPathIdx.last();
unsigned long endIdx = r.returnPathIdx.first();
QObject parent;
int seqNum = 0;
for (unsigned long i = startIdx; i <= endIdx; ++i) {
QGeoCoordinate wp{r.waypoints[int(i)].value<QGeoCoordinate>()};
MissionItem item = new MissionItem(seqNum++,
MAV_CMD_NAV_WAYPOINT,
MAV_FRAME_GLOBAL_RELATIVE_ALT,
0, // Hold time (delay for hover and capture to settle vehicle before image is taken)
0.0, // No acceptance radius specified
0.0, // Pass through waypoint
std::numeric_limits<double>::quiet_NaN(), // Yaw unchanged
wp.latitude(),
wp.longitude(),
wp.altitude(),
true, // autoContinue
false, // isCurrentItem
&parent);
}
// create mission items
_missionController->removeAll();
QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems();
// create SimpleMissionItem by using _missionController
for ( int i = 0; i < missionItems.size(); i++) {
_missionController->insertSimpleMissionItem(missionItems[i], missionControllerVisualItems->count());
}
// copy mission items from _missionController to _missionItems
for ( int i = 1; i < missionControllerVisualItems->count(); i++) {
SimpleMissionItem *visualItem = qobject_cast<SimpleMissionItem *>((*missionControllerVisualItems)[i]);
if (visualItem == nullptr) {
qWarning("WimaController::fetchContainerData(): Nullptr at SimpleMissionItem!");
return;
}
SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this);
_missionItems.append(visualItemCopy);
}
_updateWaypointPath();
// set _nextPhaseStartWaypointIndex to 1
disconnect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::_calcNextPhase);
bool reverse = _reverse.rawValue().toBool();
_nextPhaseStartWaypointIndex.setRawValue(reverse? _missionItems.count() : int(1));
connect(&_nextPhaseStartWaypointIndex, &Fact::rawValueChanged, this, &WimaController::_calcNextPhase);
if(!_calcNextPhase())
return;
} }
void WimaController::_loadCurrentMissionItemsFromBuffer() void WimaController::_loadCurrentMissionItemsFromBuffer()
......
...@@ -232,7 +232,7 @@ private slots: ...@@ -232,7 +232,7 @@ private slots:
void _setSnakeCalcInProgress (bool inProgress); void _setSnakeCalcInProgress (bool inProgress);
bool _verifyScenarioDefined (void); bool _verifyScenarioDefined (void);
bool _verifyScenarioDefinedWithErrorMessage (void); bool _verifyScenarioDefinedWithErrorMessage (void);
void _snakeResultsReady (const WorkerResult_t &r); void _snakeStoreWorkerResults (const WorkerResult_t &r);
private: private:
...@@ -311,6 +311,7 @@ private: ...@@ -311,6 +311,7 @@ private:
SettingsFact _snakeMinTileArea; SettingsFact _snakeMinTileArea;
SettingsFact _snakeLineDistance; SettingsFact _snakeLineDistance;
SettingsFact _snakeMinTransectLength; SettingsFact _snakeMinTransectLength;
QmlObjectListModel _snakeTiles; // tiles
}; };
......
...@@ -58,6 +58,9 @@ ...@@ -58,6 +58,9 @@
#include <iostream> #include <iostream>
#include "QGCMapEngine.h" #include "QGCMapEngine.h"
// Snake
#include "Wima/WimaControllerDetail.h"
/* SDL does ugly things to main() */ /* SDL does ugly things to main() */
#ifdef main #ifdef main
#undef main #undef main
...@@ -145,7 +148,7 @@ int main(int argc, char *argv[]) ...@@ -145,7 +148,7 @@ int main(int argc, char *argv[])
// install the message handler // install the message handler
AppMessages::installHandler(); AppMessages::installHandler();
QList<QPair<QByteArray,QByteArray>
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
#ifndef __ios__ #ifndef __ios__
// Prevent Apple's app nap from screwing us over // Prevent Apple's app nap from screwing us over
...@@ -250,6 +253,9 @@ int main(int argc, char *argv[]) ...@@ -250,6 +253,9 @@ int main(int argc, char *argv[])
// on in the code. // on in the code.
qRegisterMetaType<QList<QPair<QByteArray,QByteArray> > >(); qRegisterMetaType<QList<QPair<QByteArray,QByteArray> > >();
// Snake
qRegisterMetaType<WorkerResult>("WorkerResult");
app->_initCommon(); app->_initCommon();
//-- Initialize Cache System //-- Initialize Cache System
getQGCMapEngine()->init(); getQGCMapEngine()->init();
......
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