diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 98177a3962bbaacbbce2d212af4a29e771461a76..ba6f388375d0ef58de35b3431e4a830d46cee88b 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -386,6 +386,34 @@ int MissionController::insertSimpleMissionItem(QGeoCoordinate coordinate, int i) return newItem->sequenceNumber(); } +int MissionController::insertSimpleMissionItem(const MissionItem &missionItem, int i) +{ + int sequenceNumber = _nextSequenceNumber(); + SimpleMissionItem * newItem = new SimpleMissionItem(_controllerVehicle, _flyView, missionItem, this); + newItem->setSequenceNumber(sequenceNumber); + newItem->setCommand(MAV_CMD_NAV_WAYPOINT); + _initVisualItem(newItem); + MAV_CMD takeoffCmd = _controllerVehicle->vtol() ? MAV_CMD_NAV_VTOL_TAKEOFF : MAV_CMD_NAV_TAKEOFF; + if (newItem->command() == takeoffCmd) { + if (!_controllerVehicle->firmwarePlugin()->supportedMissionCommands().contains(takeoffCmd)) { + return -1; // can not add this takeoff command for this vehicle + } + } + if (newItem->specifiesAltitude()) { + double prevAltitude; + int prevAltitudeMode; + + if (_findPreviousAltitude(i, &prevAltitude, &prevAltitudeMode)) { + newItem->altitude()->setRawValue(prevAltitude); + newItem->setAltitudeMode(static_cast(prevAltitudeMode)); + } + } + newItem->setMissionFlightStatus(_missionFlightStatus); + _visualItems->insert(i, newItem); + + return newItem->sequenceNumber(); +} + int MissionController::insertROIMissionItem(QGeoCoordinate coordinate, int i) { int sequenceNumber = _nextSequenceNumber(); diff --git a/src/MissionManager/MissionController.h b/src/MissionManager/MissionController.h index 6a0f4eb7fb3e38edf85e241740a1bbd7c3cd205f..6e56a7f4272cdf0f082a88fc096f2fba307956ce 100644 --- a/src/MissionManager/MissionController.h +++ b/src/MissionManager/MissionController.h @@ -108,6 +108,11 @@ public: /// @return Sequence number for new item Q_INVOKABLE int insertSimpleMissionItem(QGeoCoordinate coordinate, int i); + /// Add a new simple mission item to the list + /// @param i: index to insert at + /// @return Sequence number for new item + int insertSimpleMissionItem(const MissionItem &missionItem, int i); + /// Add a new ROI mission item to the list /// @param i: index to insert at /// @return Sequence number for new item diff --git a/src/Wima/ToDo.txt b/src/Wima/ToDo.txt deleted file mode 100644 index 9aa7945d050ec483211c2d19e3fb39413855a7f1..0000000000000000000000000000000000000000 --- a/src/Wima/ToDo.txt +++ /dev/null @@ -1,4 +0,0 @@ -add refpt gui and edit constructor -new path optim required for circ survey -add gui elements for circ survey -solve bug for cantFindPath.wima on Desktop/WimaPath diff --git a/src/Wima/WimaController.cc b/src/Wima/WimaController.cc index a6e855ef5915753bf8b1c794d669e7f08e664513..266b911194f31ab9a25c1e43283f010e6b497733 100644 --- a/src/Wima/WimaController.cc +++ b/src/Wima/WimaController.cc @@ -214,6 +214,11 @@ void WimaController::containerDataValidChanged(bool valid) for (auto missionItem : tempMissionItems) _missionItems.append(const_cast(missionItem)); // losing const qualifier here + _missionController->removeAll(); + QmlObjectListModel* missionItems = _missionController->visualItems(); + for ( auto missionItem : tempMissionItems) + _missionController->insertSimpleMissionItem(*missionItem, missionItems->count()); + if (areaCounter == numAreas) _localPlanDataValid = true; diff --git a/src/Wima/notesOnWpExchange.txt b/src/Wima/notesOnWpExchange.txt index 29fc445e4cdfd065d19a5d1232d52e4419eb4318..10c055277f0a369204e07e8f9004275ae33e52ab 100644 --- a/src/Wima/notesOnWpExchange.txt +++ b/src/Wima/notesOnWpExchange.txt @@ -6,3 +6,6 @@ How to exchange mission between WimaPlaner and WimaController. 4) start/continue mission 5) return vehicle on battery low 6) go to 4) or quit if last waypoint reached + + +investigate load, loadFromVehicle, syncInProgress, _newMissionItemsAvailableFromVehicle