diff --git a/ground/src/plugins/magicwaypoint/images/positionfield.svg b/ground/src/plugins/magicwaypoint/images/positionfield.svg
index d68632c16..256d9bd6d 100644
--- a/ground/src/plugins/magicwaypoint/images/positionfield.svg
+++ b/ground/src/plugins/magicwaypoint/images/positionfield.svg
@@ -134,8 +134,8 @@
style="stroke-width:2.1899786;stroke-miterlimit:4;stroke-dasharray:none" />
+ id="desiredPositionObj"
+ transform="translate(-5.3432485,-16.199292)">
+
+
diff --git a/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.cpp b/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.cpp
index faaf349f0..e83462439 100644
--- a/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.cpp
+++ b/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.cpp
@@ -28,6 +28,7 @@
#include "ui_magicwaypoint.h"
#include
+#include
#include
#include
#include
@@ -47,10 +48,14 @@ MagicWaypointGadgetWidget::MagicWaypointGadgetWidget(QWidget *parent) : QLabel(p
m_magicwaypoint->setupUi(this);
// Connect object updated event from UAVObject to also update check boxes
- connect(getPositionDesired(), SIGNAL(objectUpdated(UAVObject*)), this, SLOT(positionDesiredObjectChanged(UAVObject*)));
+ connect(getPositionDesired(), SIGNAL(objectUpdated(UAVObject*)), this, SLOT(positionObjectChanged(UAVObject*)));
+ connect(getPositionActual(), SIGNAL(objectUpdated(UAVObject*)), this, SLOT(positionObjectChanged(UAVObject*)));
+
// Connect updates from the position widget to this widget
connect(m_magicwaypoint->widgetPosition, SIGNAL(positionClicked(double,double)), this, SLOT(positionSelected(double,double)));
- connect(this, SIGNAL(positionObjectChanged(double,double)), m_magicwaypoint->widgetPosition, SLOT(updateIndicator(double,double)));
+ connect(this, SIGNAL(positionActualObjectChanged(double,double)), m_magicwaypoint->widgetPosition, SLOT(updateActualIndicator(double,double)));
+ connect(this, SIGNAL(positionDesiredObjectChanged(double,double)), m_magicwaypoint->widgetPosition, SLOT(updateDesiredIndicator(double,double)));
+
// Catch changes in scale for visualization
connect(m_magicwaypoint->horizontalSliderScale, SIGNAL(valueChanged(int)), this, SLOT(scaleChanged(double)));
}
@@ -61,7 +66,7 @@ MagicWaypointGadgetWidget::~MagicWaypointGadgetWidget()
}
/*!
- \brief Returns the ManualControlCommand UAVObject
+ \brief Returns the @ref PositionDesired UAVObject
*/
PositionDesired* MagicWaypointGadgetWidget::getPositionDesired()
{
@@ -71,24 +76,41 @@ PositionDesired* MagicWaypointGadgetWidget::getPositionDesired()
return obj;
}
+/*!
+ \brief Returns the @ref PositionActual UAVObject
+ */
+PositionActual* MagicWaypointGadgetWidget::getPositionActual()
+{
+ ExtensionSystem::PluginManager *pm = ExtensionSystem::PluginManager::instance();
+ UAVObjectManager *objManager = pm->getObject();
+ PositionActual* obj = dynamic_cast( objManager->getObject(QString("PositionActual")) );
+ return obj;
+}
+
/**
* Detect changes in scale and update visualization (does not change position)
*/
void MagicWaypointGadgetWidget::scaleChanged(int scale) {
Q_UNUSED(scale);
- positionDesiredObjectChanged(getPositionDesired());
+ positionObjectChanged(getPositionDesired());
+ positionObjectChanged(getPositionActual());
}
/**
- * Update displayed position when @ref PositionDesired object is changed
+ * Emit a position changed signal when @ref PositionDesired or @ref PositionActual object is changed
*/
-void MagicWaypointGadgetWidget::positionDesiredObjectChanged(UAVObject* obj)
+void MagicWaypointGadgetWidget::positionObjectChanged(UAVObject* obj)
{
- double north = obj->getField("North")->getDouble();
- double east = obj->getField("East")->getDouble();
double scale = m_magicwaypoint->horizontalSliderScale->value();
+ double north = obj->getField("North")->getDouble() / scale;
+ double east = obj->getField("East")->getDouble() / scale;
+
+ if(obj->getName().compare("PositionDesired")) {
+ emit positionDesiredObjectChanged(north,east);
+ } else {
+ emit positionActualObjectChanged(north,east);
+ }
- emit positionObjectChanged(north/scale,east/scale);
}
/**
diff --git a/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.h b/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.h
index 2b191565f..1e21d0db5 100644
--- a/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.h
+++ b/ground/src/plugins/magicwaypoint/magicwaypointgadgetwidget.h
@@ -30,6 +30,7 @@
#include
#include "uavobjects/positiondesired.h"
+#include "uavobjects/positionactual.h"
class Ui_MagicWaypoint;
@@ -42,15 +43,17 @@ public:
~MagicWaypointGadgetWidget();
signals:
- void positionObjectChanged(double north, double east);
+ void positionActualObjectChanged(double north, double east);
+ void positionDesiredObjectChanged(double north, double east);
protected slots:
void scaleChanged(int scale);
- void positionDesiredObjectChanged(UAVObject *);
+ void positionObjectChanged(UAVObject *);
void positionSelected(double north, double east);
private:
PositionDesired * getPositionDesired();
+ PositionActual * getPositionActual();
Ui_MagicWaypoint * m_magicwaypoint;
};
diff --git a/ground/src/plugins/magicwaypoint/positionfield.cpp b/ground/src/plugins/magicwaypoint/positionfield.cpp
index c0e5e67cd..0863dd7d4 100644
--- a/ground/src/plugins/magicwaypoint/positionfield.cpp
+++ b/ground/src/plugins/magicwaypoint/positionfield.cpp
@@ -55,15 +55,21 @@ PositionField::PositionField(QWidget *parent) :
m_background->setSharedRenderer(m_renderer);
m_background->setElementId(QString("background"));
- m_position = new QGraphicsSvgItem();
- m_position->setSharedRenderer(m_renderer);
- m_position->setElementId(QString("joystickEnd"));
- m_position->setPos(0,0);
+ m_positiondesired = new QGraphicsSvgItem();
+ m_positiondesired->setSharedRenderer(m_renderer);
+ m_positiondesired->setElementId(QString("desiredPosition"));
+ m_positiondesired->setPos(0,0);
+
+ m_positionactual = new QGraphicsSvgItem();
+ m_positionactual->setSharedRenderer(m_renderer);
+ m_positionactual->setElementId(QString("actualPosition"));
+ m_positionactual->setPos(0,0);
QGraphicsScene *l_scene = scene();
l_scene->clear(); // This also deletes all items contained in the scene.
l_scene->addItem(m_background);
- l_scene->addItem(m_position);
+ l_scene->addItem(m_positiondesired);
+ l_scene->addItem(m_positionactual);
l_scene->setSceneRect(m_background->boundingRect());
}
@@ -75,13 +81,19 @@ PositionField::~PositionField()
/**
* @brief Update aircraft position on image (values go from -1 to 1)
*/
-void PositionField::updateIndicator(double north, double east)
+void PositionField::updateDesiredIndicator(double north, double east)
{
QRectF sceneSize = scene()->sceneRect();
- m_position->setPos((east+1)/2*sceneSize.width(),(-north+1)/2*sceneSize.height());
+ m_positiondesired->setPos((east+1)/2*sceneSize.width(),(-north+1)/2*sceneSize.height());
}
+void PositionField::updateActualIndicator(double north, double east)
+{
+ QRectF sceneSize = scene()->sceneRect();
+
+ m_positionactual->setPos((east+1)/2*sceneSize.width(),(-north+1)/2*sceneSize.height());
+}
/**
* @brief Redirect mouse move events to control position
diff --git a/ground/src/plugins/magicwaypoint/positionfield.h b/ground/src/plugins/magicwaypoint/positionfield.h
index b19b300c5..3a8b17cbf 100644
--- a/ground/src/plugins/magicwaypoint/positionfield.h
+++ b/ground/src/plugins/magicwaypoint/positionfield.h
@@ -57,12 +57,14 @@ signals:
void positionClicked(double north, double east);
public slots:
- void updateIndicator(double north, double east);
+ void updateDesiredIndicator(double north, double east);
+ void updateActualIndicator(double north, double east);
private:
QSvgRenderer *m_renderer;
QGraphicsSvgItem *m_background;
- QGraphicsSvgItem *m_position;
+ QGraphicsSvgItem *m_positiondesired;
+ QGraphicsSvgItem *m_positionactual;
};
#endif // POSITIONFIELD_H