From a2f2181f1b433af4902181cb19b0fba82c1200ca Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 2 Jan 2024 00:45:15 -0600 Subject: [PATCH] Add geographic coordinates to mouse picking functions --- scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp | 3 ++- scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp | 9 ++++++--- scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp | 3 ++- scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp | 7 ++++--- scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp | 3 ++- scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp | 7 ++++--- scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp | 3 ++- scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp | 7 ++++--- scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp | 3 ++- scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp | 7 ++++--- scwx-qt/source/scwx/qt/map/draw_layer.cpp | 10 +++++++--- scwx-qt/source/scwx/qt/map/draw_layer.hpp | 7 ++++--- scwx-qt/source/scwx/qt/map/generic_layer.cpp | 3 ++- scwx-qt/source/scwx/qt/map/generic_layer.hpp | 9 ++++++--- scwx-qt/source/scwx/qt/map/map_widget.cpp | 7 +++++-- scwx-qt/source/scwx/qt/map/overlay_layer.cpp | 3 ++- scwx-qt/source/scwx/qt/map/overlay_layer.hpp | 10 ++++++---- scwx-qt/source/scwx/qt/map/radar_site_layer.cpp | 3 ++- scwx-qt/source/scwx/qt/map/radar_site_layer.hpp | 10 ++++++---- 19 files changed, 72 insertions(+), 42 deletions(-) diff --git a/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp b/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp index 21dab7b0..a86d3362 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/draw_item.cpp @@ -57,7 +57,8 @@ bool DrawItem::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& /* params */, const QPointF& /* mouseLocalPos */, const QPointF& /* mouseGlobalPos */, - const glm::vec2& /* mouseCoords */) + const glm::vec2& /* mouseCoords */, + const common::Coordinate& /* mouseGeoCoords */) { // By default, the draw item is not picked return false; diff --git a/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp b/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp index b4d7d4ce..33bb0ff5 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/draw_item.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include @@ -41,14 +42,16 @@ public: * @param [in] mouseLocalPos Mouse cursor widget position * @param [in] mouseGlobalPos Mouse cursor screen position * @param [in] mouseCoords Mouse cursor location in map screen coordinates + * @param [in] mouseGeoCoords Mouse cursor location in geographic coordinates * * @return true if the draw item was picked, otherwise false */ virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords); + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords); protected: void diff --git a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp index fb5dad75..e3c7b0a3 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.cpp @@ -794,7 +794,8 @@ bool GeoIcons::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& params, const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) + const glm::vec2& mouseCoords, + const common::Coordinate& /* mouseGeoCoords */) { std::unique_lock lock {p->iconMutex_}; diff --git a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp index 9d4bc9a7..575692ca 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/geo_icons.hpp @@ -38,9 +38,10 @@ public: void Deinitialize() override; bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override; /** * Sets the visibility of the geo icons. diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp index 36c792db..f5550c26 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.cpp @@ -688,7 +688,8 @@ bool PlacefileIcons::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& params, const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) + const glm::vec2& mouseCoords, + const common::Coordinate& /* mouseGeoCoords */) { std::unique_lock lock {p->iconMutex_}; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp index 16ac08cd..2e15c26d 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_icons.hpp @@ -36,9 +36,10 @@ public: void Deinitialize() override; bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override; /** * Resets and prepares the draw item for adding a new set of icons. diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp index df0eff48..d1d74299 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.cpp @@ -499,7 +499,8 @@ bool PlacefileLines::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& params, const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) + const glm::vec2& mouseCoords, + const common::Coordinate& /* mouseGeoCoords */) { std::unique_lock lock {p->lineMutex_}; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp index c4f9c7ad..09589369 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_lines.hpp @@ -33,9 +33,10 @@ public: void Deinitialize() override; bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override; /** * Resets and prepares the draw item for adding a new set of lines. diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp index 44851fa3..f9de167a 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.cpp @@ -241,7 +241,8 @@ bool PlacefileText::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& /* params */, const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, - const glm::vec2& /* mouseCoords */) + const glm::vec2& /* mouseCoords */, + const common::Coordinate& /* mouseGeoCoords */) { bool itemPicked = false; diff --git a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp index a8d23bc3..76cf9bbf 100644 --- a/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp +++ b/scwx-qt/source/scwx/qt/gl/draw/placefile_text.hpp @@ -38,9 +38,10 @@ public: void Deinitialize() override; bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override; /** * Resets and prepares the draw item for adding a new set of text. diff --git a/scwx-qt/source/scwx/qt/map/draw_layer.cpp b/scwx-qt/source/scwx/qt/map/draw_layer.cpp index 1cbcd849..ef52f58d 100644 --- a/scwx-qt/source/scwx/qt/map/draw_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/draw_layer.cpp @@ -80,7 +80,8 @@ bool DrawLayer::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& params, const QPointF& mouseLocalPos, const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) { bool itemPicked = false; @@ -88,8 +89,11 @@ bool DrawLayer::RunMousePicking( for (auto it = p->drawList_.rbegin(); it != p->drawList_.rend(); ++it) { // Run mouse picking on each draw item - if ((*it)->RunMousePicking( - params, mouseLocalPos, mouseGlobalPos, mouseCoords)) + if ((*it)->RunMousePicking(params, + mouseLocalPos, + mouseGlobalPos, + mouseCoords, + mouseGeoCoords)) { // If a draw item was picked, don't process additional items itemPicked = true; diff --git a/scwx-qt/source/scwx/qt/map/draw_layer.hpp b/scwx-qt/source/scwx/qt/map/draw_layer.hpp index 912657fa..9fe6e719 100644 --- a/scwx-qt/source/scwx/qt/map/draw_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/draw_layer.hpp @@ -25,9 +25,10 @@ public: virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override; + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override; protected: void AddDrawItem(const std::shared_ptr& drawItem); diff --git a/scwx-qt/source/scwx/qt/map/generic_layer.cpp b/scwx-qt/source/scwx/qt/map/generic_layer.cpp index 2c7ae6f2..2c6a4e24 100644 --- a/scwx-qt/source/scwx/qt/map/generic_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/generic_layer.cpp @@ -30,7 +30,8 @@ bool GenericLayer::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& /* params */, const QPointF& /* mouseLocalPos */, const QPointF& /* mouseGlobalPos */, - const glm::vec2& /* mousePos */) + const glm::vec2& /* mousePos */, + const common::Coordinate& /* mouseGeoCoords */) { // By default, the layer has nothing to pick return false; diff --git a/scwx-qt/source/scwx/qt/map/generic_layer.hpp b/scwx-qt/source/scwx/qt/map/generic_layer.hpp index 355680b8..545873ea 100644 --- a/scwx-qt/source/scwx/qt/map/generic_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/generic_layer.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include @@ -36,14 +37,16 @@ public: * @param [in] mouseLocalPos Mouse cursor widget position * @param [in] mouseGlobalPos Mouse cursor screen position * @param [in] mouseCoords Mouse cursor location in map screen coordinates + * @param [in] mouseGeoCoords Mouse cursor location in geographic coordinates * * @return true if a draw item was picked, otherwise false */ virtual bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords); + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords); signals: void NeedsRendering(); diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index ebadf50b..53b234e2 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -1215,8 +1215,11 @@ void MapWidgetImpl::RunMousePicking() for (auto it = genericLayers_.rbegin(); it != genericLayers_.rend(); ++it) { // Run mouse picking for each layer - if ((*it)->RunMousePicking( - params, lastPos_, lastGlobalPos_, mouseScreenCoordinate)) + if ((*it)->RunMousePicking(params, + lastPos_, + lastGlobalPos_, + mouseScreenCoordinate, + {coordinate.first, coordinate.second})) { // If a draw item was picked, don't process additional layers itemPicked = true; diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index fdf17463..c9cfca07 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -277,7 +277,8 @@ bool OverlayLayer::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& /* params */, const QPointF& /* mouseLocalPos */, const QPointF& /* mouseGlobalPos */, - const glm::vec2& /* mouseCoords */) + const glm::vec2& /* mouseCoords */, + const common::Coordinate& /* mouseGeoCoords */) { // If sweep time was picked, don't process additional items return p->sweepTimePicked_; diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.hpp b/scwx-qt/source/scwx/qt/map/overlay_layer.hpp index eb5b55ec..6e5e4c35 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.hpp @@ -21,10 +21,12 @@ public: void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final; void Deinitialize() override final; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override final; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override final; public slots: void UpdateSweepTimeNextFrame(); diff --git a/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp b/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp index 92d8a1f6..9d4d6906 100644 --- a/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/radar_site_layer.cpp @@ -157,7 +157,8 @@ bool RadarSiteLayer::RunMousePicking( const QMapLibreGL::CustomLayerRenderParameters& /* params */, const QPointF& /* mouseLocalPos */, const QPointF& mouseGlobalPos, - const glm::vec2& /* mouseCoords */) + const glm::vec2& /* mouseCoords */, + const common::Coordinate& /* mouseGeoCoords */) { if (!p->hoverText_.empty()) { diff --git a/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp b/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp index 639be3b6..6335e153 100644 --- a/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp +++ b/scwx-qt/source/scwx/qt/map/radar_site_layer.hpp @@ -22,10 +22,12 @@ public: void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final; void Deinitialize() override final; - bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, - const QPointF& mouseLocalPos, - const QPointF& mouseGlobalPos, - const glm::vec2& mouseCoords) override final; + bool + RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params, + const QPointF& mouseLocalPos, + const QPointF& mouseGlobalPos, + const glm::vec2& mouseCoords, + const common::Coordinate& mouseGeoCoords) override final; signals: void RadarSiteSelected(const std::string& id);