13 changed files with 372 additions and 27 deletions
@ -0,0 +1,41 @@
@@ -0,0 +1,41 @@
|
||||
/**************************************************************************** |
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org> |
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
import QtQuick 2.2 |
||||
import QtQuick.Controls 1.2 |
||||
import QtQuick.Dialogs 1.2 |
||||
import QtQuick.Layouts 1.2 |
||||
|
||||
import QGroundControl 1.0 |
||||
import QGroundControl.ScreenTools 1.0 |
||||
import QGroundControl.Vehicle 1.0 |
||||
import QGroundControl.Controls 1.0 |
||||
import QGroundControl.FactControls 1.0 |
||||
import QGroundControl.Palette 1.0 |
||||
|
||||
// Editor for Fixed Wing Landing Pattern complex mission item |
||||
Rectangle { |
||||
id: _root |
||||
height: visible ? (editorColumn.height + (_margin * 2)) : 0 |
||||
width: availableWidth |
||||
color: qgcPal.windowShadeDark |
||||
radius: _radius |
||||
|
||||
// The following properties must be available up the hierarchy chain |
||||
//property real availableWidth ///< Width for control |
||||
//property var missionItem ///< Mission Item for editor |
||||
|
||||
property real _margin: ScreenTools.defaultFontPixelWidth * 0.25 |
||||
|
||||
Column { |
||||
id: editorColumn |
||||
|
||||
QGCLabel { text: "WIP" } |
||||
} |
||||
} |
@ -0,0 +1,2 @@
@@ -0,0 +1,2 @@
|
||||
[ |
||||
] |
@ -0,0 +1,182 @@
@@ -0,0 +1,182 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#include "FixedWingLandingComplexItem.h" |
||||
#include "JsonHelper.h" |
||||
#include "MissionController.h" |
||||
#include "QGCGeo.h" |
||||
#include "QGroundControlQmlGlobal.h" |
||||
|
||||
#include <QPolygonF> |
||||
|
||||
QGC_LOGGING_CATEGORY(FixedWingLandingComplexItemLog, "FixedWingLandingComplexItemLog") |
||||
|
||||
const char* FixedWingLandingComplexItem::jsonComplexItemTypeValue = "fwLandingPattern"; |
||||
|
||||
QMap<QString, FactMetaData*> FixedWingLandingComplexItem::_metaDataMap; |
||||
|
||||
FixedWingLandingComplexItem::FixedWingLandingComplexItem(Vehicle* vehicle, QObject* parent) |
||||
: ComplexMissionItem(vehicle, parent) |
||||
, _sequenceNumber(0) |
||||
, _dirty(false) |
||||
{ |
||||
_editorQml = "qrc:/qml/FWLandingPatternEditor.qml"; |
||||
|
||||
if (_metaDataMap.isEmpty()) { |
||||
_metaDataMap = FactMetaData::createMapFromJsonFile(QStringLiteral(":/json/FWLandingPattern.FactMetaData.json"), NULL /* metaDataParent */); |
||||
} |
||||
} |
||||
|
||||
int FixedWingLandingComplexItem::lastSequenceNumber(void) const |
||||
{ |
||||
return _sequenceNumber; |
||||
} |
||||
|
||||
void FixedWingLandingComplexItem::setCoordinate(const QGeoCoordinate& coordinate) |
||||
{ |
||||
if (_coordinate != coordinate) { |
||||
_coordinate = coordinate; |
||||
emit coordinateChanged(_coordinate); |
||||
} |
||||
} |
||||
|
||||
void FixedWingLandingComplexItem::setDirty(bool dirty) |
||||
{ |
||||
if (_dirty != dirty) { |
||||
_dirty = dirty; |
||||
emit dirtyChanged(_dirty); |
||||
} |
||||
} |
||||
|
||||
void FixedWingLandingComplexItem::save(QJsonObject& saveObject) const |
||||
{ |
||||
saveObject[JsonHelper::jsonVersionKey] = 1; |
||||
saveObject[VisualMissionItem::jsonTypeKey] = VisualMissionItem::jsonTypeComplexItemValue; |
||||
saveObject[ComplexMissionItem::jsonComplexItemTypeKey] = jsonComplexItemTypeValue; |
||||
|
||||
// FIXME: Need real implementation
|
||||
} |
||||
|
||||
void FixedWingLandingComplexItem::setSequenceNumber(int sequenceNumber) |
||||
{ |
||||
if (_sequenceNumber != sequenceNumber) { |
||||
_sequenceNumber = sequenceNumber; |
||||
emit sequenceNumberChanged(sequenceNumber); |
||||
emit lastSequenceNumberChanged(lastSequenceNumber()); |
||||
} |
||||
} |
||||
|
||||
bool FixedWingLandingComplexItem::load(const QJsonObject& complexObject, int sequenceNumber, QString& errorString) |
||||
{ |
||||
// FIXME: Need real implementation
|
||||
Q_UNUSED(complexObject); |
||||
Q_UNUSED(sequenceNumber); |
||||
|
||||
errorString = "NYI"; |
||||
return false; |
||||
} |
||||
|
||||
double FixedWingLandingComplexItem::greatestDistanceTo(const QGeoCoordinate &other) const |
||||
{ |
||||
// FIXME: Need real implementation
|
||||
Q_UNUSED(other); |
||||
|
||||
double greatestDistance = 0.0; |
||||
|
||||
#if 0 |
||||
for (int i=0; i<_gridPoints.count(); i++) { |
||||
QGeoCoordinate currentCoord = _gridPoints[i].value<QGeoCoordinate>(); |
||||
double distance = currentCoord.distanceTo(other); |
||||
if (distance > greatestDistance) { |
||||
greatestDistance = distance; |
||||
} |
||||
} |
||||
#endif |
||||
|
||||
return greatestDistance; |
||||
} |
||||
|
||||
void FixedWingLandingComplexItem::_setExitCoordinate(const QGeoCoordinate& coordinate) |
||||
{ |
||||
if (_exitCoordinate != coordinate) { |
||||
_exitCoordinate = coordinate; |
||||
emit exitCoordinateChanged(coordinate); |
||||
} |
||||
} |
||||
|
||||
bool FixedWingLandingComplexItem::specifiesCoordinate(void) const |
||||
{ |
||||
return true; |
||||
} |
||||
|
||||
QmlObjectListModel* FixedWingLandingComplexItem::getMissionItems(void) const |
||||
{ |
||||
// FIXME: Need real implementation
|
||||
QmlObjectListModel* pMissionItems = new QmlObjectListModel; |
||||
|
||||
#if 0 |
||||
int seqNum = _sequenceNumber; |
||||
for (int i=0; i<_gridPoints.count(); i++) { |
||||
QGeoCoordinate coord = _gridPoints[i].value<QGeoCoordinate>(); |
||||
double altitude = _gridAltitudeFact.rawValue().toDouble(); |
||||
|
||||
MissionItem* item = new MissionItem(seqNum++, // sequence number
|
||||
MAV_CMD_NAV_WAYPOINT, // MAV_CMD
|
||||
_gridAltitudeRelative ? MAV_FRAME_GLOBAL_RELATIVE_ALT : MAV_FRAME_GLOBAL, // MAV_FRAME
|
||||
0.0, 0.0, 0.0, 0.0, // param 1-4
|
||||
coord.latitude(), |
||||
coord.longitude(), |
||||
altitude, |
||||
true, // autoContinue
|
||||
false, // isCurrentItem
|
||||
pMissionItems); // parent - allow delete on pMissionItems to delete everthing
|
||||
pMissionItems->append(item); |
||||
|
||||
if (_cameraTrigger && i == 0) { |
||||
// Turn on camera
|
||||
MissionItem* item = new MissionItem(seqNum++, // sequence number
|
||||
MAV_CMD_DO_SET_CAM_TRIGG_DIST, // MAV_CMD
|
||||
MAV_FRAME_MISSION, // MAV_FRAME
|
||||
_cameraTriggerDistanceFact.rawValue().toDouble(), // trigger distance
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, // param 2-7
|
||||
true, // autoContinue
|
||||
false, // isCurrentItem
|
||||
pMissionItems); // parent - allow delete on pMissionItems to delete everthing
|
||||
pMissionItems->append(item); |
||||
} |
||||
} |
||||
|
||||
if (_cameraTrigger) { |
||||
// Turn off camera
|
||||
MissionItem* item = new MissionItem(seqNum++, // sequence number
|
||||
MAV_CMD_DO_SET_CAM_TRIGG_DIST, // MAV_CMD
|
||||
MAV_FRAME_MISSION, // MAV_FRAME
|
||||
0.0, // trigger distance
|
||||
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, // param 2-7
|
||||
true, // autoContinue
|
||||
false, // isCurrentItem
|
||||
pMissionItems); // parent - allow delete on pMissionItems to delete everthing
|
||||
pMissionItems->append(item); |
||||
} |
||||
#endif |
||||
|
||||
return pMissionItems; |
||||
} |
||||
|
||||
double FixedWingLandingComplexItem::complexDistance(void) const |
||||
{ |
||||
// FIXME: Need real implementation
|
||||
return 0; |
||||
} |
||||
|
||||
void FixedWingLandingComplexItem::setCruiseSpeed(double cruiseSpeed) |
||||
{ |
||||
// FIXME: Need real implementation
|
||||
Q_UNUSED(cruiseSpeed); |
||||
} |
@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
|
||||
/****************************************************************************
|
||||
* |
||||
* (c) 2009-2016 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
|
||||
* |
||||
* QGroundControl is licensed according to the terms in the file |
||||
* COPYING.md in the root of the source code directory. |
||||
* |
||||
****************************************************************************/ |
||||
|
||||
#ifndef FixedWingLandingComplexItem_H |
||||
#define FixedWingLandingComplexItem_H |
||||
|
||||
#include "ComplexMissionItem.h" |
||||
#include "MissionItem.h" |
||||
#include "Fact.h" |
||||
#include "QGCLoggingCategory.h" |
||||
|
||||
Q_DECLARE_LOGGING_CATEGORY(FixedWingLandingComplexItemLog) |
||||
|
||||
class FixedWingLandingComplexItem : public ComplexMissionItem |
||||
{ |
||||
Q_OBJECT |
||||
|
||||
public: |
||||
FixedWingLandingComplexItem(Vehicle* vehicle, QObject* parent = NULL); |
||||
|
||||
// Overrides from ComplexMissionItem
|
||||
|
||||
double complexDistance (void) const final; |
||||
int lastSequenceNumber (void) const final; |
||||
QmlObjectListModel* getMissionItems (void) const final; |
||||
bool load (const QJsonObject& complexObject, int sequenceNumber, QString& errorString) final; |
||||
double greatestDistanceTo (const QGeoCoordinate &other) const final; |
||||
void setCruiseSpeed (double cruiseSpeed) final; |
||||
|
||||
// Overrides from VisualMissionItem
|
||||
|
||||
bool dirty (void) const final { return _dirty; } |
||||
bool isSimpleItem (void) const final { return false; } |
||||
bool isStandaloneCoordinate (void) const final { return false; } |
||||
bool specifiesCoordinate (void) const final; |
||||
QString commandDescription (void) const final { return "Landing Pattern"; } |
||||
QString commandName (void) const final { return "Landing Pattern"; } |
||||
QString abbreviation (void) const final { return "L"; } |
||||
QGeoCoordinate coordinate (void) const final { return _coordinate; } |
||||
QGeoCoordinate exitCoordinate (void) const final { return _exitCoordinate; } |
||||
int sequenceNumber (void) const final { return _sequenceNumber; } |
||||
double flightSpeed (void) final { return std::numeric_limits<double>::quiet_NaN(); } |
||||
|
||||
bool coordinateHasRelativeAltitude (void) const final { return true; } |
||||
bool exitCoordinateHasRelativeAltitude (void) const final { return true; } |
||||
bool exitCoordinateSameAsEntry (void) const final { return true; } |
||||
|
||||
void setDirty (bool dirty) final; |
||||
void setCoordinate (const QGeoCoordinate& coordinate) final; |
||||
void setSequenceNumber (int sequenceNumber) final; |
||||
void save (QJsonObject& saveObject) const final; |
||||
|
||||
static const char* jsonComplexItemTypeValue; |
||||
|
||||
signals: |
||||
|
||||
private slots: |
||||
|
||||
private: |
||||
void _setExitCoordinate(const QGeoCoordinate& coordinate); |
||||
|
||||
int _sequenceNumber; |
||||
bool _dirty; |
||||
QGeoCoordinate _coordinate; |
||||
QGeoCoordinate _exitCoordinate; |
||||
|
||||
static QMap<QString, FactMetaData*> _metaDataMap; |
||||
}; |
||||
|
||||
#endif |
Loading…
Reference in new issue