1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-03-15 07:29:15 +01:00

GCS-MapLib - Reenabled waypoint features on the plugin.

Added go_to_place feature to the plugin.
This commit is contained in:
PT_Dreamer 2012-05-28 14:12:06 +01:00
parent 28b754183f
commit 9024a21af7
9 changed files with 136 additions and 82 deletions

View File

@ -262,7 +262,6 @@ Point PureProjection::FromLatLngToPixel(const PointLatLng &p,const int &zoom)
double lon1=p1.Lng()*M_PI/180;
double R=6378137;
double lat2 = asin(sin(lat1)*cos(d/R) + cos(lat1)*sin(d/R)*cos(tc) );
qDebug()<<lat2<<lat1;
double lon2 = lon1 + atan2(sin(tc)*sin(d/R)*cos(lat1),
cos(d/R)-sin(lat1)*sin(lat2));
lat2=lat2*180/M_PI;

View File

@ -39,8 +39,6 @@ namespace mapcontrol
this->setZValue(4);
coord=internals::PointLatLng(50,50);
setToolTip("AAAA");
qDebug()<<"HomeItem created type:"<<type();
}
void HomeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)

View File

@ -216,10 +216,8 @@ namespace mapcontrol
}
void MapGraphicItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
qDebug()<<"mouse press";
if(!IsMouseOverMarker())
{
qDebug()<<"not over marker";
if(event->button() == config->DragButton && CanDragMap()&& !((event->modifiers()==Qt::ShiftModifier)||(event->modifiers()==Qt::ControlModifier)))
{
core->mouseDown.SetX(event->pos().x());

View File

@ -43,19 +43,19 @@ WayPointItem::WayPointItem(const internals::PointLatLng &coord,int const& altitu
RefreshToolTip();
RefreshPos();
HomeItem* home=NULL;
myHome=NULL;
QList<QGraphicsItem *> list=map->childItems();
foreach(QGraphicsItem * obj,list)
{
HomeItem* h=qgraphicsitem_cast <HomeItem*>(obj);
if(h)
home=h;
myHome=h;
}
if(home)
map->Projection()->offSetFromLatLngs(home->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
if(myHome)
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
connect(home,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng)));
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng)));
}
WayPointItem::WayPointItem(const internals::PointLatLng &coord,int const& altitude, const QString &description, MapGraphicItem *map,wptype type):coord(coord),reached(false),description(description),shownumber(true),isDragging(false),altitude(altitude),map(map),myType(type)
{
@ -70,33 +70,36 @@ WayPointItem::WayPointItem(const internals::PointLatLng &coord,int const& altitu
SetShowNumber(shownumber);
RefreshToolTip();
RefreshPos();
HomeItem* home=NULL;
myHome=NULL;
QList<QGraphicsItem *> list=map->childItems();
foreach(QGraphicsItem * obj,list)
{
HomeItem* h=qgraphicsitem_cast <HomeItem*>(obj);
if(h)
home=h;
myHome=h;
}
if(home)
if(myHome)
{
map->Projection()->offSetFromLatLngs(home->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
connect(home,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng)));
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng)));
}
}
WayPointItem::WayPointItem(const distBearing &relativeCoord, const int &altitude, const QString &description, MapGraphicItem *map):relativeCoord(relativeCoord),reached(false),description(description),shownumber(true),isDragging(false),altitude(altitude),map(map)
{
HomeItem* home=NULL;
myHome=NULL;
QList<QGraphicsItem *> list=map->childItems();
foreach(QGraphicsItem * obj,list)
{
HomeItem* h=qgraphicsitem_cast <HomeItem*>(obj);
if(h)
home=h;
myHome=h;
}
if(myHome)
{
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng)));
coord=map->Projection()->translate(myHome->Coord(),relativeCoord.distante,relativeCoord.bearing);
}
connect(home,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng)));
coord=map->Projection()->translate(home->Coord(),relativeCoord.distante,relativeCoord.bearing);
myType=relative;
text=0;
numberI=0;
@ -154,18 +157,11 @@ WayPointItem::WayPointItem(const internals::PointLatLng &coord,int const& altitu
{
if(event->button()==Qt::LeftButton)
{
HomeItem* home=NULL;
QList<QGraphicsItem *> list=map->childItems();
foreach(QGraphicsItem * obj,list)
{
HomeItem* h=qgraphicsitem_cast <HomeItem*>(obj);
if(h)
home=h;
}
delete text;
delete textBG;
coord=map->FromLocalToLatLng(this->pos().x(),this->pos().y());
map->Projection()->offSetFromLatLngs(home->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
if(myHome)
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
isDragging=false;
RefreshToolTip();
@ -180,7 +176,10 @@ WayPointItem::WayPointItem(const internals::PointLatLng &coord,int const& altitu
{
coord=map->FromLocalToLatLng(this->pos().x(),this->pos().y());
QString coord_str = " " + QString::number(coord.Lat(), 'f', 6) + " " + QString::number(coord.Lng(), 'f', 6);
text->setText(coord_str);
if(myHome)
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distante,relativeCoord.bearing);
QString relativeCoord_str = QString::number(relativeCoord.distante) + "m " + QString::number(relativeCoord.bearing*180/M_PI)+"deg";
text->setText(coord_str+"\n"+relativeCoord_str);
textBG->setRect(text->boundingRect());
emit WPValuesChanged(this);

View File

@ -42,7 +42,7 @@ struct distBearing
double distante;
double bearing;
};
class HomeItem;
/**
* @brief A QGraphicsItem representing a WayPoint
*
@ -178,7 +178,7 @@ private:
QGraphicsSimpleTextItem* numberI;
QGraphicsRectItem* numberIBG;
QTransform transf;
HomeItem * myHome;
wptype myType;
public slots:

View File

@ -15,8 +15,8 @@ HEADERS += opmapplugin.h \
opmapgadgetconfiguration.h \
opmapgadget.h \
opmapgadgetwidget.h \
# opmap_waypointeditor_dialog.h \
# opmap_edit_waypoint_dialog.h \
opmap_waypointeditor_dialog.h \
opmap_edit_waypoint_dialog.h \
opmap_zoom_slider_widget.h \
opmap_statusbar_widget.h \
opmap_overlay_widget.h
@ -27,8 +27,8 @@ SOURCES += opmapplugin.cpp \
opmapgadgetfactory.cpp \
opmapgadgetconfiguration.cpp \
opmapgadget.cpp \
# opmap_waypointeditor_dialog.cpp \
# opmap_edit_waypoint_dialog.cpp \
opmap_waypointeditor_dialog.cpp \
opmap_edit_waypoint_dialog.cpp \
opmap_zoom_slider_widget.cpp \
opmap_statusbar_widget.cpp \
opmap_overlay_widget.cpp
@ -37,8 +37,8 @@ OTHER_FILES += OPMapGadget.pluginspec
FORMS += opmapgadgetoptionspage.ui \
opmap_widget.ui \
# opmap_waypointeditor_dialog.ui \
# opmap_edit_waypoint_dialog.ui \
opmap_waypointeditor_dialog.ui \
opmap_edit_waypoint_dialog.ui \
opmap_zoom_slider_widget.ui \
opmap_statusbar_widget.ui \
opmap_overlay_widget.ui

View File

@ -357,6 +357,32 @@ border-radius: 2px;
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string>Go To Place:</string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="leFind"/>
</item>
<item>
<widget class="QToolButton" name="tbFind">
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="opmap.qrc">
<normaloff>:/opmap/images/waypoint.png</normaloff>:/opmap/images/waypoint.png</iconset>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
@ -370,6 +396,18 @@ border-radius: 2px;
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="label">
<property name="font">
<font>
<pointsize>8</pointsize>
</font>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<widget class="Line" name="lineWaypoint">
<property name="frameShadow">

View File

@ -177,7 +177,6 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
m_map->UAV->SetTrailDistance(uav_trail_distance_list[1]); // meters
m_map->UAV->SetTrailType(UAVTrailType::ByTimeElapsed);
// m_map->UAV->SetTrailType(UAVTrailType::ByDistance);
if(m_map->GPS)
{
m_map->GPS->SetTrailTime(uav_trail_time_list[0]); // seconds
@ -238,7 +237,7 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
m_widget->progressBarMap->setMaximum(1);
/*
#if defined(Q_OS_MAC)
#elif defined(Q_OS_WIN)
m_widget->comboBoxFindPlace->clear();
@ -246,7 +245,7 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
m_widget->comboBoxFindPlace->setCurrentIndex(-1);
#else
#endif
*/
// **************
@ -271,7 +270,10 @@ OPMapGadgetWidget::OPMapGadgetWidget(QWidget *parent) : QWidget(parent)
m_map->UAV->SetUAVPos(m_home_position.coord, 0.0); // set the UAV position
if(m_map->GPS)
m_map->GPS->SetUAVPos(m_home_position.coord, 0.0); // set the UAV position
m_map->WPCreate(QPoint(1000,1000),10,"aaa");
distBearing db;
db.distante=100;
db.bearing=0;
m_map->WPCreate(db,10,"aaa");
// **************
// create various context menu (mouse right click menu) actions
@ -470,11 +472,11 @@ void OPMapGadgetWidget::contextMenuEvent(QContextMenuEvent *event)
menu.addSeparator();
/*
menu.addAction(findPlaceAct);
menu.addSeparator();
*/
QMenu safeArea("Safety Area definitions");
// menu.addAction(showSafeAreaAct);
QMenu safeAreaSubMenu(tr("Safe Area Radius") + " (" + QString::number(m_map->Home->SafeArea()) + "m)", this);
@ -551,7 +553,7 @@ void OPMapGadgetWidget::contextMenuEvent(QContextMenuEvent *event)
{
case Normal_MapMode:
// only show the waypoint stuff if not in 'magic waypoint' mode
/*
menu.addSeparator()->setText(tr("Waypoints"));
menu.addAction(wayPointEditorAct);
@ -572,7 +574,7 @@ void OPMapGadgetWidget::contextMenuEvent(QContextMenuEvent *event)
if (m_waypoint_list.count() > 0)
menu.addAction(clearWayPointsAct); // we have waypoints
m_waypoint_list_mutex.unlock();
*/
break;
@ -651,10 +653,6 @@ void OPMapGadgetWidget::updatePosition()
return;
QMutexLocker locker(&m_map_mutex);
// Pip I'm sorry, I know this was here with a purpose vvv
// from Pip: let you off :)
//if (!telemetry_connected)
// return;
// *************
// get the current UAV details
@ -1435,12 +1433,12 @@ void OPMapGadgetWidget::createActions()
copyMouseLonToClipAct->setStatusTip(tr("Copy the mouse longitude to the clipboard"));
connect(copyMouseLonToClipAct, SIGNAL(triggered()), this, SLOT(onCopyMouseLonToClipAct_triggered()));
/*
findPlaceAct = new QAction(tr("&Find place"), this);
findPlaceAct->setShortcut(tr("Ctrl+F"));
findPlaceAct->setStatusTip(tr("Find a location"));
connect(findPlaceAct, SIGNAL(triggered()), this, SLOT(onFindPlaceAct_triggered()));
*/
showCompassAct = new QAction(tr("Show compass"), this);
showCompassAct->setStatusTip(tr("Show/Hide the compass"));
@ -1515,11 +1513,11 @@ void OPMapGadgetWidget::createActions()
TODO: Waypoint support is disabled for v1.0
*/
/*
wayPointEditorAct = new QAction(tr("&Waypoint editor"), this);
wayPointEditorAct->setShortcut(tr("Ctrl+W"));
wayPointEditorAct->setStatusTip(tr("Open the waypoint editor"));
wayPointEditorAct->setEnabled(false); // temporary
wayPointEditorAct->setEnabled(true); // temporary
connect(wayPointEditorAct, SIGNAL(triggered()), this, SLOT(onOpenWayPointEditorAct_triggered()));
addWayPointAct = new QAction(tr("&Add waypoint"), this);
@ -1547,7 +1545,7 @@ void OPMapGadgetWidget::createActions()
clearWayPointsAct->setShortcut(tr("Ctrl+C"));
clearWayPointsAct->setStatusTip(tr("Clear waypoints"));
connect(clearWayPointsAct, SIGNAL(triggered()), this, SLOT(onClearWayPointsAct_triggered()));
*/
homeMagicWaypointAct = new QAction(tr("Home magic waypoint"), this);
homeMagicWaypointAct->setStatusTip(tr("Move the magic waypoint to the home position"));
@ -1916,7 +1914,11 @@ void OPMapGadgetWidget::onUAVTrailDistanceActGroup_triggered(QAction *action)
/**
* TODO: unused for v1.0
**/
/*
void OPMapGadgetWidget::onOpenWayPointEditorAct_triggered()
{
waypoint_editor_dialog.show();
}
void OPMapGadgetWidget::onAddWayPointAct_triggered()
{
if (!m_widget || !m_map)
@ -1930,7 +1932,7 @@ void OPMapGadgetWidget::onAddWayPointAct_triggered()
// create a waypoint on the map at the last known mouse position
t_waypoint *wp = new t_waypoint;
wp->map_wp_item = NULL;
wp->coord = context_menu_lat_lon;
wp->coord = m_context_menu_lat_lon;
wp->altitude = 0;
wp->description = "";
wp->locked = false;
@ -1956,7 +1958,7 @@ void OPMapGadgetWidget::onAddWayPointAct_triggered()
m_waypoint_list_mutex.unlock();
}
*/
/**
* Called when the user asks to edit a waypoint from the map
@ -1964,7 +1966,7 @@ void OPMapGadgetWidget::onAddWayPointAct_triggered()
* TODO: should open an interface to edit waypoint properties, or
* propagate the signal to a specific WP plugin (tbd).
**/
/*
void OPMapGadgetWidget::onEditWayPointAct_triggered()
{
if (!m_widget || !m_map)
@ -1976,16 +1978,16 @@ void OPMapGadgetWidget::onEditWayPointAct_triggered()
if (!m_mouse_waypoint)
return;
//waypoint_edit_dialog.editWaypoint(m_mouse_waypoint);
waypoint_edit_dialog.editWaypoint(m_mouse_waypoint);
m_mouse_waypoint = NULL;
}
*/
/**
* TODO: unused for v1.0
*/
/*
void OPMapGadgetWidget::onLockWayPointAct_triggered()
{
if (!m_widget || !m_map || !m_mouse_waypoint)
@ -2005,12 +2007,12 @@ void OPMapGadgetWidget::onLockWayPointAct_triggered()
m_mouse_waypoint = NULL;
}
*/
/**
* TODO: unused for v1.0
*/
/*
void OPMapGadgetWidget::onDeleteWayPointAct_triggered()
{
if (!m_widget || !m_map)
@ -2063,12 +2065,10 @@ void OPMapGadgetWidget::onDeleteWayPointAct_triggered()
m_mouse_waypoint = NULL;
}
*/
/**
* TODO: No Waypoint support in v1.0
*/
/*
void OPMapGadgetWidget::onClearWayPointsAct_triggered()
{
if (!m_widget || !m_map)
@ -2092,7 +2092,7 @@ void OPMapGadgetWidget::onClearWayPointsAct_triggered()
m_waypoint_list.clear();
}
*/
void OPMapGadgetWidget::onHomeMagicWaypointAct_triggered()
{
@ -2468,3 +2468,20 @@ void OPMapGadgetWidget::SetUavPic(QString UAVPic)
{
m_map->SetUavPic(UAVPic);
}
void OPMapGadgetWidget::on_tbFind_clicked()
{
QPalette pal = m_widget->leFind->palette();
int result=m_map->SetCurrentPositionByKeywords(m_widget->leFind->text());
if(result==core::GeoCoderStatusCode::G_GEO_SUCCESS)
{
pal.setColor( m_widget->leFind->backgroundRole(), Qt::green);
m_widget->leFind->setPalette(pal);
}
else
{
pal.setColor( m_widget->leFind->backgroundRole(), Qt::red);
m_widget->leFind->setPalette(pal);
}
}

View File

@ -39,6 +39,8 @@
#include <QMutexLocker>
#include <QPointF>
#include "opmap_edit_waypoint_dialog.h"
#include "opmap_waypointeditor_dialog.h"
#include "opmapcontrol/opmapcontrol.h"
#include "opmap_overlay_widget.h"
@ -53,6 +55,7 @@
#include "uavobject.h"
#include "objectpersistence.h"
// ******************************************************
namespace Ui
@ -142,21 +145,21 @@ private slots:
*
* Some are currently disabled for the v1.0 plugin version.
*/
// void comboBoxFindPlace_returnPressed();
// void on_toolButtonFindPlace_clicked();
void comboBoxFindPlace_returnPressed();
void on_toolButtonFindPlace_clicked();
void on_toolButtonZoomM_clicked();
void on_toolButtonZoomP_clicked();
void on_toolButtonMapHome_clicked();
void on_toolButtonMapUAV_clicked();
void on_toolButtonMapUAVheading_clicked();
void on_horizontalSliderZoom_sliderMoved(int position);
// void on_toolButtonAddWaypoint_clicked();
// void on_treeViewWaypoints_clicked(QModelIndex index);
// void on_toolButtonHome_clicked();
// void on_toolButtonNextWaypoint_clicked();
// void on_toolButtonPrevWaypoint_clicked();
// void on_toolButtonHoldPosition_clicked();
// void on_toolButtonGo_clicked();
void on_toolButtonAddWaypoint_clicked();
void on_treeViewWaypoints_clicked(QModelIndex index);
void on_toolButtonHome_clicked();
void on_toolButtonNextWaypoint_clicked();
void on_toolButtonPrevWaypoint_clicked();
void on_toolButtonHoldPosition_clicked();
void on_toolButtonGo_clicked();
void on_toolButtonMagicWaypointMapMode_clicked();
void on_toolButtonNormalMapMode_clicked();
void on_toolButtonHomeWaypoint_clicked();
@ -191,7 +194,7 @@ private slots:
void onCopyMouseLatLonToClipAct_triggered();
void onCopyMouseLatToClipAct_triggered();
void onCopyMouseLonToClipAct_triggered();
// void onFindPlaceAct_triggered();
void onFindPlaceAct_triggered();
void onShowCompassAct_toggled(bool show);
void onShowDiagnostics_toggled(bool show);
void onShowUAVAct_toggled(bool show);
@ -206,14 +209,14 @@ private slots:
void onGoUAVAct_triggered();
void onFollowUAVpositionAct_toggled(bool checked);
void onFollowUAVheadingAct_toggled(bool checked);
/*
void onOpenWayPointEditorAct_triggered();
void onAddWayPointAct_triggered();
void onEditWayPointAct_triggered();
void onLockWayPointAct_triggered();
void onDeleteWayPointAct_triggered();
void onClearWayPointsAct_triggered();
*/
void onMapModeActGroup_triggered(QAction *action);
void onZoomActGroup_triggered(QAction *action);
void onHomeMagicWaypointAct_triggered();
@ -225,6 +228,8 @@ private slots:
void onUAVTrailDistanceActGroup_triggered(QAction *action);
void onMaxUpdateRateActGroup_triggered(QAction *action);
void on_tbFind_clicked();
private:
// *****
@ -261,9 +266,9 @@ private:
UAVObjectManager *obm;
UAVObjectUtilManager *obum;
//opmap_waypointeditor_dialog waypoint_editor_dialog;
opmap_waypointeditor_dialog waypoint_editor_dialog;
//opmap_edit_waypoint_dialog waypoint_edit_dialog;
opmap_edit_waypoint_dialog waypoint_edit_dialog;
QStandardItemModel wayPoint_treeView_model;
@ -300,14 +305,14 @@ private:
QAction *goUAVAct;
QAction *followUAVpositionAct;
QAction *followUAVheadingAct;
/*
QAction *wayPointEditorAct;
QAction *addWayPointAct;
QAction *editWayPointAct;
QAction *lockWayPointAct;
QAction *deleteWayPointAct;
QAction *clearWayPointsAct;
*/
QAction *homeMagicWaypointAct;
QAction *showSafeAreaAct;