1
0
mirror of https://bitbucket.org/librepilot/librepilot.git synced 2025-02-06 21:54:15 +01:00

GCS -OPMapLib - add relative altitude to waypoints

This commit is contained in:
PT_Dreamer 2012-06-20 14:59:23 +01:00
parent 3cf4676aef
commit 1299bbda93
6 changed files with 46 additions and 26 deletions

View File

@ -253,9 +253,9 @@ namespace mapcontrol
emit WPCreated(position,item); emit WPCreated(position,item);
return item; return item;
} }
WayPointItem* OPMapWidget::WPCreate(const distBearing &relativeCoord, const int &altitude, const QString &description) WayPointItem* OPMapWidget::WPCreate(const distBearingAltitude &relativeCoord, const QString &description)
{ {
WayPointItem* item=new WayPointItem(relativeCoord,altitude,description,map); WayPointItem* item=new WayPointItem(relativeCoord,description,map);
ConnectWP(item); ConnectWP(item);
item->setParentItem(map); item->setParentItem(map);
int position=item->Number(); int position=item->Number();
@ -308,6 +308,15 @@ namespace mapcontrol
emit WPValuesChanged(item); emit WPValuesChanged(item);
return item; return item;
} }
WayPointItem* OPMapWidget::WPInsert(distBearingAltitude const& relative, QString const& description,const int &position)
{
WayPointItem* item=new WayPointItem(relative,description,map);
item->SetNumber(position);
ConnectWP(item);
item->setParentItem(map);
emit WPInserted(position,item);
return item;
}
void OPMapWidget::WPDelete(WayPointItem *item) void OPMapWidget::WPDelete(WayPointItem *item)
{ {
emit WPDeleted(item->Number(),item); emit WPDeleted(item->Number(),item);

View File

@ -289,7 +289,7 @@ namespace mapcontrol
* @param description the description of the WayPoint * @param description the description of the WayPoint
* @return WayPointItem a pointer to the WayPoint created * @return WayPointItem a pointer to the WayPoint created
*/ */
WayPointItem *WPCreate(const distBearing &relativeCoord, const int &altitude, const QString &description); WayPointItem *WPCreate(const distBearingAltitude &relativeCoord, const QString &description);
/** /**
* @brief Inserts a new WayPoint on the specified position * @brief Inserts a new WayPoint on the specified position
* *
@ -323,6 +323,7 @@ namespace mapcontrol
* @return WayPointItem a pointer to the WayPoint Inserted * @return WayPointItem a pointer to the WayPoint Inserted
*/ */
WayPointItem* WPInsert(internals::PointLatLng const& coord,int const& altitude, QString const& description,int const& position); WayPointItem* WPInsert(internals::PointLatLng const& coord,int const& altitude, QString const& description,int const& position);
WayPointItem *WPInsert(const distBearingAltitude &relative, const QString &description, const int &position);
/** /**
* @brief Deletes the WayPoint * @brief Deletes the WayPoint

View File

@ -47,7 +47,7 @@ WayPointCircle::WayPointCircle(HomeItem *radius, WayPointItem *center, bool cloc
my_radius(radius),my_map(map),QGraphicsEllipseItem(map),myColor(color),myClockWise(clockwise) my_radius(radius),my_map(map),QGraphicsEllipseItem(map),myColor(color),myClockWise(clockwise)
{ {
qDebug()<<"circle clock:"<<clockwise; qDebug()<<"circle clock:"<<clockwise;
connect(radius,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(refreshLocations())); connect(radius,SIGNAL(homePositionChanged(internals::PointLatLng,float)),this,SLOT(refreshLocations()));
connect(center,SIGNAL(localPositionChanged(QPointF)),this,SLOT(refreshLocations())); connect(center,SIGNAL(localPositionChanged(QPointF)),this,SLOT(refreshLocations()));
connect(center,SIGNAL(aboutToBeDeleted(WayPointItem*)),this,SLOT(waypointdeleted())); connect(center,SIGNAL(aboutToBeDeleted(WayPointItem*)),this,SLOT(waypointdeleted()));
refreshLocations(); refreshLocations();

View File

@ -52,8 +52,11 @@ WayPointItem::WayPointItem(const internals::PointLatLng &coord,int const& altitu
} }
if(myHome) if(myHome)
{
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing); map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing);
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng))); relativeCoord.altitudeRelative=Altitude()-myHome->Altitude();
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng,float)),this,SLOT(onHomePositionChanged(internals::PointLatLng,float)));
}
connect(this,SIGNAL(waypointdoubleclick(WayPointItem*)),map,SIGNAL(wpdoubleclicked(WayPointItem*))); connect(this,SIGNAL(waypointdoubleclick(WayPointItem*)),map,SIGNAL(wpdoubleclicked(WayPointItem*)));
emit manualCoordChange(this); emit manualCoordChange(this);
} }
@ -62,6 +65,7 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
{ {
relativeCoord.bearing=0; relativeCoord.bearing=0;
relativeCoord.distance=0; relativeCoord.distance=0;
relativeCoord.altitudeRelative=0;
myType=relative; myType=relative;
if(magicwaypoint) if(magicwaypoint)
{ {
@ -93,7 +97,8 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
if(myHome) if(myHome)
{ {
coord=map->Projection()->translate(myHome->Coord(),relativeCoord.distance,relativeCoord.bearing); coord=map->Projection()->translate(myHome->Coord(),relativeCoord.distance,relativeCoord.bearing);
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng))); SetAltitude(myHome->Altitude()+relativeCoord.altitudeRelative);
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng,float)),this,SLOT(onHomePositionChanged(internals::PointLatLng,float)));
} }
connect(this,SIGNAL(waypointdoubleclick(WayPointItem*)),map,SIGNAL(wpdoubleclicked(WayPointItem*))); connect(this,SIGNAL(waypointdoubleclick(WayPointItem*)),map,SIGNAL(wpdoubleclicked(WayPointItem*)));
emit manualCoordChange(this); emit manualCoordChange(this);
@ -122,14 +127,14 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
if(myHome) if(myHome)
{ {
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing); map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing);
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng))); relativeCoord.altitudeRelative=Altitude()-myHome->Altitude();
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng,float)),this,SLOT(onHomePositionChanged(internals::PointLatLng,float)));
} }
connect(this,SIGNAL(waypointdoubleclick(WayPointItem*)),map,SIGNAL(wpdoubleclicked(WayPointItem*))); connect(this,SIGNAL(waypointdoubleclick(WayPointItem*)),map,SIGNAL(wpdoubleclicked(WayPointItem*)));
qDebug()<<"Waypoint CTOR distance"<<relativeCoord.distance;
emit manualCoordChange(this); emit manualCoordChange(this);
} }
WayPointItem::WayPointItem(const distBearing &relativeCoordenate, const int &altitude, const QString &description, MapGraphicItem *map):relativeCoord(relativeCoordenate),reached(false),description(description),shownumber(true),isDragging(false),altitude(altitude),map(map) WayPointItem::WayPointItem(const distBearingAltitude &relativeCoordenate, const QString &description, MapGraphicItem *map):relativeCoord(relativeCoordenate),reached(false),description(description),shownumber(true),isDragging(false),map(map)
{ {
myHome=NULL; myHome=NULL;
QList<QGraphicsItem *> list=map->childItems(); QList<QGraphicsItem *> list=map->childItems();
@ -141,8 +146,9 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
} }
if(myHome) if(myHome)
{ {
connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(onHomePositionChanged(internals::PointLatLng))); connect(myHome,SIGNAL(homePositionChanged(internals::PointLatLng,float)),this,SLOT(onHomePositionChanged(internals::PointLatLng,float)));
coord=map->Projection()->translate(myHome->Coord(),relativeCoord.distance,relativeCoord.bearing); coord=map->Projection()->translate(myHome->Coord(),relativeCoord.distance,relativeCoord.bearing);
SetAltitude(myHome->Altitude()+relativeCoord.altitudeRelative);
} }
myType=relative; myType=relative;
text=0; text=0;
@ -250,16 +256,15 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
} }
QGraphicsItem::mouseMoveEvent(event); QGraphicsItem::mouseMoveEvent(event);
} }
void WayPointItem::SetAltitude(const int &value) void WayPointItem::SetAltitude(const float &value)
{ {
altitude=value; altitude=value;
RefreshToolTip(); RefreshToolTip();
emit WPValuesChanged(this); emit WPValuesChanged(this);
this->update(); this->update();
} }
void WayPointItem::setRelativeCoord(distBearing value) void WayPointItem::setRelativeCoord(distBearingAltitude value)
{ {
relativeCoord=value; relativeCoord=value;
if(myHome) if(myHome)
@ -279,7 +284,7 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
if(coord!=value) if(coord!=value)
abs_coord=true; abs_coord=true;
coord=value; coord=value;
distBearing back=relativeCoord; distBearingAltitude back=relativeCoord;
qDebug()<<"SET COORD"<<value.Lat()<<value.Lng(); qDebug()<<"SET COORD"<<value.Lat()<<value.Lng();
if(myHome) if(myHome)
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing); map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing);
@ -361,11 +366,12 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
} }
} }
void WayPointItem::onHomePositionChanged(internals::PointLatLng homepos) void WayPointItem::onHomePositionChanged(internals::PointLatLng homepos, float homeAltitude)
{ {
if(myType==relative) if(myType==relative)
{ {
coord=map->Projection()->translate(homepos,relativeCoord.distance,relativeCoord.bearing); coord=map->Projection()->translate(homepos,relativeCoord.distance,relativeCoord.bearing);
SetAltitude(relativeCoord.altitudeRelative+homeAltitude);
emit WPValuesChanged(this); emit WPValuesChanged(this);
RefreshPos(); RefreshPos();
RefreshToolTip(); RefreshToolTip();
@ -374,7 +380,10 @@ WayPointItem::WayPointItem(MapGraphicItem *map, bool magicwaypoint):reached(fals
else else
{ {
if(myHome) if(myHome)
{
map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing); map->Projection()->offSetFromLatLngs(myHome->Coord(),coord,relativeCoord.distance,relativeCoord.bearing);
relativeCoord.altitudeRelative=Altitude()-homeAltitude;
}
emit WPValuesChanged(this); emit WPValuesChanged(this);
} }
} }

View File

@ -37,10 +37,11 @@
namespace mapcontrol namespace mapcontrol
{ {
struct distBearing struct distBearingAltitude
{ {
double distance; double distance;
double bearing; double bearing;
float altitudeRelative;
double bearingToDegrees(){return bearing*180/M_PI;} double bearingToDegrees(){return bearing*180/M_PI;}
void setBearingFromDegrees(double degrees){bearing=degrees*M_PI/180;} void setBearingFromDegrees(double degrees){bearing=degrees*M_PI/180;}
}; };
@ -77,7 +78,7 @@ public:
* @return * @return
*/ */
WayPointItem(internals::PointLatLng const& coord,int const& altitude,QString const& description,MapGraphicItem* map,wptype type=absolute); WayPointItem(internals::PointLatLng const& coord,int const& altitude,QString const& description,MapGraphicItem* map,wptype type=absolute);
WayPointItem(distBearing const& relativeCoord,int const& altitude,QString const& description,MapGraphicItem* map); WayPointItem(distBearingAltitude const& relativeCoord,QString const& description,MapGraphicItem* map);
/** /**
* @brief Returns the WayPoint description * @brief Returns the WayPoint description
@ -141,15 +142,15 @@ public:
* *
* @return int * @return int
*/ */
int Altitude(){return altitude;} float Altitude(){return altitude;}
/** /**
* @brief Sets the WayPoint Altitude * @brief Sets the WayPoint Altitude
* *
* @param value * @param value
*/ */
void SetAltitude(int const& value); void SetAltitude(const float &value);
void setRelativeCoord(distBearing value); void setRelativeCoord(distBearingAltitude value);
distBearing getRelativeCoord(){return relativeCoord;} distBearingAltitude getRelativeCoord(){return relativeCoord;}
int type() const; int type() const;
QRectF boundingRect() const; QRectF boundingRect() const;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
@ -172,12 +173,12 @@ protected:
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event); void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
private: private:
internals::PointLatLng coord;//coordinates of this WayPoint internals::PointLatLng coord;//coordinates of this WayPoint
distBearing relativeCoord; distBearingAltitude relativeCoord;
bool reached; bool reached;
QString description; QString description;
bool shownumber; bool shownumber;
bool isDragging; bool isDragging;
int altitude; float altitude;
MapGraphicItem* map; MapGraphicItem* map;
int number; int number;
@ -214,7 +215,7 @@ public slots:
*/ */
void WPInserted(int const& number,WayPointItem* waypoint); void WPInserted(int const& number,WayPointItem* waypoint);
void onHomePositionChanged(internals::PointLatLng); void onHomePositionChanged(internals::PointLatLng,float altitude);
signals: signals:
/** /**
* @brief fires when this WayPoint number changes (not fired if due to a auto-renumbering) * @brief fires when this WayPoint number changes (not fired if due to a auto-renumbering)

View File

@ -45,7 +45,7 @@ WayPointLine::WayPointLine(HomeItem *from, WayPointItem *to, MapGraphicItem *map
destination(to),my_map(map),QGraphicsLineItem(map),myColor(color) destination(to),my_map(map),QGraphicsLineItem(map),myColor(color)
{ {
this->setLine(to->pos().x(),to->pos().y(),from->pos().x(),from->pos().y()); this->setLine(to->pos().x(),to->pos().y(),from->pos().x(),from->pos().y());
connect(from,SIGNAL(homePositionChanged(internals::PointLatLng)),this,SLOT(refreshLocations())); connect(from,SIGNAL(homePositionChanged(internals::PointLatLng,float)),this,SLOT(refreshLocations()));
connect(to,SIGNAL(localPositionChanged(QPointF,WayPointItem*)),this,SLOT(refreshLocations())); connect(to,SIGNAL(localPositionChanged(QPointF,WayPointItem*)),this,SLOT(refreshLocations()));
connect(to,SIGNAL(aboutToBeDeleted(WayPointItem*)),this,SLOT(waypointdeleted())); connect(to,SIGNAL(aboutToBeDeleted(WayPointItem*)),this,SLOT(waypointdeleted()));
} }