diff --git a/src/MissionManager/MissionController.cc b/src/MissionManager/MissionController.cc index 991c460348eb7c337be226cba9a806d54158b7f1..5d8234ca1d8c94776169abfaa3a7b95ab4409267 100644 --- a/src/MissionManager/MissionController.cc +++ b/src/MissionManager/MissionController.cc @@ -389,22 +389,41 @@ int MissionController::insertROIMissionItem(QGeoCoordinate coordinate, int i) int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate mapCenterCoordinate, int i) { ComplexMissionItem* newItem; + bool surveyStyleItem = false; int sequenceNumber = _nextSequenceNumber(); if (itemName == _surveyMissionItemName) { newItem = new SurveyMissionItem(_controllerVehicle, _visualItems); newItem->setCoordinate(mapCenterCoordinate); - // If the vehicle is known to have a gimbal then we automatically point the gimbal straight down if not already set + surveyStyleItem = true; + } else if (itemName == _fwLandingMissionItemName) { + newItem = new FixedWingLandingComplexItem(_controllerVehicle, _visualItems); + } else if (itemName == _structureScanMissionItemName) { + newItem = new StructureScanComplexItem(_controllerVehicle, _visualItems); + } else if (itemName == _corridorScanMissionItemName) { + newItem = new CorridorScanComplexItem(_controllerVehicle, _visualItems); + surveyStyleItem = true; + } else { + qWarning() << "Internal error: Unknown complex item:" << itemName; + return sequenceNumber; + } + + if (surveyStyleItem) { bool rollSupported = false; bool pitchSupported = false; bool yawSupported = false; + + // If the vehicle is known to have a gimbal then we automatically point the gimbal straight down if not already set + MissionSettingsItem* settingsItem = _visualItems->value(0); CameraSection* cameraSection = settingsItem->cameraSection(); + // Set camera to photo mode (leave alone if user already specified) if (cameraSection->cameraModeSupported() && !cameraSection->specifyCameraMode()) { cameraSection->setSpecifyCameraMode(true); cameraSection->cameraMode()->setRawValue(CAMERA_MODE_IMAGE_SURVEY); } + // Point gimbal straight down if (_controllerVehicle->firmwarePlugin()->hasGimbal(_controllerVehicle, rollSupported, pitchSupported, yawSupported) && pitchSupported) { // If the user already specified a gimbal angle leave it alone @@ -413,16 +432,8 @@ int MissionController::insertComplexMissionItem(QString itemName, QGeoCoordinate cameraSection->gimbalPitch()->setRawValue(-90.0); } } - } else if (itemName == _fwLandingMissionItemName) { - newItem = new FixedWingLandingComplexItem(_controllerVehicle, _visualItems); - } else if (itemName == _structureScanMissionItemName) { - newItem = new StructureScanComplexItem(_controllerVehicle, _visualItems); - } else if (itemName == _corridorScanMissionItemName) { - newItem = new CorridorScanComplexItem(_controllerVehicle, _visualItems); - } else { - qWarning() << "Internal error: Unknown complex item:" << itemName; - return sequenceNumber; } + newItem->setSequenceNumber(sequenceNumber); _initVisualItem(newItem); @@ -440,17 +451,17 @@ void MissionController::removeMissionItem(int index) return; } - bool surveyRemoved = _visualItems->value(index); + bool removeSurveyStyle = _visualItems->value(index) || _visualItems->value(index); VisualMissionItem* item = qobject_cast(_visualItems->removeAt(index)); _deinitVisualItem(item); item->deleteLater(); - if (surveyRemoved) { - // Determine if the mission still has another survey in it + if (removeSurveyStyle) { + // Determine if the mission still has another survey style item in it bool foundSurvey = false; for (int i=1; i<_visualItems->count(); i++) { - if (_visualItems->value(i)) { + if (_visualItems->value(i) || _visualItems->value(index)) { foundSurvey = true; break; }