Commit 32146c9e authored by Valentin Platzgummer's avatar Valentin Platzgummer

_currentItems removed from WimaController

parent c8c80fb1
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -228,7 +228,7 @@ FlightMap {
color: "gray"
}
// current Items
WimaPlanMapItems {
/*WimaPlanMapItems {
map: flightMap
largeMapView: _mainIsMap
missionItems: wimaController.currentMissionItems
......@@ -237,7 +237,7 @@ FlightMap {
zOrderWP: QGroundControl.zOrderWaypointIndicators-1
zOrderLines: QGroundControl.zOrderWaypointIndicators-2
color: "green" // gray with alpha 0.7
}
}*/
// Add trajectory points to the map
MapItemView {
......
......@@ -34,7 +34,6 @@ Item {
// Add the mission item visuals to the map
Repeater {
property bool show: largeMapView
property var wimaController
model: show ? _missionController.visualItems : 0
delegate: MissionItemMapVisual {
......
......@@ -331,6 +331,27 @@ void MissionController::convertToKMLDocument(QDomDocument& document)
kml.save(document);
}
//QList<QObject *> MissionController::takeVisualItems()
//{
// QList<QObject *> objectList;
// if (_visualItems) {
// _deinitAllVisualItems();
// QList<QObject *> *objectListPt = _visualItems->objectList();
// for (auto object : *objectListPt)
// objectList.append(object);
// _visualItems->clear();
// _visualItems->deleteLater();
// _settingsItem = nullptr;
// _visualItems = new QmlObjectListModel(this);
// _addMissionSettings(_visualItems, false /* addToCenter */);
// _initAllVisualItems();
// setDirty(true);
// _resetMissionFlightStatus();
// }
// return objectList;
//}
void MissionController::sendItemsToVehicle(Vehicle* vehicle, QmlObjectListModel* visualMissionItems)
{
if (vehicle) {
......@@ -438,7 +459,7 @@ int MissionController::insertSimpleMissionItem(const QList<const MissionItem *>
return (newItem != nullptr) ? newItem->sequenceNumber(): -1;
}
int MissionController::insertSimpleMissionItem(SimpleMissionItem &missionItem, int i)
/*int MissionController::insertSimpleMissionItem(SimpleMissionItem &missionItem, int i)
{
int sequenceNumber = _nextSequenceNumber();
SimpleMissionItem * newItem = new SimpleMissionItem(missionItem, _flyView, this);
......@@ -455,7 +476,7 @@ int MissionController::insertSimpleMissionItem(SimpleMissionItem &missionItem, i
_visualItems->insert(i, newItem);
return newItem->sequenceNumber();
}
}*/
int MissionController::insertROIMissionItem(QGeoCoordinate coordinate, int i)
{
......
......@@ -122,7 +122,7 @@ public:
/// Add a new simple mission item to the list
/// @param i: index to insert at
/// @return Sequence number for new item
int insertSimpleMissionItem(SimpleMissionItem &missionItem, int i);
//int insertSimpleMissionItem(SimpleMissionItem &missionItem, int i);
/// Add a new ROI mission item to the list
/// @param i: index to insert at
......@@ -196,6 +196,7 @@ public:
// Property accessors
QmlObjectListModel* visualItems (void) { return _visualItems; }
//QList<QObject *> takeVisualItems (void);
QmlObjectListModel* waypointLines (void) { return &_waypointLines; }
QVariantList waypointPath (void) { return _waypointPath; }
QStringList complexMissionItemNames (void) const;
......
......@@ -97,21 +97,11 @@ QmlObjectListModel *WimaController::missionItems()
return &_missionItems;
}
QmlObjectListModel *WimaController::currentMissionItems()
{
return &_currentMissionItems;
}
QVariantList WimaController::waypointPath()
{
return _waypointPath;
}
QVariantList WimaController::currentWaypointPath()
{
return _currentWaypointPath;
}
Fact *WimaController::enableWimaController()
{
return &_enableWimaController;
......@@ -263,7 +253,7 @@ void WimaController::resetPhase()
bool WimaController::uploadToVehicle()
{
if ( !_serviceArea.containsCoordinate(_masterController->managerVehicle()->coordinate())
&& _currentMissionItems.count() > 0) {
&& _missionController->visualItems()->count() > 0) {
setUploadOverrideRequired(true);
return false;
}
......@@ -274,10 +264,9 @@ bool WimaController::uploadToVehicle()
bool WimaController::forceUploadToVehicle()
{
setUploadOverrideRequired(false);
if (_currentMissionItems.count() < 1)
if (_missionController->visualItems()->count() < 1)
return false;
_missionController->removeAll();
// set homeposition of settingsItem
QmlObjectListModel* visuals = _missionController->visualItems();
MissionSettingsItem* settingsItem = visuals->value<MissionSettingsItem *>(0);
......@@ -287,12 +276,6 @@ bool WimaController::forceUploadToVehicle()
}
settingsItem->setCoordinate(_takeoffLandPostion);
// copy mission items from _currentMissionItems to _missionController
for (int i = 0; i < _currentMissionItems.count(); i++){
SimpleMissionItem *item = _currentMissionItems.value<SimpleMissionItem *>(i);
_missionController->insertSimpleMissionItem(*item, visuals->count());
}
_masterController->sendToVehicle();
return true;
......@@ -301,7 +284,6 @@ bool WimaController::forceUploadToVehicle()
void WimaController::removeFromVehicle()
{
_masterController->removeAllFromVehicle();
_missionController->removeAll();
}
bool WimaController::checkSmartRTLPreCondition()
......@@ -468,8 +450,7 @@ bool WimaController::fetchContainerData()
// reset visual items
_visualItems.clear();
_missionItems.clearAndDeleteContents();
_currentMissionItems.clearAndDeleteContents();
_currentWaypointPath.clear();
_missionController->removeAll();
_localPlanDataValid = false;
......@@ -536,26 +517,10 @@ bool WimaController::fetchContainerData()
return false;
}
// create mission items
_missionController->removeAll();
QmlObjectListModel* missionControllerVisualItems = _missionController->visualItems();
// create SimpleMissionItem by using _missionController
QList<const MissionItem*> missionItems;
missionItems.reserve(tempMissionItems.size());
// create SimpleMissionItems
for (auto item : tempMissionItems)
missionItems.append(item.data());
_missionController->insertSimpleMissionItem(missionItems, 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 false;
}
SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this);
_missionItems.append(visualItemCopy);
}
_missionItems.append(new SimpleMissionItem(_masterController->managerVehicle(), true /* flyView*/, *item, this));
setTakeoffLandPosition();
updateWaypointPath();
......@@ -587,9 +552,6 @@ bool WimaController::calcNextPhase()
return false;
}
_currentMissionItems.clearAndDeleteContents();
_currentWaypointPath.clear();
bool reverse = _reverse.rawValue().toBool(); // Reverses the phase direction. Phases go from high to low waypoint numbers, if true.
int startIndex = _nextPhaseStartWaypointIndex.rawValue().toInt()-1;
if (!reverse) {
......@@ -679,7 +641,6 @@ bool WimaController::calcNextPhase()
_arrivalPathLength += arrivalPath[i].distanceTo(arrivalPath[i+1]);
arrivalPath.removeFirst();
//arrivalPath.removeLast();
// calculate path from last waypoint to home
QVector<QGeoCoordinate> returnPath;
......@@ -776,29 +737,12 @@ bool WimaController::calcNextPhase()
}
_missionController->setLandCommand(*landItem);
// copy to _currentMissionItems
for ( int i = 1; i < missionControllerVisuals->count(); i++) {
SimpleMissionItem *visualItem = missionControllerVisuals->value<SimpleMissionItem*>(i);
if (visualItem == nullptr) {
qWarning("WimaController::calcNextPhase(): Nullptr at SimpleMissionItem!");
_currentMissionItems.clear();
return false;
}
SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this);
_currentMissionItems.append(visualItemCopy);
}
_setPhaseDistance(_measurementPathLength + _arrivalPathLength + _returnPathLength);
_setPhaseDuration(_measurementPathLength/_flightSpeed.rawValue().toDouble()
+ (_arrivalPathLength + _returnPathLength)
/ _arrivalReturnSpeed.rawValue().toDouble());
_missionController->removeAll(); // remove items from _missionController, will be added on upload
updateAltitude();
updateCurrentPath();
emit currentMissionItemsChanged();
qWarning() << "WimaController::calcNextPhase() exec time: "
<< std::chrono::duration_cast<std::chrono::microseconds>(
std::chrono::high_resolution_clock::now() - start).count() << " us";
......@@ -812,13 +756,6 @@ void WimaController::updateWaypointPath()
emit waypointPathChanged();
}
void WimaController::updateCurrentPath()
{
_currentWaypointPath.clear();
extractCoordinateList(_currentMissionItems, _currentWaypointPath, 0, _currentMissionItems.count()-1);
emit currentWaypointPathChanged();
}
void WimaController::updateNextWaypoint()
{
......@@ -849,8 +786,9 @@ bool WimaController::setTakeoffLandPosition()
void WimaController::updateflightSpeed()
{
int speedItemCounter = 0;
for (int i = 0; i < _currentMissionItems.count(); i++) {
SimpleMissionItem *item = _currentMissionItems.value<SimpleMissionItem *>(i);
QmlObjectListModel *visualMissionItems = _missionController->visualItems();
for (int i = 0; i < visualMissionItems->count(); i++) {
SimpleMissionItem *item = visualMissionItems->value<SimpleMissionItem *>(i);
if (item != nullptr && item->command() == MAV_CMD_DO_CHANGE_SPEED) {
speedItemCounter++;
if (speedItemCounter == 2) {
......@@ -870,8 +808,9 @@ void WimaController::updateflightSpeed()
void WimaController::updateArrivalReturnSpeed()
{
int speedItemCounter = 0;
for (int i = 0; i < _currentMissionItems.count(); i++) {
SimpleMissionItem *item = _currentMissionItems.value<SimpleMissionItem *>(i);
QmlObjectListModel *visualMissionItems = _missionController->visualItems();
for (int i = 0; i < visualMissionItems->count(); i++) {
SimpleMissionItem *item = visualMissionItems->value<SimpleMissionItem *>(i);
if (item != nullptr && item->command() == MAV_CMD_DO_CHANGE_SPEED) {
speedItemCounter++;
if (speedItemCounter != 2) {
......@@ -891,8 +830,9 @@ void WimaController::updateArrivalReturnSpeed()
void WimaController::updateAltitude()
{
for (int i = 0; i < _currentMissionItems.count(); i++) {
SimpleMissionItem *item = _currentMissionItems.value<SimpleMissionItem *>(i);
QmlObjectListModel *visualMissionItems = _missionController->visualItems();
for (int i = 0; i < visualMissionItems->count(); i++) {
SimpleMissionItem *item = visualMissionItems->value<SimpleMissionItem *>(i);
if (item == nullptr) {
qWarning("WimaController::updateAltitude(): nullptr");
return;
......@@ -1083,33 +1023,12 @@ bool WimaController::_calcReturnPath(QString &errorSring)
}
_missionController->setLandCommand(*landItem);
// copy to _currentMissionItems
//qWarning() << "_currentMissionItems.count()" << _currentMissionItems.count();
for ( int i = 1; i < missionControllerVisuals->count(); i++) {
SimpleMissionItem *visualItem = missionControllerVisuals->value<SimpleMissionItem*>(i);
if (visualItem == nullptr) {
qWarning("WimaController: Nullptr at SimpleMissionItem!");
_currentMissionItems.clear();
return false;
}
SimpleMissionItem *visualItemCopy = new SimpleMissionItem(*visualItem, true, this);
_currentMissionItems.append(visualItemCopy);
}
//qWarning() << "_currentMissionItems.count()" << _currentMissionItems.count();
_setPhaseDistance(_phaseDistance + _arrivalPathLength + _returnPathLength);
_setPhaseDuration(_phaseDistance/_flightSpeed.rawValue().toDouble()
+ (_arrivalPathLength + _returnPathLength)
/ _arrivalReturnSpeed.rawValue().toDouble());
_missionController->removeAll(); // remove items from _missionController, will be added on upload
updateAltitude();
updateCurrentPath();
emit currentMissionItemsChanged();
//qWarning() << "_currentMissionItems.count()" << _currentMissionItems.count();
_showAllMissionItems.setRawValue(false);
managerVehicle->trajectoryPoints()->clear();
......@@ -1139,21 +1058,34 @@ bool WimaController::_executeSmartRTL(QString &errorSring)
void WimaController::_loadCurrentMissionItemsFromBuffer()
{
_currentMissionItems.clear();
_missionController->removeAll();
int numItems = _missionItemsBuffer.count();
for (int i = 0; i < numItems; i++)
_currentMissionItems.append(_missionItemsBuffer.removeAt(0));
updateCurrentPath();
for (int i = 0; i < numItems; i++) {
SimpleMissionItem *item = _missionItemsBuffer.value<SimpleMissionItem *>(i);
if (item != nullptr)
_missionController->insertSimpleMissionItem(item->missionItem(), i+1);
else {
qWarning("WimaController::_loadCurrentMissionItemsFromBuffer(): internal error");
return;
}
}
_missionItems.clearAndDeleteContents();
}
void WimaController::_saveCurrentMissionItemsToBuffer()
{
_missionItemsBuffer.clear();
int numCurrentMissionItems = _currentMissionItems.count();
for (int i = 0; i < numCurrentMissionItems; i++)
_missionItemsBuffer.append(_currentMissionItems.removeAt(0));
int numItems = _missionController->visualItems()->count();
for (int i = 0; i < numItems; i++) {
SimpleMissionItem *item = _missionController->visualItems()->value<SimpleMissionItem *>(i);
if (item != nullptr)
_missionItems.append(new SimpleMissionItem(*item, true /* flyView */, this));
else {
qWarning("WimaController::_loadCurrentMissionItemsFromBuffer(): internal error");
return;
}
}
}
......
......@@ -44,9 +44,7 @@ public:
Q_PROPERTY(QString fileExtension READ fileExtension CONSTANT)
Q_PROPERTY(WimaDataContainer* dataContainer READ dataContainer WRITE setDataContainer NOTIFY dataContainerChanged)
Q_PROPERTY(QmlObjectListModel* missionItems READ missionItems NOTIFY missionItemsChanged)
Q_PROPERTY(QmlObjectListModel* currentMissionItems READ currentMissionItems NOTIFY currentMissionItemsChanged)
Q_PROPERTY(QVariantList waypointPath READ waypointPath NOTIFY waypointPathChanged)
Q_PROPERTY(QVariantList currentWaypointPath READ currentWaypointPath NOTIFY currentWaypointPathChanged)
Q_PROPERTY(Fact* enableWimaController READ enableWimaController CONSTANT)
Q_PROPERTY(Fact* overlapWaypoints READ overlapWaypoints CONSTANT)
Q_PROPERTY(Fact* maxWaypointsPerPhase READ maxWaypointsPerPhase CONSTANT)
......@@ -75,9 +73,7 @@ public:
QGCMapPolygon joinedArea (void) const;
WimaDataContainer* dataContainer (void);
QmlObjectListModel* missionItems (void);
QmlObjectListModel* currentMissionItems (void);
QVariantList waypointPath (void);
QVariantList currentWaypointPath (void);
Fact* enableWimaController (void);
Fact* overlapWaypoints (void);
Fact* maxWaypointsPerPhase (void);
......@@ -157,9 +153,7 @@ signals:
void dataContainerChanged ();
void readyForSaveSendChanged (bool ready);
void missionItemsChanged (void);
void currentMissionItemsChanged (void);
void waypointPathChanged (void);
void currentWaypointPathChanged (void);
void uploadOverrideRequiredChanged (void);
void phaseDistanceChanged (void);
void phaseDurationChanged (void);
......@@ -171,7 +165,6 @@ private slots:
bool fetchContainerData();
bool calcNextPhase(void);
void updateWaypointPath (void);
void updateCurrentPath (void);
void updateNextWaypoint (void);
void recalcCurrentPhase (void);
bool setTakeoffLandPosition (void);
......@@ -205,11 +198,8 @@ private:
WimaCorridorData _corridor; // corridor connecting opArea and serArea
bool _localPlanDataValid;
QmlObjectListModel _missionItems; // all mission itmes (Mission Items) generaded by wimaPlaner, displayed in flightView
QmlObjectListModel _currentMissionItems; // contains the current mission items, which are a sub set of _missionItems,
// _currentMissionItems contains a number of mission items which can be worked off with a single battery chrage
QmlObjectListModel _missionItemsBuffer; // Buffer to store mission items, e.g. for storing _currentMissionItems when smartRTL() is invoked
QmlObjectListModel _missionItemsBuffer; // Buffer to store mission items, e.g. for storing _missionController->visualItems() when smartRTL() is invoked
QVariantList _waypointPath; // path connecting the items in _missionItems
QVariantList _currentWaypointPath; // path connecting the items in _currentMissionItems
QGeoCoordinate _takeoffLandPostion;
......@@ -227,9 +217,9 @@ private:
SettingsFact _reverse; // Reverses the phase direction. Phases go from high to low waypoint numbers, if true.
int _endWaypointIndex; // index of the mission item stored in _missionItems defining the last element
// (which is not part of the return path) of _currentMissionItem
// (which is not part of the return path) of _missionController.visualItems()
int _startWaypointIndex; // index of the mission item stored in _missionItems defining the first element
// (which is not part of the arrival path) of _currentMissionItem
// (which is not part of the arrival path) of _missionController.visualItems()
bool _uploadOverrideRequired; // Is set to true if uploadToVehicle() did not suceed because the vehicle is not inside the service area.
// The user can override the upload lock with a slider, this will reset this variable to false.
double _measurementPathLength; // the lenght of the phase in meters
......@@ -269,9 +259,6 @@ private:
* 3+n+m+2+l Return Path Waypoint l-1
* 3+n+m+2+l+1 Land command
*
* _currentMissionItems is equal to
* _missionController.visualItems() except that it
* is missing the MissionSettingsItem
*/
......@@ -715,6 +715,10 @@ QSharedPointer<WimaPlanData> WimaPlaner::toPlanData()
QList<MissionItem*> rgMissionItems;
QmlObjectListModel *visualItems = _missionController->visualItems();
MissionController::convertToMissionItems(visualItems, rgMissionItems, nullptr);
for (int i = 0; i <= _arrivalPathLength; ++i)
rgMissionItems.removeFirst();
for (int i = 0; i < _returnPathLength; ++i)
rgMissionItems.removeLast();
// store mavlink commands
planData->append(rgMissionItems);
......
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