Commit 74f2823a authored by DonLakeFlyer's avatar DonLakeFlyer

parent 29f87555
...@@ -140,7 +140,7 @@ void MissionController::_init(void) ...@@ -140,7 +140,7 @@ void MissionController::_init(void)
{ {
// We start with an empty mission // We start with an empty mission
_visualItems = new QmlObjectListModel(this); _visualItems = new QmlObjectListModel(this);
_addMissionSettings(_visualItems, false /* addToCenter */); _addMissionSettings(_visualItems);
_initAllVisualItems(); _initAllVisualItems();
} }
...@@ -169,19 +169,17 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque ...@@ -169,19 +169,17 @@ void MissionController::_newMissionItemsAvailableFromVehicle(bool removeAllReque
_missionItemCount = newMissionItems.count(); _missionItemCount = newMissionItems.count();
emit missionItemCountChanged(_missionItemCount); emit missionItemCountChanged(_missionItemCount);
int i = 0; _addMissionSettings(newControllerMissionItems);
if (_controllerVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0) {
int i=0;
if (_controllerVehicle->firmwarePlugin()->sendHomePositionToVehicle() && newMissionItems.count() != 0 && !_flyView) {
// First item is fake home position // First item is fake home position
_addMissionSettings(newControllerMissionItems, false /* addToCenter */);
MissionItem* fakeHomeItem = newMissionItems[0]; MissionItem* fakeHomeItem = newMissionItems[0];
if (fakeHomeItem->coordinate().latitude() != 0 || fakeHomeItem->coordinate().longitude() != 0) { if (fakeHomeItem->coordinate().latitude() != 0 || fakeHomeItem->coordinate().longitude() != 0) {
_settingsItem->setInitialHomePosition(fakeHomeItem->coordinate()); _settingsItem->setInitialHomePosition(fakeHomeItem->coordinate());
} }
i = 1; i = 1;
} }
if (!_controllerVehicle->firmwarePlugin()->sendHomePositionToVehicle() || _visualItems->count() == 0) {
_addMissionSettings(_visualItems, !_flyView && _visualItems->count() > 0 /* addToCenter */);
}
for (; i < newMissionItems.count(); i++) { for (; i < newMissionItems.count(); i++) {
const MissionItem* missionItem = newMissionItems[i]; const MissionItem* missionItem = newMissionItems[i];
...@@ -610,7 +608,7 @@ void MissionController::removeAll(void) ...@@ -610,7 +608,7 @@ void MissionController::removeAll(void)
_visualItems->deleteLater(); _visualItems->deleteLater();
_settingsItem = nullptr; _settingsItem = nullptr;
_visualItems = new QmlObjectListModel(this); _visualItems = new QmlObjectListModel(this);
_addMissionSettings(_visualItems, false /* addToCenter */); _addMissionSettings(_visualItems);
_initAllVisualItems(); _initAllVisualItems();
setDirty(true); setDirty(true);
_resetMissionFlightStatus(); _resetMissionFlightStatus();
...@@ -658,7 +656,7 @@ bool MissionController::_loadJsonMissionFileV1(const QJsonObject& json, QmlObjec ...@@ -658,7 +656,7 @@ bool MissionController::_loadJsonMissionFileV1(const QJsonObject& json, QmlObjec
int nextSequenceNumber = 1; // Start with 1 since home is in 0 int nextSequenceNumber = 1; // Start with 1 since home is in 0
QJsonArray itemArray(json[_jsonItemsKey].toArray()); QJsonArray itemArray(json[_jsonItemsKey].toArray());
_addMissionSettings(visualItems, true /* addToCenter */); _addMissionSettings(visualItems);
if (json.contains(_jsonPlannedHomePositionKey)) { if (json.contains(_jsonPlannedHomePositionKey)) {
SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems); SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems);
if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) { if (item->load(json[_jsonPlannedHomePositionKey].toObject(), 0, errorString)) {
...@@ -925,8 +923,7 @@ bool MissionController::_loadTextMissionFile(QTextStream& stream, QmlObjectListM ...@@ -925,8 +923,7 @@ bool MissionController::_loadTextMissionFile(QTextStream& stream, QmlObjectListM
} }
if (versionOk) { if (versionOk) {
// Start with planned home in center _addMissionSettings(visualItems);
_addMissionSettings(visualItems, true /* addToCenter */);
while (!stream.atEnd()) { while (!stream.atEnd()) {
SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems); SimpleMissionItem* item = new SimpleMissionItem(_controllerVehicle, _flyView, visualItems);
...@@ -978,7 +975,7 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI ...@@ -978,7 +975,7 @@ void MissionController::_initLoadedVisualItems(QmlObjectListModel* loadedVisualI
_visualItems = loadedVisualItems; _visualItems = loadedVisualItems;
if (_visualItems->count() == 0) { if (_visualItems->count() == 0) {
_addMissionSettings(_visualItems, true /* addToCenter */); _addMissionSettings(_visualItems);
} }
MissionController::_scanForAdditionalSettings(_visualItems, _controllerVehicle); MissionController::_scanForAdditionalSettings(_visualItems, _controllerVehicle);
...@@ -1902,48 +1899,50 @@ double MissionController::_normalizeLon(double lon) ...@@ -1902,48 +1899,50 @@ double MissionController::_normalizeLon(double lon)
} }
/// Add the Mission Settings complex item to the front of the items /// Add the Mission Settings complex item to the front of the items
void MissionController::_addMissionSettings(QmlObjectListModel* visualItems, bool addToCenter) void MissionController::_addMissionSettings(QmlObjectListModel* visualItems)
{ {
qCDebug(MissionControllerLog) << "_addMissionSettings";
_settingsItem = new MissionSettingsItem(_controllerVehicle, _flyView, visualItems); _settingsItem = new MissionSettingsItem(_controllerVehicle, _flyView, visualItems);
visualItems->insert(0, _settingsItem);
qCDebug(MissionControllerLog) << "_addMissionSettings addToCenter" << addToCenter; _settingsItem->setHomePositionFromVehicle(_managerVehicle);
}
visualItems->insert(0, _settingsItem); void MissionController::_centerHomePositionOnMissionItems(QmlObjectListModel *visualItems)
{
qCDebug(MissionControllerLog) << "_centerHomePositionOnMissionItems";
if (addToCenter) { if (visualItems->count() > 1) {
if (visualItems->count() > 1) { double north = 0.0;
double north = 0.0; double south = 0.0;
double south = 0.0; double east = 0.0;
double east = 0.0; double west = 0.0;
double west = 0.0; bool firstCoordSet = false;
bool firstCoordSet = false;
for (int i=1; i<visualItems->count(); i++) {
for (int i=1; i<visualItems->count(); i++) { VisualMissionItem* item = qobject_cast<VisualMissionItem*>(visualItems->get(i));
VisualMissionItem* item = qobject_cast<VisualMissionItem*>(visualItems->get(i)); if (item->specifiesCoordinate()) {
if (item->specifiesCoordinate()) { if (firstCoordSet) {
if (firstCoordSet) { double lat = _normalizeLat(item->coordinate().latitude());
double lat = _normalizeLat(item->coordinate().latitude()); double lon = _normalizeLon(item->coordinate().longitude());
double lon = _normalizeLon(item->coordinate().longitude()); north = fmax(north, lat);
north = fmax(north, lat); south = fmin(south, lat);
south = fmin(south, lat); east = fmax(east, lon);
east = fmax(east, lon); west = fmin(west, lon);
west = fmin(west, lon); } else {
} else { firstCoordSet = true;
firstCoordSet = true; north = _normalizeLat(item->coordinate().latitude());
north = _normalizeLat(item->coordinate().latitude()); south = north;
south = north; east = _normalizeLon(item->coordinate().longitude());
east = _normalizeLon(item->coordinate().longitude()); west = east;
west = east;
}
} }
} }
}
if (firstCoordSet) { if (firstCoordSet) {
_settingsItem->setInitialHomePositionFromUser(QGeoCoordinate((south + ((north - south) / 2)) - 90.0, (west + ((east - west) / 2)) - 180.0, 0.0)); _settingsItem->setInitialHomePositionFromUser(QGeoCoordinate((south + ((north - south) / 2)) - 90.0, (west + ((east - west) / 2)) - 180.0, 0.0));
}
} }
} else {
_settingsItem->setHomePositionFromVehicle(_managerVehicle);
} }
} }
......
...@@ -278,7 +278,8 @@ private: ...@@ -278,7 +278,8 @@ private:
bool _findPreviousAltitude(int newIndex, double* prevAltitude, int* prevAltitudeMode); bool _findPreviousAltitude(int newIndex, double* prevAltitude, int* prevAltitudeMode);
static double _normalizeLat(double lat); static double _normalizeLat(double lat);
static double _normalizeLon(double lon); static double _normalizeLon(double lon);
void _addMissionSettings(QmlObjectListModel* visualItems, bool addToCenter); void _addMissionSettings(QmlObjectListModel* visualItems);
void _centerHomePositionOnMissionItems(QmlObjectListModel* visualItems);
bool _loadJsonMissionFile(const QByteArray& bytes, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFile(const QByteArray& bytes, QmlObjectListModel* visualItems, QString& errorString);
bool _loadJsonMissionFileV1(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFileV1(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString);
bool _loadJsonMissionFileV2(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString); bool _loadJsonMissionFileV2(const QJsonObject& json, QmlObjectListModel* visualItems, QString& errorString);
......
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