Add geographic coordinates to mouse picking functions

This commit is contained in:
Dan Paulat 2024-01-02 00:45:15 -06:00
parent 6e04e1fab3
commit a2f2181f1b
19 changed files with 72 additions and 42 deletions

View file

@ -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;

View file

@ -1,6 +1,7 @@
#pragma once
#include <scwx/qt/gl/gl.hpp>
#include <scwx/common/geographic.hpp>
#include <memory>
@ -41,6 +42,7 @@ 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
*/
@ -48,7 +50,8 @@ public:
RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords);
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords);
protected:
void

View file

@ -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_};

View file

@ -40,7 +40,8 @@ public:
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override;
/**
* Sets the visibility of the geo icons.

View file

@ -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_};

View file

@ -38,7 +38,8 @@ public:
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override;
/**
* Resets and prepares the draw item for adding a new set of icons.

View file

@ -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_};

View file

@ -35,7 +35,8 @@ public:
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override;
/**
* Resets and prepares the draw item for adding a new set of lines.

View file

@ -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;

View file

@ -40,7 +40,8 @@ public:
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override;
/**
* Resets and prepares the draw item for adding a new set of text.

View file

@ -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;

View file

@ -27,7 +27,8 @@ public:
RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override;
protected:
void AddDrawItem(const std::shared_ptr<gl::draw::DrawItem>& drawItem);

View file

@ -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;

View file

@ -1,6 +1,7 @@
#pragma once
#include <scwx/qt/map/map_context.hpp>
#include <scwx/common/geographic.hpp>
#include <memory>
@ -36,6 +37,7 @@ 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
*/
@ -43,7 +45,8 @@ public:
RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords);
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords);
signals:
void NeedsRendering();

View file

@ -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;

View file

@ -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_;

View file

@ -21,10 +21,12 @@ public:
void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final;
void Deinitialize() override final;
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
bool
RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override final;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override final;
public slots:
void UpdateSweepTimeNextFrame();

View file

@ -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())
{

View file

@ -22,10 +22,12 @@ public:
void Render(const QMapLibreGL::CustomLayerRenderParameters&) override final;
void Deinitialize() override final;
bool RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
bool
RunMousePicking(const QMapLibreGL::CustomLayerRenderParameters& params,
const QPointF& mouseLocalPos,
const QPointF& mouseGlobalPos,
const glm::vec2& mouseCoords) override final;
const glm::vec2& mouseCoords,
const common::Coordinate& mouseGeoCoords) override final;
signals:
void RadarSiteSelected(const std::string& id);