diff --git a/src/ui/MapWidget.cc b/src/ui/MapWidget.cc index 5773b0ba4e45aec24bdb2df93174f1a232d57097..b720f1c94b1397ffa03cc7669a356b9c8d7c51c6 100644 --- a/src/ui/MapWidget.cc +++ b/src/ui/MapWidget.cc @@ -115,6 +115,11 @@ void MapWidget::init() lastZoom = settings.value("LAST_ZOOM", lastZoom).toInt(); settings.endGroup(); + settings.beginGroup("QGC_HOMEPOSITION"); + homeCoordinate.setY(settings.value("HOME_LATITUDE", homeCoordinate.y()).toDouble()); + homeCoordinate.setX(settings.value("HOME_LONGITUDE", homeCoordinate.x()).toDouble()); + settings.endGroup(); + // SET INITIAL POSITION AND ZOOM // Set default zoom level mc->setZoom(lastZoom); @@ -140,6 +145,14 @@ void MapWidget::init() connect(mapproviderGroup, SIGNAL(triggered(QAction*)), this, SLOT(mapproviderSelected(QAction*))); + + //mapSettings.beginGroup("Map_Widget"); + //QAction *act = new QAction(mapSettings.value("QAction").toString(), this); + //mapproviderSelected(act); + //mapSettings.endGroup(); + + + // Overlay seems currently broken // yahooActionOverlay = new QAction(tr("Yahoo: street overlay"), this); // yahooActionOverlay->setCheckable(true); @@ -230,17 +243,6 @@ void MapWidget::init() waypointPath = new qmapcontrol::LineString (wps, "Waypoint path", pointPen); mc->layer("Waypoints")->addGeometry(waypointPath); - //Camera Control - // CAMERA INDICATOR LAYER - // create a layer with the mapadapter and type GeometryLayer (for camera indicator) - //camLayer = new qmapcontrol::GeometryLayer("Camera", mapadapter); - //mc->addLayer(camLayer); - - //camLine = new qmapcontrol::LineString(camPoints,"Camera Eje", camBorderPen); - - drawCamBorder = false; - radioCamera = 10; - // Done set state initialized = true; @@ -288,10 +290,49 @@ void MapWidget::init() connect(geomLayer, SIGNAL(geometryEndDrag(Geometry*, QPointF)), this, SLOT(captureGeometryEndDrag(Geometry*, QPointF))); + connect(homePosition, SIGNAL(geometryClicked(Geometry*,QPoint)), + this, SLOT(captureGeometryClick(Geometry*, QPoint))); + + connect(homePosition, SIGNAL(geometryDragged(Geometry*, QPointF)), + this, SLOT(captureGeometryDragHome(Geometry*, QPointF))); + + connect(homePosition, SIGNAL(geometryEndDrag(Geometry*, QPointF)), + this, SLOT(captureGeometryEndDrag(Geometry*, QPointF))); + + this->loadSettingsMap(settings); + this->createHomePosition(homeCoordinate); + qDebug() << "CHECK END"; } } +void MapWidget::loadSettingsMap(QSettings &settings) +{ + index = 0; + settings.beginGroup("QGC_MAPINDEX"); + index = settings.value("MAP_INDEX", index).toInt(); + settings.endGroup(); + + switch(index) + { + case 0: + mapproviderSelected(osmAction); + break; + case 1: + mapproviderSelected(yahooActionMap); + break; + case 2: + mapproviderSelected(yahooActionSatellite); + break; + case 3: + mapproviderSelected(googleActionMap); + break; + case 4: + mapproviderSelected(googleSatAction); + break; + } +} + void MapWidget::goTo() { bool ok; @@ -332,6 +373,8 @@ void MapWidget::mapproviderSelected(QAction* action) mapadapter = new qmapcontrol::OSMMapAdapter(); l->setMapAdapter(mapadapter); geomLayer->setMapAdapter(mapadapter); + homePosition->setMapAdapter(mapadapter); + index = 0; if (isVisible()) mc->updateRequestNew(); mc->setZoom(zoom); @@ -348,6 +391,8 @@ void MapWidget::mapproviderSelected(QAction* action) mapadapter = new qmapcontrol::YahooMapAdapter(); l->setMapAdapter(mapadapter); geomLayer->setMapAdapter(mapadapter); + homePosition->setMapAdapter(mapadapter); + index = 1; if (isVisible()) mc->updateRequestNew(); mc->setZoom(zoom); @@ -364,6 +409,8 @@ void MapWidget::mapproviderSelected(QAction* action) mapadapter = new qmapcontrol::YahooMapAdapter("us.maps3.yimg.com", "/aerial.maps.yimg.com/png?v=1.7&t=a&s=256&x=%2&y=%3&z=%1"); l->setMapAdapter(mapadapter); geomLayer->setMapAdapter(mapadapter); + homePosition->setMapAdapter(mapadapter); + index = 2; if (isVisible()) mc->updateRequestNew(); mc->setZoom(zoom); @@ -377,6 +424,8 @@ void MapWidget::mapproviderSelected(QAction* action) mapadapter = new qmapcontrol::GoogleMapAdapter(); l->setMapAdapter(mapadapter); geomLayer->setMapAdapter(mapadapter); + homePosition->setMapAdapter(mapadapter); + index = 3; if (isVisible()) mc->updateRequestNew(); mc->setZoom(zoom); @@ -391,6 +440,8 @@ void MapWidget::mapproviderSelected(QAction* action) mapadapter = new qmapcontrol::GoogleSatMapAdapter(); l->setMapAdapter(mapadapter); geomLayer->setMapAdapter(mapadapter); + homePosition->setMapAdapter(mapadapter); + index = 4; if (isVisible()) mc->updateRequestNew(); mc->setZoom(zoom); @@ -706,6 +757,38 @@ void MapWidget::captureGeometryEndDrag(Geometry* geom, QPointF coordinate) mc->setMouseMode(qmapcontrol::MapControl::Panning); } + if (!setHome->isChecked()) + { + mc->setMouseMode(qmapcontrol::MapControl::Panning); + + if(mav) + { + // Update homePosition + UASManager::instance()->setHomePosition( + static_cast(homeCoordinate.x()), + static_cast(homeCoordinate.y()), 0); + } + } + +} + +void MapWidget::captureGeometryDragHome(Geometry *geom, QPointF coordinate) +{ + if (isVisible()) mc->updateRequest(geom->boundingBox().toRect()); + + Waypoint2DIcon* point2Find = dynamic_cast (geom); + + if (point2Find)// && wps.count() > index) + { + // Update visual + point2Find->setCoordinate(coordinate); + homeCoordinate.setX(coordinate.x()); + homeCoordinate.setY(coordinate.y()); + + qmapcontrol::Point* tempPoint = new qmapcontrol::Point(homeCoordinate.x(), homeCoordinate.y(),"g"); + + if (isVisible()) mc->updateRequest(tempPoint->boundingBox().toRect()); + } } MapWidget::~MapWidget() @@ -1010,7 +1093,7 @@ void MapWidget::wheelEvent(QWheelEvent *event) detailZoom = qAbs(qMin(0, mc->currentZoom()-newZoom)); // visual field of camera - updateCameraPosition(20*newZoom,0,"no"); + //updateCameraPosition(20*newZoom,0,"no"); } } @@ -1077,7 +1160,19 @@ void MapWidget::hideEvent(QHideEvent* event) settings.setValue("LAST_LONGITUDE", currentPos.x()); settings.setValue("LAST_ZOOM", mc->currentZoom()); settings.endGroup(); + + settings.beginGroup("QGC_MAPINDEX"); + settings.setValue("MAP_INDEX", index); + settings.endGroup(); + + settings.beginGroup("QGC_HOMEPOSITION"); + settings.setValue("HOME_LATITUDE", homeCoordinate.y()); + settings.setValue("HOME_LONGITUDE", homeCoordinate.x()); + settings.endGroup(); + settings.sync(); + + } } @@ -1146,102 +1241,38 @@ void MapWidget::clearPath(int uas) } } -void MapWidget::updateCameraPosition(double radio, double bearing, QString dir) +void MapWidget::createHomePosition(const QMouseEvent *event, const QPointF coordinate) { - Q_UNUSED(dir); - Q_UNUSED(bearing); - if (mc) + if (QEvent::MouseButtonRelease == event->type() && setHome->isChecked()) { - // FIXME Mariano - //camPoints.clear(); - QPointF currentPos = mc->currentCoordinate(); - // QPointF actualPos = getPointxBearing_Range(currentPos.y(),currentPos.x(),bearing,distance); - - // qmapcontrol::Point* tempPoint1 = new qmapcontrol::Point(currentPos.x(), currentPos.y(),"inicial",qmapcontrol::Point::Middle); - // qmapcontrol::Point* tempPoint2 = new qmapcontrol::Point(actualPos.x(), actualPos.y(),"final",qmapcontrol::Point::Middle); - - // camPoints.append(tempPoint1); - // camPoints.append(tempPoint2); - - // camLine->setPoints(camPoints); - - QPen* camBorderPen = new QPen(QColor(255,0,0)); - camBorderPen->setWidth(2); - - //radio = mc->currentZoom() - - if(drawCamBorder) - { - //clear camera borders - mc->layer("Camera")->clearGeometries(); - - //create a camera borders - qmapcontrol::CirclePoint* camBorder = new qmapcontrol::CirclePoint(currentPos.x(), currentPos.y(), radio, "camBorder", qmapcontrol::Point::Middle, camBorderPen); - - //camBorder->setCoordinate(currentPos); - - mc->layer("Camera")->addGeometry(camBorder); - // mc->layer("Camera")->addGeometry(camLine); - if (isVisible()) mc->updateRequestNew(); - - } - else - { - //clear camera borders - mc->layer("Camera")->clearGeometries(); - if (isVisible()) mc->updateRequestNew(); - - } + this->createHomePosition(coordinate); } } -void MapWidget::drawBorderCamAtMap(bool status) +void MapWidget::createHomePosition(const QPointF coordinate) { - drawCamBorder = status; - updateCameraPosition(20,0,"no"); + homeCoordinate= coordinate; + Waypoint2DIcon* tempCirclePoint; -} + double latitude = homeCoordinate.y(); + double longitude = homeCoordinate.x(); -QPointF MapWidget::getPointxBearing_Range(double lat1, double lon1, double bearing, double distance) -{ - QPointF temp; + tempCirclePoint = new Waypoint2DIcon( + longitude, + latitude, + 20, "g", qmapcontrol::Point::Middle); - double rad = M_PI/180; + QPen* pencil = new QPen(Qt::blue); + tempCirclePoint->setPen(pencil); - bearing = bearing*rad; - temp.setX((lon1 + ((distance/60) * (sin(bearing))))); - temp.setY((lat1 + ((distance/60) * (cos(bearing))))); + mc->layer("Station")->clearGeometries(); + mc->layer("Station")->addGeometry(tempCirclePoint); - return temp; -} + qmapcontrol::Point* tempPoint = new qmapcontrol::Point(latitude, longitude,"g"); -void MapWidget::createHomePosition(const QMouseEvent *event, const QPointF coordinate) -{ - if (QEvent::MouseButtonRelease == event->type() && setHome->isChecked()) + if (isVisible()) { - homeCoordinate= coordinate; - Waypoint2DIcon* tempCirclePoint; - - double latitud = homeCoordinate.x(); - double longitud = homeCoordinate.y(); - - tempCirclePoint = new Waypoint2DIcon( - latitud, - longitud, - 20, "g", qmapcontrol::Point::Middle); - - QPen* pencil = new QPen(Qt::blue); - tempCirclePoint->setPen(pencil); - - mc->layer("Station")->clearGeometries(); - mc->layer("Station")->addGeometry(tempCirclePoint); - - qmapcontrol::Point* tempPoint = new qmapcontrol::Point(latitud, longitud,"g"); - - if (isVisible()) - { - mc->updateRequest(tempPoint->boundingBox().toRect()); - } + mc->updateRequest(tempPoint->boundingBox().toRect()); } } @@ -1251,10 +1282,14 @@ void MapWidget::createHomePositionClick(bool click) if (!setHome->isChecked()) { - UASManager::instance()->setHomePosition( - static_cast(homeCoordinate.x()), - static_cast(homeCoordinate.y()), 0); + if(mav) + { + UASManager::instance()->setHomePosition( + static_cast(homeCoordinate.y()), + static_cast(homeCoordinate.x()), 0); - qDebug()<<"Set home position "< - - +#include class QMenu; class Waypoint; @@ -76,8 +75,8 @@ public slots: void updateAttitude(UASInterface* uas, double roll, double pitch, double yaw, quint64 usec); void updateGlobalPosition(UASInterface* uas, double lat, double lon, double alt, quint64 usec); void updatePosition(float time, double lat, double lon); - void updateCameraPosition(double distance, double bearing, QString dir); - QPointF getPointxBearing_Range(double lat1, double lon1, double bearing, double distance); + //void updateCameraPosition(double distance, double bearing, QString dir); + //QPointF getPointxBearing_Range(double lat1, double lon1, double bearing, double distance); /** @brief Clear the waypoints overlay layer */ void clearWaypoints(int uas=0); @@ -93,7 +92,7 @@ public slots: void updateWaypoint(int uas, Waypoint* wp); void updateWaypoint(int uas, Waypoint* wp, bool updateView); - void drawBorderCamAtMap(bool status); + //void drawBorderCamAtMap(bool status); /** @brief Bring up dialog to go to a specific location */ void goTo(); @@ -130,8 +129,6 @@ protected: qmapcontrol::Layer* tracks; ///< Layer for UAV tracks qmapcontrol::GeometryLayer* geomLayer; ///< Layer for waypoints qmapcontrol::GeometryLayer* homePosition; ///< Layer for station control - //only for experiment - //qmapcontrol::GeometryLayer* camLayer; ///< Layer for camera indicator int zoomLevel; int detailZoom; ///< Steps zoomed in further than qMapControl allows @@ -143,8 +140,6 @@ protected: QMap uasIcons; QMap uasTrails; QMap mavPens; - //QMap > mavWps; - //QMap waypointPaths; UASInterface* mav; quint64 lastUpdate; bool initialized; @@ -158,6 +153,8 @@ protected: void captureGeometryDrag(Geometry* geom, QPointF coordinate); void captureGeometryEndDrag(Geometry* geom, QPointF coordinate); + void captureGeometryDragHome(Geometry* geom, QPointF coordinate); + void createPathButtonClicked(bool checked); /** @brief Create the graphic representation of the waypoint */ @@ -165,16 +162,14 @@ protected: void mapproviderSelected(QAction* action); void createHomePosition(const QMouseEvent* event, const QPointF coordinate); + void createHomePosition(const QPointF coordinate); void createHomePositionClick(bool click); + void loadSettingsMap(QSettings &); signals: - //void movePoint(QPointF newCoord); - //void captureMapCoordinateClick(const QPointF coordinate); //ROCA - //void createGlobalWP(bool value, QPointF centerCoordinate); void waypointCreated(Waypoint* wp); void sendGeometryEndDrag(const QPointF coordinate, const int index); - private: Ui::MapWidget *m_ui; QList wps; @@ -184,15 +179,8 @@ private: QPen* pointPen; int wpExists(const QPointF coordinate); bool waypointIsDrag; - - - qmapcontrol::LineString* camLine; - QList camPoints; - QPointF lastCamBorderPos; - bool drawCamBorder; - int radioCamera; - QPointF homeCoordinate; + int8_t index; }; #endif // MAPWIDGET_H diff --git a/src/ui/SlugsPadCameraControl.ui b/src/ui/SlugsPadCameraControl.ui index 39df2f5688a7a0a71e04178fe49bd1d53435e300..63c2ebabd321d1d5ace8bf9cc72e6f13d85e4285 100644 --- a/src/ui/SlugsPadCameraControl.ui +++ b/src/ui/SlugsPadCameraControl.ui @@ -41,7 +41,7 @@ true - background-color: rgba(255, 0, 0,50%); + background-color: rgb(135, 206, 235); QFrame::StyledPanel @@ -67,6 +67,9 @@ + + font-color:rgb(0, 0, 0); + ---- diff --git a/src/ui/uas/UASControlParameters.cpp b/src/ui/uas/UASControlParameters.cpp index 55a4996d710ecdc54c64f3146b7e372d2e71a634..a180334db6eb00dfebb3180ddc451de506328084 100644 --- a/src/ui/uas/UASControlParameters.cpp +++ b/src/ui/uas/UASControlParameters.cpp @@ -80,11 +80,11 @@ void UASControlParameters::changedMode(int mode) if(modeTemp != this->mode) { - ui->lbMode->setStyleSheet("background-color: rgb(255, 0, 0)"); + ui->lbMode->setStyleSheet("background-color: rgb(165, 42, 42)"); } else { - ui->lbMode->setStyleSheet("background-color: rgb(0, 255, 0)"); + ui->lbMode->setStyleSheet("background-color: rgb(85, 107, 47)"); } } @@ -104,12 +104,17 @@ void UASControlParameters::activeUasSet(UASInterface *uas) void UASControlParameters::updateGlobalPosition(UASInterface * a, double b, double c, double aa, quint64 ab) { - //ui->sbHeight->setValue(aa); + Q_UNUSED(a); + Q_UNUSED(b); + Q_UNUSED(c); + Q_UNUSED(ab); this->altitude=aa; } void UASControlParameters::speedChanged(UASInterface* uas, double vx, double vy, double vz, quint64 time) { + Q_UNUSED(time); + Q_UNUSED(uas); this->speed = sqrt(pow(vx, 2.0) + pow(vy, 2.0) + pow(vz, 2.0)); //ui->sbAirSpeed->setValue(speed); } @@ -117,6 +122,8 @@ void UASControlParameters::speedChanged(UASInterface* uas, double vx, double vy, void UASControlParameters::updateAttitude(UASInterface *uas, double roll, double pitch, double yaw, quint64 time) { Q_UNUSED(uas); + Q_UNUSED(pitch); + Q_UNUSED(yaw); Q_UNUSED(time); //ui->sbTurnRate->setValue(roll); this->roll = roll; @@ -194,7 +201,7 @@ void UASControlParameters::updateMode(int uas,QString mode,QString description) this->mode = mode; ui->lbMode->setText(this->mode); - ui->lbMode->setStyleSheet("background-color: rgb(0, 255, 0)"); + ui->lbMode->setStyleSheet("background-color: rgb(85, 107, 47)"); } void UASControlParameters::thrustChanged(UASInterface *uas, double throttle)