diff --git a/src/MeasurementComplexItem/MeasurementComplexItem.cc b/src/MeasurementComplexItem/MeasurementComplexItem.cc index 4a09a24190eab8711d48d273e425c4d59dfde0ad..41262996d26ddbef68e326bb5a51f15a1b880f33 100644 --- a/src/MeasurementComplexItem/MeasurementComplexItem.cc +++ b/src/MeasurementComplexItem/MeasurementComplexItem.cc @@ -20,8 +20,6 @@ #include #include -#define CLIPPER_SCALE 1000000 - QGC_LOGGING_CATEGORY(MeasurementComplexItemLog, "MeasurementComplexItemLog") template @@ -39,8 +37,7 @@ const QString MeasurementComplexItem::name(tr("Measurement")); MeasurementComplexItem::MeasurementComplexItem( PlanMasterController *masterController, bool flyView, const QString &kmlOrShpFile, QObject *parent) - : ComplexMissionItem(masterController, flyView, parent), - _masterController(masterController), _sequenceNumber(0), + : ComplexMissionItem(masterController, flyView, parent), _sequenceNumber(0), _followTerrain(false), _state(STATE::IDLE), _metaDataMap(FactMetaData::createMapFromJsonFile( QStringLiteral(":/json/MeasurementComplexItem.SettingsGroup.json"), @@ -86,9 +83,15 @@ MeasurementComplexItem::MeasurementComplexItem( } } }); + + // Connect readyForSave connect(this, &MeasurementComplexItem::idleChanged, this, &MeasurementComplexItem::readyForSaveStateChanged); + // Connect flightPathSegments + connect(this, &MeasurementComplexItem::routeChanged, this, + &MeasurementComplexItem::_updateFlightpathSegments); + // Connect complexDistance. connect(this, &MeasurementComplexItem::routeChanged, [this] { emit this->complexDistanceChanged(); }); @@ -385,6 +388,43 @@ bool MeasurementComplexItem::_idle(MeasurementComplexItem::STATE state) { return state == STATE::IDLE; } +void MeasurementComplexItem::_updateFlightpathSegments() { + if (_cTerrainCollisionSegments != 0) { + _cTerrainCollisionSegments = 0; + emit terrainCollisionChanged(false); + qCritical() << "add alt color here..."; + } + + _flightPathSegments.beginReset(); + _flightPathSegments.clearAndDeleteContents(); + + if (_route.size() > 2) { + bool ok = false; + double alt = _altitude.rawValue().toDouble(&ok) + + _masterController->missionController() + ->plannedHomePosition() + .altitude(); + if (ok) { + auto prev = _route.cbegin(); + for (auto next = _route.cbegin() + 1; next != _route.end(); ++next) { + auto v1 = prev->value(); + auto v2 = next->value(); + _appendFlightPathSegment(v1, alt, v2, alt); + prev = next; + } + } else { + qCCritical(MeasurementComplexItemLog) << "_altitude fact not ok."; + } + } + + _flightPathSegments.endReset(); + + if (_cTerrainCollisionSegments != 0) { + emit terrainCollisionChanged(true); + } + + _masterController->missionController()->recalcTerrainProfile(); +} void MeasurementComplexItem::_setAreaData( MeasurementComplexItem::PtrAreaData data) { if (_pCurrentData != data) { diff --git a/src/MeasurementComplexItem/MeasurementComplexItem.h b/src/MeasurementComplexItem/MeasurementComplexItem.h index 836ec2dedff6b47f1067b1595efe18f3f07451f5..adba43f7ed4a0dafd0b7026a7023dbed63f7c5e4 100644 --- a/src/MeasurementComplexItem/MeasurementComplexItem.h +++ b/src/MeasurementComplexItem/MeasurementComplexItem.h @@ -174,9 +174,9 @@ private: static bool _calculating(STATE state); static bool _editing(STATE state); static bool _idle(STATE state); + void _updateFlightpathSegments(); // Hirarcical stuff. - PlanMasterController *_masterController; int _sequenceNumber; bool _followTerrain; diff --git a/src/MeasurementComplexItem/qml/ParameterEditor.qml b/src/MeasurementComplexItem/qml/ParameterEditor.qml index be7897e08a872ee45cc7f51ea20bf9ee398cb747..bd06a848ad90ab12ca0894475834c6afb0d14370 100644 --- a/src/MeasurementComplexItem/qml/ParameterEditor.qml +++ b/src/MeasurementComplexItem/qml/ParameterEditor.qml @@ -58,7 +58,15 @@ ColumnLayout { columns: 2 visible: generalHeader.checked - QGCLabel { text: qsTr("Altitude!!!") } + QGCLabel { + text: qsTr("Altitude") + Layout.fillWidth: true + } + FactTextField { + fact: missionItem.altitude + Layout.fillWidth: true + } + QGCLabel { text: qsTr("Relative Altitude!!!") } QGCLabel {