Commit 830d7dee authored by Don Gagne's avatar Don Gagne

Merge pull request #1860 from DonLakeFlyer/MissionWork

Mission work
parents 00b393ba faa7500c
...@@ -28,25 +28,49 @@ ...@@ -28,25 +28,49 @@
#include <QtQml> #include <QtQml>
Fact::Fact(void) : Fact::Fact(QObject* parent)
_componentId(-1), : QObject(parent)
_value(0), , _componentId(-1)
_type(FactMetaData::valueTypeInt32), , _value(0)
_metaData(NULL) , _type(FactMetaData::valueTypeInt32)
, _metaData(NULL)
{ {
FactMetaData* metaData = new FactMetaData(_type, this); FactMetaData* metaData = new FactMetaData(_type, this);
setMetaData(metaData); setMetaData(metaData);
} }
Fact::Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObject* parent) : Fact::Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObject* parent)
QObject(parent), : QObject(parent)
_name(name), , _name(name)
_componentId(componentId), , _componentId(componentId)
_value(0), , _value(0)
_type(type), , _type(type)
_metaData(NULL) , _metaData(NULL)
{ {
FactMetaData* metaData = new FactMetaData(_type, this);
setMetaData(metaData);
}
Fact::Fact(const Fact& other, QObject* parent)
: QObject(parent)
{
*this = other;
}
const Fact& Fact::operator=(const Fact& other)
{
_name = other._name;
_componentId = other._componentId;
_value = other._value;
_type = other._type;
if (_metaData && other._metaData) {
*_metaData = *other._metaData;
} else {
_metaData = NULL;
}
return *this;
} }
void Fact::forceSetValue(const QVariant& value) void Fact::forceSetValue(const QVariant& value)
......
...@@ -40,9 +40,12 @@ class Fact : public QObject ...@@ -40,9 +40,12 @@ class Fact : public QObject
Q_OBJECT Q_OBJECT
public: public:
Fact(void); Fact(QObject* parent = NULL);
Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObject* parent = NULL); Fact(int componentId, QString name, FactMetaData::ValueType_t type, QObject* parent = NULL);
Fact(const Fact& other, QObject* parent = NULL);
const Fact& operator=(const Fact& other);
Q_PROPERTY(int componentId READ componentId CONSTANT) Q_PROPERTY(int componentId READ componentId CONSTANT)
Q_PROPERTY(QString name READ name CONSTANT) Q_PROPERTY(QString name READ name CONSTANT)
Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged USER true) Q_PROPERTY(QVariant value READ value WRITE setValue NOTIFY valueChanged USER true)
......
...@@ -32,6 +32,20 @@ ...@@ -32,6 +32,20 @@
#include <limits> #include <limits>
FactMetaData::FactMetaData(QObject* parent) :
QObject(parent),
_group("*Default Group"),
_type(valueTypeInt32),
_defaultValue(0),
_defaultValueAvailable(false),
_min(_minForType()),
_max(_maxForType()),
_minIsDefaultForType(true),
_maxIsDefaultForType(true)
{
}
FactMetaData::FactMetaData(ValueType_t type, QObject* parent) : FactMetaData::FactMetaData(ValueType_t type, QObject* parent) :
QObject(parent), QObject(parent),
_group("*Default Group"), _group("*Default Group"),
...@@ -46,6 +60,26 @@ FactMetaData::FactMetaData(ValueType_t type, QObject* parent) : ...@@ -46,6 +60,26 @@ FactMetaData::FactMetaData(ValueType_t type, QObject* parent) :
} }
FactMetaData::FactMetaData(const FactMetaData& other, QObject* parent)
: QObject(parent)
{
*this = other;
}
const FactMetaData& FactMetaData::operator=(const FactMetaData& other)
{
_group = other._group;
_type = other._type;
_defaultValue = other._defaultValue;
_defaultValueAvailable = other._defaultValueAvailable;
_min = other._min;
_max = other._max;
_minIsDefaultForType = other._minIsDefaultForType;
_maxIsDefaultForType = other._maxIsDefaultForType;
return *this;
}
QVariant FactMetaData::defaultValue(void) QVariant FactMetaData::defaultValue(void)
{ {
if (_defaultValueAvailable) { if (_defaultValueAvailable) {
......
...@@ -52,7 +52,11 @@ public: ...@@ -52,7 +52,11 @@ public:
valueTypeDouble valueTypeDouble
} ValueType_t; } ValueType_t;
FactMetaData(QObject* parent = NULL);
FactMetaData(ValueType_t type, QObject* parent = NULL); FactMetaData(ValueType_t type, QObject* parent = NULL);
FactMetaData(const FactMetaData& other, QObject* parent = NULL);
const FactMetaData& operator=(const FactMetaData& other);
// Property accessors // Property accessors
QString name(void) { return _name; } QString name(void) { return _name; }
......
...@@ -60,28 +60,28 @@ MissionItem::MissionItem(QObject* parent, ...@@ -60,28 +60,28 @@ MissionItem::MissionItem(QObject* parent,
: QObject(parent) : QObject(parent)
, _sequenceNumber(sequenceNumber) , _sequenceNumber(sequenceNumber)
, _coordinate(coordinate) , _coordinate(coordinate)
, _yawRadians(param4)
, _frame(frame) , _frame(frame)
, _action(action) , _action(action)
, _autocontinue(autocontinue) , _autocontinue(autocontinue)
, _isCurrentItem(isCurrentItem) , _isCurrentItem(isCurrentItem)
, _orbit(param3)
, _param1(param1)
, _param2(param2)
, _reachedTime(0) , _reachedTime(0)
, _yawFact(NULL) , _yawRadiansFact(NULL)
{ {
_yawFact = new Fact(0, "Heading:", FactMetaData::valueTypeDouble, this); _yawRadiansFact = new Fact(0, "Heading:", FactMetaData::valueTypeDouble, this);
_pitchFact = new Fact(0, "Pitch:", FactMetaData::valueTypeDouble, this); _loiterOrbitRadiusFact = new Fact(0, "Radius:", FactMetaData::valueTypeDouble, this);
_loiterRadiusFact = new Fact(0, "Radius:", FactMetaData::valueTypeDouble, this); _param1Fact = new Fact(0, QString(), FactMetaData::valueTypeDouble, this);
_param1Fact = new Fact(0, QString(), FactMetaData::valueTypeDouble, this); _param2Fact = new Fact(0, QString(), FactMetaData::valueTypeDouble, this);
_param2Fact = new Fact(0, QString(), FactMetaData::valueTypeDouble, this);
setParam1(param1);
setParam2(param2);
setYawRadians(param4);
setLoiterOrbitRadius(param3);
// FIXME: Need to fill out more meta data // FIXME: Need to fill out more meta data
_yawMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this); FactMetaData* yawMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this);
_yawMetaData->setUnits("degrees"); yawMetaData->setUnits("degrees");
_pitchMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this); _pitchMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this);
_pitchMetaData->setUnits("degrees"); _pitchMetaData->setUnits("degrees");
...@@ -92,8 +92,8 @@ MissionItem::MissionItem(QObject* parent, ...@@ -92,8 +92,8 @@ MissionItem::MissionItem(QObject* parent,
_holdTimeMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this); _holdTimeMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this);
_holdTimeMetaData->setUnits("seconds"); _holdTimeMetaData->setUnits("seconds");
_loiterRadiusMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this); FactMetaData* loiterOrbitRadiusMetaData = new FactMetaData(FactMetaData::valueTypeDouble, this);
_loiterRadiusMetaData->setUnits("meters"); loiterOrbitRadiusMetaData->setUnits("meters");
_loiterTurnsMetaData = new FactMetaData(FactMetaData::valueTypeInt32, this); _loiterTurnsMetaData = new FactMetaData(FactMetaData::valueTypeInt32, this);
_loiterTurnsMetaData->setUnits("count"); _loiterTurnsMetaData->setUnits("count");
...@@ -110,14 +110,28 @@ MissionItem::MissionItem(QObject* parent, ...@@ -110,14 +110,28 @@ MissionItem::MissionItem(QObject* parent,
_jumpRepeatMetaData = new FactMetaData(FactMetaData::valueTypeInt32, this); _jumpRepeatMetaData = new FactMetaData(FactMetaData::valueTypeInt32, this);
_jumpRepeatMetaData->setUnits("count"); _jumpRepeatMetaData->setUnits("count");
_yawFact->setMetaData(_yawMetaData); _yawRadiansFact->setMetaData(yawMetaData);
_pitchFact->setMetaData(_pitchMetaData); _loiterOrbitRadiusFact->setMetaData(loiterOrbitRadiusMetaData);
_loiterRadiusFact->setMetaData(_loiterRadiusMetaData);
} }
MissionItem::MissionItem(const MissionItem& other) MissionItem::MissionItem(const MissionItem& other, QObject* parent)
: QObject(NULL) : QObject(parent)
{ {
_yawRadiansFact = new Fact(this);
_loiterOrbitRadiusFact = new Fact(this);
_param1Fact = new Fact(this);
_param2Fact = new Fact(this);
_pitchMetaData = new FactMetaData(this);
_acceptanceRadiusMetaData = new FactMetaData(this);
_holdTimeMetaData = new FactMetaData(this);
_loiterTurnsMetaData = new FactMetaData(this);
_loiterSecondsMetaData = new FactMetaData(this);
_delaySecondsMetaData = new FactMetaData(this);
_jumpSequenceMetaData = new FactMetaData(this);
_jumpRepeatMetaData = new FactMetaData(this);
*this = other; *this = other;
} }
...@@ -130,15 +144,25 @@ const MissionItem& MissionItem::operator=(const MissionItem& other) ...@@ -130,15 +144,25 @@ const MissionItem& MissionItem::operator=(const MissionItem& other)
_sequenceNumber = other._sequenceNumber; _sequenceNumber = other._sequenceNumber;
_isCurrentItem = other._isCurrentItem; _isCurrentItem = other._isCurrentItem;
_coordinate = other._coordinate; _coordinate = other._coordinate;
_yawRadians = other._yawRadians;
_frame = other._frame; _frame = other._frame;
_action = other._action; _action = other._action;
_autocontinue = other._autocontinue; _autocontinue = other._autocontinue;
_orbit = other._orbit;
_param1 = other._param1;
_param2 = other._param2;
_reachedTime = other._reachedTime; _reachedTime = other._reachedTime;
*_yawRadiansFact = *other._yawRadiansFact;
*_loiterOrbitRadiusFact = *other._loiterOrbitRadiusFact;
*_param1Fact = *other._param1Fact;
*_param2Fact = *other._param2Fact;
*_pitchMetaData = *other._pitchMetaData;
*_acceptanceRadiusMetaData = *other._acceptanceRadiusMetaData;
*_holdTimeMetaData = *other._holdTimeMetaData;
*_loiterTurnsMetaData = *other._loiterTurnsMetaData;
*_loiterSecondsMetaData = *other._loiterSecondsMetaData;
*_delaySecondsMetaData = *other._delaySecondsMetaData;
*_jumpSequenceMetaData = *other._jumpSequenceMetaData;
*_jumpRepeatMetaData = *other._jumpRepeatMetaData;
return *this; return *this;
} }
...@@ -154,7 +178,7 @@ void MissionItem::save(QTextStream &saveStream) ...@@ -154,7 +178,7 @@ void MissionItem::save(QTextStream &saveStream)
position = position.arg(y(), 0, 'g', 18); position = position.arg(y(), 0, 'g', 18);
position = position.arg(z(), 0, 'g', 18); position = position.arg(z(), 0, 'g', 18);
QString parameters("%1\t%2\t%3\t%4"); QString parameters("%1\t%2\t%3\t%4");
parameters = parameters.arg(_param1, 0, 'g', 18).arg(_param2, 0, 'g', 18).arg(_orbit, 0, 'g', 18).arg(_yawRadians, 0, 'g', 18); parameters = parameters.arg(getParam2(), 0, 'g', 18).arg(getParam2(), 0, 'g', 18).arg(loiterOrbitRadius(), 0, 'g', 18).arg(yawRadians(), 0, 'g', 18);
// FORMAT: <INDEX> <CURRENT WP> <COORD FRAME> <COMMAND> <PARAM1> <PARAM2> <PARAM3> <PARAM4> <PARAM5/X/LONGITUDE> <PARAM6/Y/LATITUDE> <PARAM7/Z/ALTITUDE> <AUTOCONTINUE> <DESCRIPTION> // FORMAT: <INDEX> <CURRENT WP> <COORD FRAME> <COMMAND> <PARAM1> <PARAM2> <PARAM3> <PARAM4> <PARAM5/X/LONGITUDE> <PARAM6/Y/LATITUDE> <PARAM7/Z/ALTITUDE> <AUTOCONTINUE> <DESCRIPTION>
// as documented here: http://qgroundcontrol.org/waypoint_protocol // as documented here: http://qgroundcontrol.org/waypoint_protocol
saveStream << this->sequenceNumber() << "\t" << this->isCurrentItem() << "\t" << this->getFrame() << "\t" << this->getAction() << "\t" << parameters << "\t" << position << "\t" << this->getAutoContinue() << "\r\n"; //"\t" << this->getDescription() << "\r\n"; saveStream << this->sequenceNumber() << "\t" << this->isCurrentItem() << "\t" << this->getFrame() << "\t" << this->getAction() << "\t" << parameters << "\t" << position << "\t" << this->getAutoContinue() << "\r\n"; //"\t" << this->getDescription() << "\r\n";
...@@ -168,9 +192,9 @@ bool MissionItem::load(QTextStream &loadStream) ...@@ -168,9 +192,9 @@ bool MissionItem::load(QTextStream &loadStream)
setIsCurrentItem(wpParams[1].toInt() == 1 ? true : false); setIsCurrentItem(wpParams[1].toInt() == 1 ? true : false);
_frame = (MAV_FRAME) wpParams[2].toInt(); _frame = (MAV_FRAME) wpParams[2].toInt();
_action = (MAV_CMD) wpParams[3].toInt(); _action = (MAV_CMD) wpParams[3].toInt();
_param1 = wpParams[4].toDouble(); setParam1(wpParams[4].toDouble());
_param2 = wpParams[5].toDouble(); setParam2(wpParams[5].toDouble());
_orbit = wpParams[6].toDouble(); setLoiterOrbitRadius(wpParams[6].toDouble());
setYawRadians(wpParams[7].toDouble()); setYawRadians(wpParams[7].toDouble());
setLatitude(wpParams[8].toDouble()); setLatitude(wpParams[8].toDouble());
setLongitude(wpParams[9].toDouble()); setLongitude(wpParams[9].toDouble());
...@@ -253,7 +277,7 @@ void MissionItem::setAction(int /*MAV_CMD*/ action) ...@@ -253,7 +277,7 @@ void MissionItem::setAction(int /*MAV_CMD*/ action)
if (_action == MAV_CMD_NAV_TAKEOFF) { if (_action == MAV_CMD_NAV_TAKEOFF) {
// We default to 15 degrees minimum takeoff pitch // We default to 15 degrees minimum takeoff pitch
_param1 = 15.0; setParam1(15.0);
} }
emit changed(this); emit changed(this);
...@@ -291,21 +315,14 @@ void MissionItem::setIsCurrentItem(bool isCurrentItem) ...@@ -291,21 +315,14 @@ void MissionItem::setIsCurrentItem(bool isCurrentItem)
void MissionItem::setAcceptanceRadius(double radius) void MissionItem::setAcceptanceRadius(double radius)
{ {
if (_param2 != radius) setParam2(radius);
{
_param2 = radius;
emit changed(this);
emit valueStringsChanged(valueStrings());
}
} }
void MissionItem::setParam1(double param1) void MissionItem::setParam1(double param1)
{ {
//// // qDebug() << "SENDER:" << QObject::sender(); if (getParam1() != param1)
//// // qDebug() << "PARAM1 SET REQ:" << param1;
if (_param1 != param1)
{ {
_param1 = param1; _param1Fact->setValue(param1);
emit changed(this); emit changed(this);
emit valueStringsChanged(valueStrings()); emit valueStringsChanged(valueStrings());
} }
...@@ -313,9 +330,9 @@ void MissionItem::setParam1(double param1) ...@@ -313,9 +330,9 @@ void MissionItem::setParam1(double param1)
void MissionItem::setParam2(double param2) void MissionItem::setParam2(double param2)
{ {
if (_param2 != param2) if (getParam2() != param2)
{ {
_param2 = param2; _param2Fact->setValue(param2);
emit valueStringsChanged(valueStrings()); emit valueStringsChanged(valueStrings());
emit changed(this); emit changed(this);
} }
...@@ -323,20 +340,12 @@ void MissionItem::setParam2(double param2) ...@@ -323,20 +340,12 @@ void MissionItem::setParam2(double param2)
void MissionItem::setParam3(double param3) void MissionItem::setParam3(double param3)
{ {
if (_orbit != param3) { setLoiterOrbitRadius(param3);
_orbit = param3;
emit valueStringsChanged(valueStrings());
emit changed(this);
}
} }
void MissionItem::setParam4(double param4) void MissionItem::setParam4(double param4)
{ {
if (_yawRadians != param4) { setYawRadians(param4);
_yawRadians = param4;
emit changed(this);
emit valueStringsChanged(valueStrings());
}
} }
void MissionItem::setParam5(double param5) void MissionItem::setParam5(double param5)
...@@ -366,10 +375,10 @@ void MissionItem::setParam7(double param7) ...@@ -366,10 +375,10 @@ void MissionItem::setParam7(double param7)
} }
} }
void MissionItem::setLoiterOrbit(double orbit) void MissionItem::setLoiterOrbitRadius(double radius)
{ {
if (_orbit != orbit) { if (loiterOrbitRadius() != radius) {
_orbit = orbit; _loiterOrbitRadiusFact->setValue(radius);
emit valueStringsChanged(valueStrings()); emit valueStringsChanged(valueStrings());
emit changed(this); emit changed(this);
} }
...@@ -377,20 +386,12 @@ void MissionItem::setLoiterOrbit(double orbit) ...@@ -377,20 +386,12 @@ void MissionItem::setLoiterOrbit(double orbit)
void MissionItem::setHoldTime(int holdTime) void MissionItem::setHoldTime(int holdTime)
{ {
if (_param1 != holdTime) { setParam1(holdTime);
_param1 = holdTime;
emit valueStringsChanged(valueStrings());
emit changed(this);
}
} }
void MissionItem::setHoldTime(double holdTime) void MissionItem::setHoldTime(double holdTime)
{ {
if (_param1 != holdTime) { setParam1(holdTime);
_param1 = holdTime;
emit changed(this);
emit valueStringsChanged(valueStrings());
}
} }
bool MissionItem::specifiesCoordinate(void) const bool MissionItem::specifiesCoordinate(void) const
...@@ -508,30 +509,30 @@ QStringList MissionItem::valueStrings(void) ...@@ -508,30 +509,30 @@ QStringList MissionItem::valueStrings(void)
switch (_action) { switch (_action) {
case MAV_CMD_NAV_WAYPOINT: case MAV_CMD_NAV_WAYPOINT:
list << _oneDecimalString(_coordinate.altitude()) << _oneDecimalString(_yawRadians * (180.0 / M_PI)) << _oneDecimalString(_param2) << _oneDecimalString(_param1); list << _oneDecimalString(_coordinate.altitude()) << _oneDecimalString(yawDegrees()) << _oneDecimalString(getParam2()) << _oneDecimalString(getParam1());
break; break;
case MAV_CMD_NAV_LOITER_UNLIM: case MAV_CMD_NAV_LOITER_UNLIM:
list << _oneDecimalString(_yawRadians * (180.0 / M_PI)) << _oneDecimalString(_orbit); list << _oneDecimalString(yawRadians() * (180.0 / M_PI)) << _oneDecimalString(loiterOrbitRadius());
break; break;
case MAV_CMD_NAV_LOITER_TURNS: case MAV_CMD_NAV_LOITER_TURNS:
list << _oneDecimalString(_yawRadians * (180.0 / M_PI)) << _oneDecimalString(_orbit) << _oneDecimalString(_param1); list << _oneDecimalString(yawRadians() * (180.0 / M_PI)) << _oneDecimalString(loiterOrbitRadius()) << _oneDecimalString(getParam1());
break; break;
case MAV_CMD_NAV_LOITER_TIME: case MAV_CMD_NAV_LOITER_TIME:
list << _oneDecimalString(_yawRadians * (180.0 / M_PI)) << _oneDecimalString(_orbit) << _oneDecimalString(_param1); list << _oneDecimalString(yawRadians() * (180.0 / M_PI)) << _oneDecimalString(loiterOrbitRadius()) << _oneDecimalString(getParam1());
break; break;
case MAV_CMD_NAV_RETURN_TO_LAUNCH: case MAV_CMD_NAV_RETURN_TO_LAUNCH:
break; break;
case MAV_CMD_NAV_LAND: case MAV_CMD_NAV_LAND:
list << _oneDecimalString(_coordinate.altitude()) << _oneDecimalString(_yawRadians * (180.0 / M_PI)); list << _oneDecimalString(_coordinate.altitude()) << _oneDecimalString(yawRadians() * (180.0 / M_PI));
break; break;
case MAV_CMD_NAV_TAKEOFF: case MAV_CMD_NAV_TAKEOFF:
list << _oneDecimalString(_coordinate.altitude()) << _oneDecimalString(_yawRadians * (180.0 / M_PI)) << _oneDecimalString(_param1); list << _oneDecimalString(_coordinate.altitude()) << _oneDecimalString(yawRadians() * (180.0 / M_PI)) << _oneDecimalString(getParam1());
break; break;
case MAV_CMD_CONDITION_DELAY: case MAV_CMD_CONDITION_DELAY:
list << _oneDecimalString(_param1); list << _oneDecimalString(getParam1());
break; break;
case MAV_CMD_DO_JUMP: case MAV_CMD_DO_JUMP:
list << _oneDecimalString(_param1) << _oneDecimalString(_param2); list << _oneDecimalString(getParam1()) << _oneDecimalString(getParam2());
break; break;
default: default:
break; break;
...@@ -588,36 +589,38 @@ QmlObjectListModel* MissionItem::facts(void) ...@@ -588,36 +589,38 @@ QmlObjectListModel* MissionItem::facts(void)
_param2Fact->setMetaData(_acceptanceRadiusMetaData); _param2Fact->setMetaData(_acceptanceRadiusMetaData);
_param1Fact->_setName("Hold:"); _param1Fact->_setName("Hold:");
_param1Fact->setMetaData(_holdTimeMetaData); _param1Fact->setMetaData(_holdTimeMetaData);
model->append(_yawFact); model->append(_yawRadiansFact);
model->append(_param2Fact); model->append(_param2Fact);
model->append(_param1Fact); model->append(_param1Fact);
break; break;
case MAV_CMD_NAV_LOITER_UNLIM: case MAV_CMD_NAV_LOITER_UNLIM:
model->append(_yawFact); model->append(_yawRadiansFact);
model->append(_loiterRadiusFact); model->append(_loiterOrbitRadiusFact);
break; break;
case MAV_CMD_NAV_LOITER_TURNS: case MAV_CMD_NAV_LOITER_TURNS:
_param1Fact->_setName("Turns:"); _param1Fact->_setName("Turns:");
_param1Fact->setMetaData(_loiterTurnsMetaData); _param1Fact->setMetaData(_loiterTurnsMetaData);
model->append(_yawFact); model->append(_yawRadiansFact);
model->append(_loiterRadiusFact); model->append(_loiterOrbitRadiusFact);
model->append(_param1Fact); model->append(_param1Fact);
break; break;
case MAV_CMD_NAV_LOITER_TIME: case MAV_CMD_NAV_LOITER_TIME:
_param1Fact->_setName("Seconds:"); _param1Fact->_setName("Seconds:");
_param1Fact->setMetaData(_loiterSecondsMetaData); _param1Fact->setMetaData(_loiterSecondsMetaData);
model->append(_yawFact); model->append(_yawRadiansFact);
model->append(_loiterRadiusFact); model->append(_loiterOrbitRadiusFact);
model->append(_param1Fact); model->append(_param1Fact);
break; break;
case MAV_CMD_NAV_RETURN_TO_LAUNCH: case MAV_CMD_NAV_RETURN_TO_LAUNCH:
break; break;
case MAV_CMD_NAV_LAND: case MAV_CMD_NAV_LAND:
model->append(_yawFact); model->append(_yawRadiansFact);
break; break;
case MAV_CMD_NAV_TAKEOFF: case MAV_CMD_NAV_TAKEOFF:
model->append(_yawFact); _param1Fact->_setName("Pitch:");
model->append(_pitchFact); _param1Fact->setMetaData(_pitchMetaData);
model->append(_yawRadiansFact);
model->append(_param1Fact);
break; break;
case MAV_CMD_CONDITION_DELAY: case MAV_CMD_CONDITION_DELAY:
_param1Fact->_setName("Seconds:"); _param1Fact->_setName("Seconds:");
...@@ -639,14 +642,14 @@ QmlObjectListModel* MissionItem::facts(void) ...@@ -639,14 +642,14 @@ QmlObjectListModel* MissionItem::facts(void)
double MissionItem::yawRadians(void) const double MissionItem::yawRadians(void) const
{ {
return _yawRadians; return _yawRadiansFact->value().toDouble();
} }
void MissionItem::setYawRadians(double yaw) void MissionItem::setYawRadians(double yaw)
{ {
if (_yawRadians != yaw) if (yawRadians() != yaw)
{ {
_yawRadians = yaw; _yawRadiansFact->setValue(yaw);
emit yawChanged(yaw); emit yawChanged(yaw);
emit changed(this); emit changed(this);
emit valueStringsChanged(valueStrings()); emit valueStringsChanged(valueStrings());
...@@ -656,7 +659,7 @@ void MissionItem::setYawRadians(double yaw) ...@@ -656,7 +659,7 @@ void MissionItem::setYawRadians(double yaw)
double MissionItem::yawDegrees(void) const double MissionItem::yawDegrees(void) const
{ {
return _yawRadians * (180.0 / M_PI); return yawRadians() * (180.0 / M_PI);
} }
void MissionItem::setYawDegrees(double yaw) void MissionItem::setYawDegrees(double yaw)
......
...@@ -53,7 +53,7 @@ public: ...@@ -53,7 +53,7 @@ public:
int frame = MAV_FRAME_GLOBAL, int frame = MAV_FRAME_GLOBAL,
int action = MAV_CMD_NAV_WAYPOINT); int action = MAV_CMD_NAV_WAYPOINT);
MissionItem(const MissionItem& other); MissionItem(const MissionItem& other, QObject* parent = NULL);
~MissionItem(); ~MissionItem();
const MissionItem& operator=(const MissionItem& other); const MissionItem& operator=(const MissionItem& other);
...@@ -125,23 +125,23 @@ public: ...@@ -125,23 +125,23 @@ public:
bool getAutoContinue() const { bool getAutoContinue() const {
return _autocontinue; return _autocontinue;
} }
double getLoiterOrbit() const { double loiterOrbitRadius() const {
return _orbit; return _loiterOrbitRadiusFact->value().toDouble();
} }
double getAcceptanceRadius() const { double getAcceptanceRadius() const {
return _param2; return getParam2();
} }
double getHoldTime() const { double getHoldTime() const {
return _param1; return getParam1();
} }
double getParam1() const { double getParam1() const {
return _param1; return _param1Fact->value().toDouble();
} }
double getParam2() const { double getParam2() const {
return _param2; return _param2Fact->value().toDouble();
} }
double getParam3() const { double getParam3() const {
return _orbit; return loiterOrbitRadius();
} }
double getParam4() const { double getParam4() const {
return yawRadians(); return yawRadians();
...@@ -195,7 +195,7 @@ public: ...@@ -195,7 +195,7 @@ public:
void setFrame (int _frame); void setFrame (int _frame);
void setAutocontinue(bool autoContinue); void setAutocontinue(bool autoContinue);
void setCurrent (bool _current); void setCurrent (bool _current);
void setLoiterOrbit (double _orbit); void setLoiterOrbitRadius (double radius);
void setParam1 (double _param1); void setParam1 (double _param1);
void setParam2 (double _param2); void setParam2 (double _param2);
void setParam3 (double param3); void setParam3 (double param3);
...@@ -226,27 +226,20 @@ private: ...@@ -226,27 +226,20 @@ private:
int _sequenceNumber; int _sequenceNumber;
QGeoCoordinate _coordinate; QGeoCoordinate _coordinate;
double _yawRadians;
int _frame; int _frame;
int _action; int _action;
bool _autocontinue; bool _autocontinue;
bool _isCurrentItem; bool _isCurrentItem;
double _orbit;
double _param1;
double _param2;
quint64 _reachedTime; quint64 _reachedTime;
Fact* _yawFact; Fact* _yawRadiansFact;
Fact* _pitchFact; Fact* _loiterOrbitRadiusFact;
Fact* _loiterRadiusFact;
Fact* _param1Fact; Fact* _param1Fact;
Fact* _param2Fact; Fact* _param2Fact;
FactMetaData* _yawMetaData;
FactMetaData* _pitchMetaData; FactMetaData* _pitchMetaData;
FactMetaData* _acceptanceRadiusMetaData; FactMetaData* _acceptanceRadiusMetaData;
FactMetaData* _holdTimeMetaData; FactMetaData* _holdTimeMetaData;
FactMetaData* _loiterRadiusMetaData;
FactMetaData* _loiterTurnsMetaData; FactMetaData* _loiterTurnsMetaData;
FactMetaData* _loiterSecondsMetaData; FactMetaData* _loiterSecondsMetaData;
FactMetaData* _delaySecondsMetaData; FactMetaData* _delaySecondsMetaData;
......
...@@ -104,7 +104,7 @@ QRectF Waypoint2DIcon::boundingRect() const ...@@ -104,7 +104,7 @@ QRectF Waypoint2DIcon::boundingRect() const
} }
if (((waypoint->getAction() == (int)MAV_CMD_NAV_LOITER_UNLIM) || (waypoint->getAction() == (int)MAV_CMD_NAV_LOITER_TIME) || (waypoint->getAction() == (int)MAV_CMD_NAV_LOITER_TURNS))) if (((waypoint->getAction() == (int)MAV_CMD_NAV_LOITER_UNLIM) || (waypoint->getAction() == (int)MAV_CMD_NAV_LOITER_TIME) || (waypoint->getAction() == (int)MAV_CMD_NAV_LOITER_TURNS)))
{ {
loiter = map->metersToPixels(waypoint->getLoiterOrbit(), coord); loiter = map->metersToPixels(waypoint->loiterOrbitRadius(), coord);
} }
} }
...@@ -306,7 +306,7 @@ void Waypoint2DIcon::paint(QPainter *painter, const QStyleOptionGraphicsItem *op ...@@ -306,7 +306,7 @@ void Waypoint2DIcon::paint(QPainter *painter, const QStyleOptionGraphicsItem *op
penDash.setWidth(1); penDash.setWidth(1);
//penDash.setStyle(Qt::DotLine); //penDash.setStyle(Qt::DotLine);
// A negative radius indicates counter-clockwise rotation, but we still want to draw it positive // A negative radius indicates counter-clockwise rotation, but we still want to draw it positive
const int loiter = map->metersToPixels(fabs(waypoint->getLoiterOrbit()), Coord()); const int loiter = map->metersToPixels(fabs(waypoint->loiterOrbitRadius()), Coord());
if (loiter > picture.width()/2) if (loiter > picture.width()/2)
{ {
painter->setPen(penBlack); painter->setPen(penBlack);
......
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