diff --git a/src/MissionManager/CorridorScanComplexItem.cc b/src/MissionManager/CorridorScanComplexItem.cc index bcb69fc213fba4586c57879635b988e3512bea50..2a93b928bd2eb8bc704f2aa1cd7979e0281fce4c 100644 --- a/src/MissionManager/CorridorScanComplexItem.cc +++ b/src/MissionManager/CorridorScanComplexItem.cc @@ -36,6 +36,11 @@ CorridorScanComplexItem::CorridorScanComplexItem(Vehicle* vehicle, QObject* pare { _editorQml = "qrc:/qml/CorridorScanEditor.qml"; + // We override the altitude to the mission default + if (_cameraCalc.isManualCamera() || !_cameraCalc.valueSetIsDistance()->rawValue().toBool()) { + _cameraCalc.distanceToSurface()->setRawValue(qgcApp()->toolbox()->settingsManager()->appSettings()->defaultMissionItemAltitude()->rawValue()); + } + connect(&_corridorWidthFact, &Fact::valueChanged, this, &CorridorScanComplexItem::_setDirty); connect(&_corridorPolyline, &QGCMapPolyline::pathChanged, this, &CorridorScanComplexItem::_setDirty); @@ -61,7 +66,7 @@ int CorridorScanComplexItem::lastSequenceNumber(void) const { int itemCount = _transectPoints.count(); // Each transpect point represents a waypoint item - if (_cameraTriggerInTurnAroundFact.rawValue().toDouble()) { + if (_cameraTriggerInTurnAroundFact.rawValue().toBool()) { // Only one camera start and on camera stop itemCount += 2; } else { @@ -69,7 +74,7 @@ int CorridorScanComplexItem::lastSequenceNumber(void) const itemCount += _transectCount() * 2; } - return _sequenceNumber + itemCount; + return _sequenceNumber + itemCount - 1; } void CorridorScanComplexItem::save(QJsonArray& missionItems) @@ -110,7 +115,9 @@ bool CorridorScanComplexItem::load(const QJsonObject& complexObject, int sequenc return false; } - _corridorPolyline.clear(); + if (!_corridorPolyline.loadFromJson(complexObject, true, errorString)) { + return false; + } QString itemType = complexObject[VisualMissionItem::jsonTypeKey].toString(); QString complexType = complexObject[ComplexMissionItem::jsonComplexItemTypeKey].toString(); @@ -156,10 +163,10 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb { int seqNum = _sequenceNumber; int pointIndex = 0; - bool imagesEverywhere = _cameraTriggerInTurnAroundFact.rawValue().toDouble(); + bool imagesEverywhere = _cameraTriggerInTurnAroundFact.rawValue().toBool(); while (pointIndex < _transectPoints.count()) { - if (pointIndex != 0 && _hasTurnaround()) { + if (_hasTurnaround()) { QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value(); MissionItem* item = new MissionItem(seqNum++, MAV_CMD_NAV_WAYPOINT, @@ -175,9 +182,22 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb false, // isCurrentItem missionItemParent); items.append(item); + if (imagesEverywhere && pointIndex == 1) { + item = new MissionItem(seqNum++, + MAV_CMD_DO_SET_CAM_TRIGG_DIST, + MAV_FRAME_MISSION, + _cameraCalc.adjustedFootprintFrontal()->rawValue().toDouble(), // trigger distance + 0, // shutter integration (ignore) + 1, // trigger immediately when starting + 0, 0, 0, 0, // param 4-7 unused + true, // autoContinue + false, // isCurrentItem + missionItemParent); + items.append(item); + } } - bool addTrigger = imagesEverywhere ? pointIndex == 0 : true; + bool addTrigger = imagesEverywhere ? false : true; for (int i=0; i<_corridorPolyline.count(); i++) { QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value(); MissionItem* item = new MissionItem(seqNum++, @@ -225,7 +245,7 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb items.append(item); } - if (_hasTurnaround() && pointIndex < _transectPoints.count()) { + if (_hasTurnaround()) { QGeoCoordinate vertexCoord = _transectPoints[pointIndex++].value(); MissionItem* item = new MissionItem(seqNum++, MAV_CMD_NAV_WAYPOINT, @@ -261,9 +281,9 @@ void CorridorScanComplexItem::appendMissionItems(QList& items, QOb void CorridorScanComplexItem::applyNewAltitude(double newAltitude) { - Q_UNUSED(newAltitude); - // FIXME: NYI - //_altitudeFact.setRawValue(newAltitude); + _cameraCalc.valueSetIsDistance()->setRawValue(true); + _cameraCalc.distanceToSurface()->setRawValue(newAltitude); + _cameraCalc.setDistanceToSurfaceRelative(true); } void CorridorScanComplexItem::_polylineDirtyChanged(bool dirty) @@ -415,11 +435,6 @@ void CorridorScanComplexItem::_rebuildTransects(void) normalizedTransectPosition += transectSpacing; } - - // At this point _transectPoints has an extra turnaround segment at the beginning and end. - // These must be remove for the correcvt flight pattern. - _transectPoints.takeFirst(); - _transectPoints.takeLast(); } // Calculate distance flown for complex item diff --git a/src/MissionManager/CorridorScanComplexItemTest.cc b/src/MissionManager/CorridorScanComplexItemTest.cc index f5d621d3065c19792b83ef41255333011a52877f..bcbd9cf3fd56484e9bfa9f6517c98c333fe746b9 100644 --- a/src/MissionManager/CorridorScanComplexItemTest.cc +++ b/src/MissionManager/CorridorScanComplexItemTest.cc @@ -138,12 +138,12 @@ void CorridorScanComplexItemTest::_testItemCount(void) _corridorItem->cameraTriggerInTurnAround()->setRawValue(false); _corridorItem->appendMissionItems(items, this); - QCOMPARE(items.count(), _corridorItem->lastSequenceNumber()); + QCOMPARE(items.count() - 1, _corridorItem->lastSequenceNumber()); items.clear(); _corridorItem->cameraTriggerInTurnAround()->setRawValue(true); _corridorItem->appendMissionItems(items, this); - QCOMPARE(items.count(), _corridorItem->lastSequenceNumber()); + QCOMPARE(items.count() - 1, _corridorItem->lastSequenceNumber()); items.clear(); } diff --git a/src/PlanView/CorridorScanEditor.qml b/src/PlanView/CorridorScanEditor.qml index 94f38effd057f1134f379d5cbc100e7efa601c16..72cd5d3d80a7bb1f5672f00b8f6373b85ead7873 100644 --- a/src/PlanView/CorridorScanEditor.qml +++ b/src/PlanView/CorridorScanEditor.qml @@ -56,15 +56,6 @@ Rectangle { anchors.right: parent.right spacing: _margin - QGCLabel { - anchors.left: parent.left - anchors.right: parent.right - text: qsTr("WARNING WORK IN PROGRESS: BE VERY CAREFUL WHEN FLYING") - wrapMode: Text.WordWrap - color: qgcPal.warningText - font.pointSize: ScreenTools.smallFontPointSize - } - QGCLabel { anchors.left: parent.left anchors.right: parent.right