1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2024-12-01 09:24:10 +01:00

OP37/GCS Added Home overlay.

git-svn-id: svn://svn.openpilot.org/OpenPilot/trunk@1080 ebee16cc-31ac-478f-84a7-5cbb03baadba
This commit is contained in:
zedamota 2010-07-12 19:27:09 +00:00 committed by zedamota
parent 351c658400
commit 4774ed2164
14 changed files with 477 additions and 14 deletions

View File

@ -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());
}
}

View File

@ -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 <QGraphicsItem>
#include <QPainter>
#include <QLabel>
#include "../internals/pointlatlng.h"
#include <QObject>
#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

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1111.3383"
height="1168.5715"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="antenna_and_radio_waves.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.0875"
inkscape:cx="3193.6065"
inkscape:cy="2405.053"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showborder="false"
inkscape:window-width="1355"
inkscape:window-height="722"
inkscape:window-x="4"
inkscape:window-y="24" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(2201.53,2081.9236)">
<g
id="g2386"
transform="matrix(0.2535648,0,0,0.2535648,-1643.2995,-1554.0211)">
<path
transform="matrix(4.3333332,0,0,4.3333332,4533.7078,193.07844)"
d="M -582.85712,3.7907546 A 465.71429,465.71429 0 1 1 -1514.2857,3.7907546 A 465.71429,465.71429 0 1 1 -582.85712,3.7907546 z"
sodipodi:ry="465.71429"
sodipodi:rx="465.71429"
sodipodi:cy="3.7907546"
sodipodi:cx="-1048.5714"
id="path3187"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:80;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(2.9548022,0,0,2.9548022,3088.2196,198.30411)"
d="M -582.85712,3.7907546 A 465.71429,465.71429 0 1 1 -1514.2857,3.7907546 A 465.71429,465.71429 0 1 1 -582.85712,3.7907546 z"
sodipodi:ry="465.71429"
sodipodi:rx="465.71429"
sodipodi:cy="3.7907546"
sodipodi:cx="-1048.5714"
id="path3185"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:80;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<path
transform="matrix(1.8248587,0,0,1.8248587,1903.3932,202.58745)"
d="M -582.85712,3.7907546 A 465.71429,465.71429 0 1 1 -1514.2857,3.7907546 A 465.71429,465.71429 0 1 1 -582.85712,3.7907546 z"
sodipodi:ry="465.71429"
sodipodi:rx="465.71429"
sodipodi:cy="3.7907546"
sodipodi:cx="-1048.5714"
id="path3183"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:80;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<path
transform="translate(1038.4699,205.71429)"
d="M -582.85712,3.7907546 A 465.71429,465.71429 0 1 1 -1514.2857,3.7907546 A 465.71429,465.71429 0 1 1 -582.85712,3.7907546 z"
sodipodi:ry="465.71429"
sodipodi:rx="465.71429"
sodipodi:cy="3.7907546"
sodipodi:cx="-1048.5714"
id="path3181"
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:80;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
sodipodi:type="arc" />
<path
sodipodi:nodetypes="cccc"
id="path3192"
d="M -7.2443685,220.93362 L 1504.1842,-2081.9236 L -1524.3873,-2081.9236 L -7.2443685,220.93362 z"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:80;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
sodipodi:nodetypes="cccc"
id="rect3189"
d="M -7.2442174,223.79075 L 1504.1842,2526.6479 L -1524.3873,2526.6479 L -7.2442174,223.79075 z"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:80;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
<path
sodipodi:nodetypes="ccccccsc"
id="path2385"
d="M 131.32707,222.36219 C 129.85733,280.3008 96.457805,328.45177 44.931875,352.67094 C 36.472685,356.25085 126.39529,2164.396 129.8183,2222.3445 C -5.6975961,2222.8383 -8.9361161,2222.5375 -151.03146,2223.1095 C -148.6186,2165.161 -56.675715,356.25085 -65.13491,352.67094 C -118.03418,328.65681 -149.22461,279.34006 -151.53008,222.36219 C -151.53008,144.29362 -88.17009,80.933613 -10.101515,80.933613 C 67.967055,80.933613 131.32707,144.29362 131.32707,222.36219 z"
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

@ -0,0 +1,80 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="463.89285"
height="438.87704"
id="svg2"
sodipodi:version="0.32"
inkscape:version="0.46"
version="1.0"
sodipodi:docname="dynaHouse.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape">
<defs
id="defs4">
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 526.18109 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="744.09448 : 526.18109 : 1"
inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
id="perspective10" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
gridtolerance="10000"
guidetolerance="10"
objecttolerance="10"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4098083"
inkscape:cx="231.94643"
inkscape:cy="219.43852"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1006"
inkscape:window-height="954"
inkscape:window-x="660"
inkscape:window-y="43" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-42.339286,-276.34171)">
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.40000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 437.14509,499.4375 L 437.14509,499.4375 z M 437.14509,499.4375 L 274.33259,355.25 L 111.42634,499.5 L 111.42634,705.625 C 111.42634,710.94838 115.72796,715.21875 121.05134,715.21875 L 222.86384,715.21875 L 222.86384,624.84375 C 222.86384,619.52035 227.13421,615.21875 232.45759,615.21875 L 316.11384,615.21875 C 321.43719,615.21875 325.70759,619.52037 325.70759,624.84375 L 325.70759,715.21875 L 427.55134,715.21875 C 432.87471,715.21875 437.14511,710.9484 437.14509,705.625 L 437.14509,499.4375 z M 111.42634,499.5 L 111.42634,499.5 z"
id="rect2391"
sodipodi:nodetypes="cccccccccccccccccc" />
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.40000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 273.3878,276.34171 L 42.339286,480.92527 L 66.677596,508.38266 L 274.33298,324.49848 L 481.9411,508.38266 L 506.23215,480.92527 L 275.2309,276.34171 L 274.33298,277.3814 L 273.3878,276.34171 z"
id="path2399" />
<path
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.40000001;stroke-miterlimit:4;stroke-opacity:1"
d="M 111.42634,305.79074 L 169.99777,305.79074 L 169.48739,340.48183 L 111.42634,392.9336 L 111.42634,305.79074 z"
id="rect2404"
sodipodi:nodetypes="ccccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -26,6 +26,7 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#include "uavitem.h" #include "uavitem.h"
#include "homeitem.h"
#include "mapgraphicitem.h" #include "mapgraphicitem.h"
namespace mapcontrol namespace mapcontrol
@ -40,7 +41,8 @@ namespace mapcontrol
core->SetMapType(MapType::GoogleHybrid); core->SetMapType(MapType::GoogleHybrid);
this->SetZoom(2); this->SetZoom(2);
connect(core,SIGNAL(OnNeedInvalidation()),this,SLOT(Core_OnNeedInvalidation())); connect(core,SIGNAL(OnNeedInvalidation()),this,SLOT(Core_OnNeedInvalidation()));
connect(core,SIGNAL(OnMapDrag()),this,SLOT(ChildPosRefresh()));
connect(core,SIGNAL(OnMapZoomChanged()),this,SLOT(ChildPosRefresh()));
//resize(); //resize();
} }
void MapGraphicItem::start() void MapGraphicItem::start()
@ -83,9 +85,27 @@ namespace mapcontrol
UAVItem* ww=qgraphicsitem_cast<UAVItem*>(i); UAVItem* ww=qgraphicsitem_cast<UAVItem*>(i);
if(ww) if(ww)
ww->RefreshPos(); ww->RefreshPos();
HomeItem* www=qgraphicsitem_cast<HomeItem*>(i);
if(www)
www->RefreshPos();
} }
} }
void MapGraphicItem::ChildPosRefresh()
{
foreach(QGraphicsItem* i,this->childItems())
{
WayPointItem* w=qgraphicsitem_cast<WayPointItem*>(i);
if(w)
w->RefreshPos();
UAVItem* ww=qgraphicsitem_cast<UAVItem*>(i);
if(ww)
ww->RefreshPos();
HomeItem* www=qgraphicsitem_cast<HomeItem*>(i);
if(www)
www->RefreshPos();
}
}
void MapGraphicItem::ConstructLastImage(int const& zoomdiff) void MapGraphicItem::ConstructLastImage(int const& zoomdiff)
{ {
QImage temp; QImage temp;
@ -283,7 +303,7 @@ namespace mapcontrol
core->tileRect.SetX(core->GettilePoint().X()*core->tileRect.Width()); core->tileRect.SetX(core->GettilePoint().X()*core->tileRect.Width());
core->tileRect.SetY(core->GettilePoint().Y()*core->tileRect.Height()); core->tileRect.SetY(core->GettilePoint().Y()*core->tileRect.Height());
core->tileRect.Offset(core->GetrenderOffset()); core->tileRect.Offset(core->GetrenderOffset());
qDebug()<<core->GetrenderOffset().ToString(); //qDebug()<<core->GetrenderOffset().ToString();
if(core->GetCurrentRegion().IntersectsWith(core->tileRect)) if(core->GetCurrentRegion().IntersectsWith(core->tileRect))
{ {

View File

@ -97,6 +97,8 @@ namespace mapcontrol
core::Point lastimagepoint; core::Point lastimagepoint;
void paintImage(QPainter* painter); void paintImage(QPainter* painter);
void ConstructLastImage(int const& zoomdiff); void ConstructLastImage(int const& zoomdiff);
internals::PureProjection* Projection()const{return core->Projection();}
double Zoom();
protected: protected:
void mouseMoveEvent ( QGraphicsSceneMouseEvent * event ); void mouseMoveEvent ( QGraphicsSceneMouseEvent * event );
void mousePressEvent ( QGraphicsSceneMouseEvent * event ); void mousePressEvent ( QGraphicsSceneMouseEvent * event );
@ -118,7 +120,6 @@ namespace mapcontrol
void SetZoomStep(int const& value); void SetZoomStep(int const& value);
private: private:
internals::Core *core; internals::Core *core;
@ -175,7 +176,7 @@ namespace mapcontrol
void Offset(int const& x, int const& y); void Offset(int const& x, int const& y);
bool CanDragMap()const{return core->CanDragMap;} bool CanDragMap()const{return core->CanDragMap;}
void SetCanDragMap(bool const& value){core->CanDragMap = value;} void SetCanDragMap(bool const& value){core->CanDragMap = value;}
double Zoom();
void SetZoom(double const& value); void SetZoom(double const& value);
void mapRotate ( qreal angle ); void mapRotate ( qreal angle );
void start(); void start();
@ -186,6 +187,7 @@ namespace mapcontrol
private slots: private slots:
void Core_OnNeedInvalidation(); void Core_OnNeedInvalidation();
void ChildPosRefresh();
public slots: public slots:
/** /**
* @brief To be called when the scene size changes * @brief To be called when the scene size changes

View File

@ -4,5 +4,9 @@
<file>images/marker.png</file> <file>images/marker.png</file>
<file>images/compas.svg</file> <file>images/compas.svg</file>
<file>images/airplane.svg</file> <file>images/airplane.svg</file>
<file>images/home.png</file>
<file>images/home.svg</file>
<file>images/home2.svg</file>
<file>images/airplanepip.png</file>
</qresource> </qresource>
</RCC> </RCC>

View File

@ -9,7 +9,8 @@ SOURCES += mapgraphicitem.cpp \
configuration.cpp \ configuration.cpp \
waypointitem.cpp \ waypointitem.cpp \
uavitem.cpp \ uavitem.cpp \
trailitem.cpp trailitem.cpp \
homeitem.cpp
LIBS += -L../build \ LIBS += -L../build \
-lcore \ -lcore \
-linternals \ -linternals \
@ -21,7 +22,8 @@ HEADERS += mapgraphicitem.h \
uavitem.h \ uavitem.h \
uavmapfollowtype.h \ uavmapfollowtype.h \
uavtrailtype.h \ uavtrailtype.h \
trailitem.h trailitem.h \
homeitem.h
QT += opengl QT += opengl
QT += network QT += network
QT += sql QT += sql

View File

@ -34,7 +34,7 @@
namespace mapcontrol 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); setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
core=new internals::Core; 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) void OPMapWidget::resizeEvent(QResizeEvent *event)
{ {

View File

@ -38,9 +38,11 @@
#include "waypointitem.h" #include "waypointitem.h"
#include "QtSvg/QGraphicsSvgItem" #include "QtSvg/QGraphicsSvgItem"
#include "uavitem.h" #include "uavitem.h"
#include "homeitem.h"
namespace mapcontrol namespace mapcontrol
{ {
class UAVItem; class UAVItem;
class HomeItem;
/** /**
* @brief Collection of static functions to help dealing with various enums used * @brief Collection of static functions to help dealing with various enums used
* Contains functions for enumToString conversio, StringToEnum, QStringList of enum values... * Contains functions for enumToString conversio, StringToEnum, QStringList of enum values...
@ -332,10 +334,11 @@ namespace mapcontrol
void SetShowCompass(bool const& value); void SetShowCompass(bool const& value);
UAVItem* UAV; UAVItem* UAV;
HomeItem* Home;
void SetShowUAV(bool const& value); void SetShowUAV(bool const& value);
bool ShowUAV()const{return showuav;} bool ShowUAV()const{return showuav;}
void SetShowHome(bool const& value);
bool ShowHome()const{return showhome;}
private: private:
internals::Core *core; internals::Core *core;
MapGraphicItem *map; MapGraphicItem *map;
@ -349,6 +352,7 @@ namespace mapcontrol
void ConnectWP(WayPointItem* item); void ConnectWP(WayPointItem* item);
QGraphicsSvgItem *compass; QGraphicsSvgItem *compass;
bool showuav; bool showuav;
bool showhome;
// WayPointItem* item;//apagar // WayPointItem* item;//apagar
protected: protected:
void resizeEvent(QResizeEvent *event); void resizeEvent(QResizeEvent *event);

View File

@ -29,10 +29,11 @@
#include "uavitem.h" #include "uavitem.h"
namespace mapcontrol 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.load(QString::fromUtf8(":/markers/images/airplanepip.png"));
pic=pic.scaled(30,30,Qt::IgnoreAspectRatio); pic=pic.scaled(45,45,Qt::IgnoreAspectRatio);
localposition=map->FromLatLngToLocal(mapwidget->CurrentPosition()); localposition=map->FromLatLngToLocal(mapwidget->CurrentPosition());
this->setPos(localposition.X(),localposition.Y()); this->setPos(localposition.X(),localposition.Y());
this->setZValue(4); this->setZValue(4);
@ -55,13 +56,13 @@ namespace mapcontrol
void UAVItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 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->drawPixmap(-pic.width()/2,-pic.height()/2,pic);
// painter->drawRect(QRectF(-pic.width()/2,-pic.height()/2,pic.width()-1,pic.height()-1)); // painter->drawRect(QRectF(-pic.width()/2,-pic.height()/2,pic.width()-1,pic.height()-1));
} }
QRectF UAVItem::boundingRect()const 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) void UAVItem::SetUAVPos(const internals::PointLatLng &position, const int &altitude)
{ {
@ -95,6 +96,42 @@ namespace mapcontrol
mapwidget->SetCurrentPosition(coord); mapwidget->SetCurrentPosition(coord);
} }
this->update(); this->update();
if(autosetreached)
{
foreach(QGraphicsItem* i,map->childItems())
{
WayPointItem* wp=qgraphicsitem_cast<WayPointItem*>(i);
if(wp)
{
if(Distance3D(wp->Coord(),wp->Altitude())<autosetdistance)
{
wp->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) void UAVItem::SetUAVHeading(const qreal &value)
@ -121,6 +158,7 @@ namespace mapcontrol
w->setPos(map->FromLatLngToLocal(w->coord).X(),map->FromLatLngToLocal(w->coord).Y()); w->setPos(map->FromLatLngToLocal(w->coord).X(),map->FromLatLngToLocal(w->coord).Y());
//this->update(); //this->update();
} }
} }
void UAVItem::SetTrailType(const UAVTrailType::Types &value) void UAVItem::SetTrailType(const UAVTrailType::Types &value)
{ {
@ -138,4 +176,10 @@ namespace mapcontrol
foreach(QGraphicsItem* i,trail->childItems()) foreach(QGraphicsItem* i,trail->childItems())
delete i; 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));
}
} }

View File

@ -76,6 +76,10 @@ namespace mapcontrol
bool ShowTrail()const{return showtrail;} bool ShowTrail()const{return showtrail;}
void SetShowTrail(bool const& value); void SetShowTrail(bool const& value);
void DeleteTrail()const; 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; int type() const;
private: private:
@ -94,6 +98,9 @@ namespace mapcontrol
bool showtrail; bool showtrail;
int trailtime; int trailtime;
int traildistance; int traildistance;
bool autosetreached;
double Distance3D(internals::PointLatLng const& coord, int const& altitude);
double autosetdistance;
// QRectF rect; // QRectF rect;
public slots: public slots: