You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.6 KiB
91 lines
2.6 KiB
#include "waypointlineitem.h" |
|
|
|
namespace mapcontrol |
|
{ |
|
WaypointLineItem::WaypointLineItem(WayPointItem* wp1, WayPointItem* wp2, QColor color, mapcontrol::MapGraphicItem* map) : |
|
QGraphicsLineItem(map), |
|
wp1(wp1), |
|
wp2(wp2), |
|
map(map) |
|
{ |
|
// Make sure this stick to the map |
|
//this->setFlag(QGraphicsItem::Item,true); |
|
setParentItem(map); |
|
|
|
// Set up the pen for this icon with the UAV color |
|
QPen pen(color); |
|
pen.setWidth(2); |
|
setPen(pen); |
|
|
|
point1 = wp1->Coord(); |
|
point2 = wp2->Coord(); |
|
|
|
// Pixel coordinates of the local points |
|
core::Point localPoint1 = map->FromLatLngToLocal(wp1->Coord()); |
|
core::Point localPoint2 = map->FromLatLngToLocal(wp2->Coord()); |
|
// Draw line |
|
setLine(localPoint1.X(), localPoint1.Y(), localPoint2.X(), localPoint2.Y()); |
|
|
|
// Connect updates |
|
// Update line from both waypoints |
|
connect(wp1, SIGNAL(WPValuesChanged(WayPointItem*)), this, SLOT(updateWPValues(WayPointItem*))); |
|
connect(wp2, SIGNAL(WPValuesChanged(WayPointItem*)), this, SLOT(updateWPValues(WayPointItem*))); |
|
// Delete line if one of the waypoints get deleted |
|
connect(wp1, SIGNAL(destroyed()), this, SLOT(deleteLater())); |
|
connect(wp2, SIGNAL(destroyed()), this, SLOT(deleteLater())); |
|
|
|
// Map Zoom and move |
|
connect(map, SIGNAL(mapChanged()), this, SLOT(updateWPValues())); |
|
} |
|
|
|
void WaypointLineItem::RefreshPos() |
|
{ |
|
// Delete if either waypoint got deleted |
|
if (!wp1 || !wp2) |
|
{ |
|
this->deleteLater(); |
|
} |
|
else |
|
{ |
|
// Set new pixel coordinates based on new global coordinates |
|
//QTimer::singleShot(0, this, SLOT(updateWPValues())); |
|
core::Point localPoint1 = map->FromLatLngToLocal(point1); |
|
core::Point localPoint2 = map->FromLatLngToLocal(point2); |
|
if (!localPoint1.IsEmpty() && !localPoint2.IsEmpty()) |
|
{ |
|
setLine(localPoint1.X(), localPoint1.Y(), localPoint2.X(), localPoint2.Y()); |
|
} |
|
} |
|
} |
|
|
|
void WaypointLineItem::updateWPValues(WayPointItem* waypoint) |
|
{ |
|
Q_UNUSED(waypoint); |
|
// Delete if either waypoint got deleted |
|
if (!wp1 || !wp2) |
|
{ |
|
this->deleteLater(); |
|
} |
|
else |
|
{ |
|
// Set new pixel coordinates based on new global coordinates |
|
point1 = wp1->Coord(); |
|
point2 = wp2->Coord(); |
|
core::Point localPoint1 = map->FromLatLngToLocal(wp1->Coord()); |
|
core::Point localPoint2 = map->FromLatLngToLocal(wp2->Coord()); |
|
|
|
setLine(localPoint1.X(), localPoint1.Y(), localPoint2.X(), localPoint2.Y()); |
|
} |
|
} |
|
|
|
void WaypointLineItem::updateWPValues() |
|
{ |
|
updateWPValues(NULL); |
|
} |
|
|
|
int WaypointLineItem::type()const |
|
{ |
|
return Type; |
|
} |
|
|
|
}
|
|
|