From 4774ed2164d5d843dc3fd4aa67ffab21a2bcc534 Mon Sep 17 00:00:00 2001 From: zedamota Date: Mon, 12 Jul 2010 19:27:09 +0000 Subject: [PATCH] OP37/GCS Added Home overlay. git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1080 ebee16cc-31ac-478f-84a7-5cbb03baadba --- .../opmapcontrol/src/mapwidget/homeitem.cpp | 79 +++++++++++ .../opmapcontrol/src/mapwidget/homeitem.h | 78 +++++++++++ .../src/mapwidget/images/airplanepip.png | Bin 0 -> 13242 bytes .../src/mapwidget/images/home.png | Bin 0 -> 5273 bytes .../src/mapwidget/images/home.svg | 126 ++++++++++++++++++ .../src/mapwidget/images/home2.svg | 80 +++++++++++ .../src/mapwidget/mapgraphicitem.cpp | 24 +++- .../src/mapwidget/mapgraphicitem.h | 6 +- .../src/mapwidget/mapresources.qrc | 4 + .../opmapcontrol/src/mapwidget/mapwidget.pro | 6 +- .../src/mapwidget/opmapwidget.cpp | 19 ++- .../opmapcontrol/src/mapwidget/opmapwidget.h | 8 +- .../opmapcontrol/src/mapwidget/uavitem.cpp | 54 +++++++- .../libs/opmapcontrol/src/mapwidget/uavitem.h | 7 + 14 files changed, 477 insertions(+), 14 deletions(-) create mode 100644 ground/src/libs/opmapcontrol/src/mapwidget/homeitem.cpp create mode 100644 ground/src/libs/opmapcontrol/src/mapwidget/homeitem.h create mode 100644 ground/src/libs/opmapcontrol/src/mapwidget/images/airplanepip.png create mode 100644 ground/src/libs/opmapcontrol/src/mapwidget/images/home.png create mode 100644 ground/src/libs/opmapcontrol/src/mapwidget/images/home.svg create mode 100644 ground/src/libs/opmapcontrol/src/mapwidget/images/home2.svg diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/homeitem.cpp b/ground/src/libs/opmapcontrol/src/mapwidget/homeitem.cpp new file mode 100644 index 000000000..02afd2a83 --- /dev/null +++ b/ground/src/libs/opmapcontrol/src/mapwidget/homeitem.cpp @@ -0,0 +1,79 @@ +/** +****************************************************************************** +* +* @file homeitem.cpp +* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. +* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009. +* @brief A graphicsItem representing a trail point +* @see The GNU Public License (GPL) Version 3 +* @defgroup OPMapWidget +* @{ +* +*****************************************************************************/ +/* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +* for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program; if not, write to the Free Software Foundation, Inc., +* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#include "homeitem.h" +namespace mapcontrol +{ + HomeItem::HomeItem(MapGraphicItem* map,OPMapWidget* parent):safe(true),map(map),mapwidget(parent),showsafearea(true),safearea(1000),altitude(0) + { + pic.load(QString::fromUtf8(":/markers/images/home2.svg")); + pic=pic.scaled(30,30,Qt::IgnoreAspectRatio); + this->setFlag(QGraphicsItem::ItemIgnoresTransformations,true); + localposition=map->FromLatLngToLocal(mapwidget->CurrentPosition()); + this->setPos(localposition.X(),localposition.Y()); + this->setZValue(4); + coord=internals::PointLatLng(50,50); + } + + void HomeItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) + { + painter->drawPixmap(-pic.width()/2,-pic.height()/2,pic); + if(showsafearea) + { + if(safe) + painter->setPen(Qt::green); + else + painter->setPen(Qt::red); + painter->drawEllipse(QPointF(0,0),localsafearea,localsafearea); + // painter->drawRect(QRectF(-localsafearea,-localsafearea,localsafearea*2,localsafearea*2)); + } + + } + QRectF HomeItem::boundingRect()const + { + if(!showsafearea) + return QRectF(-pic.width()/2,-pic.height()/2,pic.width(),pic.height()); + else + return QRectF(-localsafearea,-localsafearea,localsafearea*2,localsafearea*2); + } + + + int HomeItem::type()const + { + return Type; + } + void HomeItem::RefreshPos() + { + prepareGeometryChange(); + localposition=map->FromLatLngToLocal(coord); + this->setPos(localposition.X(),localposition.Y()); + if(showsafearea) + localsafearea=safearea/map->Projection()->GetGroundResolution(map->Zoom(),coord.Lat()); + + } + +} diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/homeitem.h b/ground/src/libs/opmapcontrol/src/mapwidget/homeitem.h new file mode 100644 index 000000000..eebb976c6 --- /dev/null +++ b/ground/src/libs/opmapcontrol/src/mapwidget/homeitem.h @@ -0,0 +1,78 @@ +/** +****************************************************************************** +* +* @file homeitem.h +* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. +* Parts by Nokia Corporation (qt-info@nokia.com) Copyright (C) 2009. +* @brief A graphicsItem representing a WayPoint +* @see The GNU Public License (GPL) Version 3 +* @defgroup OPMapWidget +* @{ +* +*****************************************************************************/ +/* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, but +* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +* for more details. +* +* You should have received a copy of the GNU General Public License along +* with this program; if not, write to the Free Software Foundation, Inc., +* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ +#ifndef HOMEITEM_H +#define HOMEITEM_H + +#include +#include +#include +#include "../internals/pointlatlng.h" +#include +#include "opmapwidget.h" +namespace mapcontrol +{ + + class HomeItem:public QObject,public QGraphicsItem + { + Q_OBJECT + Q_INTERFACES(QGraphicsItem) + public: + enum { Type = UserType + 4 }; + HomeItem(MapGraphicItem* map,OPMapWidget* parent); + void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, + QWidget *widget); + QRectF boundingRect() const; + int type() const; + void RefreshPos(); + bool ShowSafeArea()const{return showsafearea;} + void SetShowSafeArea(bool const& value){showsafearea=value;} + int SafeArea()const{return safearea;} + void SetSafeArea(bool const& value){safearea=value;} + bool safe; + void SetCoord(internals::PointLatLng const& value){coord=value;} + internals::PointLatLng Coord()const{return coord;} + void SetAltitude(int const& value){altitude=value;} + int Altitude()const{return altitude;} + private: + MapGraphicItem* map; + OPMapWidget* mapwidget; + QPixmap pic; + core::Point localposition; + internals::PointLatLng coord; + bool showsafearea; + int safearea; + int localsafearea; + int altitude; + + public slots: + + signals: + + }; +} +#endif // HOMEITEM_H diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/images/airplanepip.png b/ground/src/libs/opmapcontrol/src/mapwidget/images/airplanepip.png new file mode 100644 index 0000000000000000000000000000000000000000..d9b2279fc6e0e54a2e98d0b18349f5731f1afbdb GIT binary patch literal 13242 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 + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/images/home2.svg b/ground/src/libs/opmapcontrol/src/mapwidget/images/home2.svg new file mode 100644 index 000000000..4eef55159 --- /dev/null +++ b/ground/src/libs/opmapcontrol/src/mapwidget/images/home2.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp b/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp index 8f02a8876..06e28f97d 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp +++ b/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.cpp @@ -26,6 +26,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "uavitem.h" +#include "homeitem.h" #include "mapgraphicitem.h" namespace mapcontrol @@ -40,7 +41,8 @@ namespace mapcontrol core->SetMapType(MapType::GoogleHybrid); this->SetZoom(2); connect(core,SIGNAL(OnNeedInvalidation()),this,SLOT(Core_OnNeedInvalidation())); - + connect(core,SIGNAL(OnMapDrag()),this,SLOT(ChildPosRefresh())); + connect(core,SIGNAL(OnMapZoomChanged()),this,SLOT(ChildPosRefresh())); //resize(); } void MapGraphicItem::start() @@ -83,9 +85,27 @@ namespace mapcontrol UAVItem* ww=qgraphicsitem_cast(i); if(ww) ww->RefreshPos(); + HomeItem* www=qgraphicsitem_cast(i); + if(www) + www->RefreshPos(); } } + void MapGraphicItem::ChildPosRefresh() + { + foreach(QGraphicsItem* i,this->childItems()) + { + WayPointItem* w=qgraphicsitem_cast(i); + if(w) + w->RefreshPos(); + UAVItem* ww=qgraphicsitem_cast(i); + if(ww) + ww->RefreshPos(); + HomeItem* www=qgraphicsitem_cast(i); + if(www) + www->RefreshPos(); + } + } void MapGraphicItem::ConstructLastImage(int const& zoomdiff) { QImage temp; @@ -283,7 +303,7 @@ namespace mapcontrol core->tileRect.SetX(core->GettilePoint().X()*core->tileRect.Width()); core->tileRect.SetY(core->GettilePoint().Y()*core->tileRect.Height()); core->tileRect.Offset(core->GetrenderOffset()); - qDebug()<GetrenderOffset().ToString(); + //qDebug()<GetrenderOffset().ToString(); if(core->GetCurrentRegion().IntersectsWith(core->tileRect)) { diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h b/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h index 1e6a327a5..acbe7f268 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h +++ b/ground/src/libs/opmapcontrol/src/mapwidget/mapgraphicitem.h @@ -97,6 +97,8 @@ namespace mapcontrol core::Point lastimagepoint; void paintImage(QPainter* painter); void ConstructLastImage(int const& zoomdiff); + internals::PureProjection* Projection()const{return core->Projection();} + double Zoom(); protected: void mouseMoveEvent ( QGraphicsSceneMouseEvent * event ); void mousePressEvent ( QGraphicsSceneMouseEvent * event ); @@ -118,7 +120,6 @@ namespace mapcontrol void SetZoomStep(int const& value); - private: internals::Core *core; @@ -175,7 +176,7 @@ namespace mapcontrol void Offset(int const& x, int const& y); bool CanDragMap()const{return core->CanDragMap;} void SetCanDragMap(bool const& value){core->CanDragMap = value;} - double Zoom(); + void SetZoom(double const& value); void mapRotate ( qreal angle ); void start(); @@ -186,6 +187,7 @@ namespace mapcontrol private slots: void Core_OnNeedInvalidation(); + void ChildPosRefresh(); public slots: /** * @brief To be called when the scene size changes diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/mapresources.qrc b/ground/src/libs/opmapcontrol/src/mapwidget/mapresources.qrc index 26a124e02..36db8b87d 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/mapresources.qrc +++ b/ground/src/libs/opmapcontrol/src/mapwidget/mapresources.qrc @@ -4,5 +4,9 @@ images/marker.png images/compas.svg images/airplane.svg + images/home.png + images/home.svg + images/home2.svg + images/airplanepip.png diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/mapwidget.pro b/ground/src/libs/opmapcontrol/src/mapwidget/mapwidget.pro index 635cfd94a..c1abdf65e 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/mapwidget.pro +++ b/ground/src/libs/opmapcontrol/src/mapwidget/mapwidget.pro @@ -9,7 +9,8 @@ SOURCES += mapgraphicitem.cpp \ configuration.cpp \ waypointitem.cpp \ uavitem.cpp \ - trailitem.cpp + trailitem.cpp \ + homeitem.cpp LIBS += -L../build \ -lcore \ -linternals \ @@ -21,7 +22,8 @@ HEADERS += mapgraphicitem.h \ uavitem.h \ uavmapfollowtype.h \ uavtrailtype.h \ - trailitem.h + trailitem.h \ + homeitem.h QT += opengl QT += network QT += sql diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp b/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp index 75d53a4e4..61d132ad8 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp +++ b/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.cpp @@ -34,7 +34,7 @@ namespace mapcontrol { - OPMapWidget::OPMapWidget(QWidget *parent, Configuration *config):QGraphicsView(parent),configuration(config),UAV(0),followmouse(true),compass(0),showuav(false) + OPMapWidget::OPMapWidget(QWidget *parent, Configuration *config):QGraphicsView(parent),configuration(config),UAV(0),Home(0),followmouse(true),compass(0),showuav(false),showhome(false) { setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); core=new internals::Core; @@ -76,6 +76,23 @@ namespace mapcontrol } } + void OPMapWidget::SetShowHome(const bool &value) + { + if(value && Home==0) + { + Home=new HomeItem(map,this); + Home->setParentItem(map); + } + else if(!value) + { + if(Home!=0) + { + delete Home; + Home=0; + } + + } + } void OPMapWidget::resizeEvent(QResizeEvent *event) { diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h b/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h index 74296b2df..a6a120ddf 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h +++ b/ground/src/libs/opmapcontrol/src/mapwidget/opmapwidget.h @@ -38,9 +38,11 @@ #include "waypointitem.h" #include "QtSvg/QGraphicsSvgItem" #include "uavitem.h" +#include "homeitem.h" namespace mapcontrol { class UAVItem; + class HomeItem; /** * @brief Collection of static functions to help dealing with various enums used * Contains functions for enumToString conversio, StringToEnum, QStringList of enum values... @@ -332,10 +334,11 @@ namespace mapcontrol void SetShowCompass(bool const& value); UAVItem* UAV; - + HomeItem* Home; void SetShowUAV(bool const& value); bool ShowUAV()const{return showuav;} - + void SetShowHome(bool const& value); + bool ShowHome()const{return showhome;} private: internals::Core *core; MapGraphicItem *map; @@ -349,6 +352,7 @@ namespace mapcontrol void ConnectWP(WayPointItem* item); QGraphicsSvgItem *compass; bool showuav; + bool showhome; // WayPointItem* item;//apagar protected: void resizeEvent(QResizeEvent *event); diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.cpp b/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.cpp index 638966766..09a727598 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.cpp +++ b/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.cpp @@ -29,10 +29,11 @@ #include "uavitem.h" namespace mapcontrol { - UAVItem::UAVItem(MapGraphicItem* map,OPMapWidget* parent):map(map),mapwidget(parent),showtrail(true),trailtime(5),traildistance(100) + UAVItem::UAVItem(MapGraphicItem* map,OPMapWidget* parent):map(map),mapwidget(parent),showtrail(true),trailtime(5),traildistance(100),autosetreached(true) + ,autosetdistance(100) { - pic.load(QString::fromUtf8(":/markers/images/airplane.svg")); - pic=pic.scaled(30,30,Qt::IgnoreAspectRatio); + pic.load(QString::fromUtf8(":/markers/images/airplanepip.png")); + pic=pic.scaled(45,45,Qt::IgnoreAspectRatio); localposition=map->FromLatLngToLocal(mapwidget->CurrentPosition()); this->setPos(localposition.X(),localposition.Y()); this->setZValue(4); @@ -55,13 +56,13 @@ namespace mapcontrol void UAVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { - painter->rotate(-90); + // painter->rotate(-90); painter->drawPixmap(-pic.width()/2,-pic.height()/2,pic); // painter->drawRect(QRectF(-pic.width()/2,-pic.height()/2,pic.width()-1,pic.height()-1)); } QRectF UAVItem::boundingRect()const { - return QRectF(-pic.width()/2,-pic.height()/2,pic.width(),pic.height());; + return QRectF(-pic.width()/2,-pic.height()/2,pic.width(),pic.height()); } void UAVItem::SetUAVPos(const internals::PointLatLng &position, const int &altitude) { @@ -95,6 +96,42 @@ namespace mapcontrol mapwidget->SetCurrentPosition(coord); } this->update(); + if(autosetreached) + { + foreach(QGraphicsItem* i,map->childItems()) + { + WayPointItem* wp=qgraphicsitem_cast(i); + if(wp) + { + if(Distance3D(wp->Coord(),wp->Altitude())SetReached(true); + emit UAVReachedWayPoint(wp->Number(),wp); + } + } + } + } + if(mapwidget->Home!=0) + { + if(Distance3D(mapwidget->Home->Coord(),mapwidget->Home->Altitude())>mapwidget->Home->SafeArea()) + { + if(mapwidget->Home->safe!=false); + { + mapwidget->Home->safe=false; + mapwidget->Home->update(); + emit UAVLeftSafetyBouble(this->coord); + } + } + else + { + if(mapwidget->Home->safe!=true); + { + mapwidget->Home->safe=true; + mapwidget->Home->update(); + } + } + + } } } void UAVItem::SetUAVHeading(const qreal &value) @@ -121,6 +158,7 @@ namespace mapcontrol w->setPos(map->FromLatLngToLocal(w->coord).X(),map->FromLatLngToLocal(w->coord).Y()); //this->update(); } + } void UAVItem::SetTrailType(const UAVTrailType::Types &value) { @@ -138,4 +176,10 @@ namespace mapcontrol foreach(QGraphicsItem* i,trail->childItems()) delete i; } + double UAVItem::Distance3D(const internals::PointLatLng &coord, const int &altitude) + { + return sqrt(pow(internals::PureProjection::DistanceBetweenLatLng(this->coord,coord)*1000,2)+ + pow(this->altitude-altitude,2)); + + } } diff --git a/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.h b/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.h index a29262752..5337d95e4 100644 --- a/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.h +++ b/ground/src/libs/opmapcontrol/src/mapwidget/uavitem.h @@ -76,6 +76,10 @@ namespace mapcontrol bool ShowTrail()const{return showtrail;} void SetShowTrail(bool const& value); void DeleteTrail()const; + bool AutoSetReached()const{return autosetreached;} + void SetAutoSetReached(bool const& value){autosetreached=value;} + double AutoSetDistance()const{return autosetdistance;} + void SetAutoSetDistance(double const& value){autosetdistance=value;} int type() const; private: @@ -94,6 +98,9 @@ namespace mapcontrol bool showtrail; int trailtime; int traildistance; + bool autosetreached; + double Distance3D(internals::PointLatLng const& coord, int const& altitude); + double autosetdistance; // QRectF rect; public slots: