From b9c4b9e9c7f511fcfaac71c6c61b563b748d684d Mon Sep 17 00:00:00 2001 From: Dan Paulat Date: Tue, 1 Mar 2022 22:50:21 -0600 Subject: [PATCH] Draw overlay layer regardless of radar product view, general layer organization --- scwx-qt/source/scwx/qt/map/map_widget.cpp | 92 ++++++++++---------- scwx-qt/source/scwx/qt/map/overlay_layer.cpp | 2 +- 2 files changed, 48 insertions(+), 46 deletions(-) diff --git a/scwx-qt/source/scwx/qt/map/map_widget.cpp b/scwx-qt/source/scwx/qt/map/map_widget.cpp index bc355d49..bee41266 100644 --- a/scwx-qt/source/scwx/qt/map/map_widget.cpp +++ b/scwx-qt/source/scwx/qt/map/map_widget.cpp @@ -54,6 +54,7 @@ public: widget_ {widget}, settings_(settings), map_(), + layerList_ {}, radarProductManager_ {manager::RadarProductManager::Instance("KLSX")}, radarProductLayer_ {nullptr}, overlayLayer_ {nullptr}, @@ -70,6 +71,9 @@ public: } ~MapWidgetImpl() = default; + void AddLayer(const std::string& id, + std::shared_ptr layer, + const std::string& before = {}); bool UpdateStoredMapParameters(); std::shared_ptr context_; @@ -77,6 +81,7 @@ public: MapWidget* widget_; QMapboxGLSettings settings_; std::shared_ptr map_; + std::list layerList_; std::shared_ptr radarProductManager_; @@ -276,59 +281,56 @@ void MapWidget::changeStyle() void MapWidget::AddLayers() { - if (p->context_->radarProductView_ == nullptr) + // Clear custom layers + for (const std::string& id : p->layerList_) { - return; + p->map_->removeLayer(id.c_str()); + } + p->layerList_.clear(); + + if (p->context_->radarProductView_ != nullptr) + { + p->radarProductLayer_ = std::make_shared(p->context_); + p->colorTableLayer_ = std::make_shared(p->context_); + + std::shared_ptr radarSite = + p->radarProductManager_->radar_site(); + + std::string before = "ferry"; + + for (const QString& layer : p->map_->layerIds()) + { + // Draw below tunnels, ferries and roads + if (layer.startsWith("tunnel") || layer.startsWith("ferry") || + layer.startsWith("road")) + { + before = layer.toStdString(); + break; + } + } + + p->AddLayer("radar", p->radarProductLayer_, before); + RadarRangeLayer::Add(p->map_, + p->context_->radarProductView_->range(), + {radarSite->latitude(), radarSite->longitude()}); + p->AddLayer("colorTable", p->colorTableLayer_); } - // TODO: Improve this - if (p->map_->layerExists("radar")) - { - p->map_->removeLayer("radar"); - } - if (p->map_->layerExists("overlay")) - { - p->map_->removeLayer("overlay"); - } - if (p->map_->layerExists("colorTable")) - { - p->map_->removeLayer("colorTable"); - } - - p->radarProductLayer_ = std::make_shared(p->context_); - p->overlayLayer_ = std::make_shared(p->context_); - p->colorTableLayer_ = std::make_shared(p->context_); + p->overlayLayer_ = std::make_shared(p->context_); + p->AddLayer("overlay", p->overlayLayer_); +} +void MapWidgetImpl::AddLayer(const std::string& id, + std::shared_ptr layer, + const std::string& before) +{ // QMapboxGL::addCustomLayer will take ownership of the std::unique_ptr std::unique_ptr pHost = - std::make_unique(p->radarProductLayer_); - std::unique_ptr pOverlayHost = - std::make_unique(p->overlayLayer_); - std::unique_ptr pColorTableHost = - std::make_unique(p->colorTableLayer_); + std::make_unique(layer); - std::shared_ptr radarSite = - p->radarProductManager_->radar_site(); + map_->addCustomLayer(id.c_str(), std::move(pHost), before.c_str()); - QString before = "ferry"; - - for (const QString& layer : p->map_->layerIds()) - { - // Draw below tunnels, ferries and roads - if (layer.startsWith("tunnel") || layer.startsWith("ferry") || - layer.startsWith("road")) - { - before = layer; - break; - } - } - - p->map_->addCustomLayer("radar", std::move(pHost), before); - RadarRangeLayer::Add(p->map_, - p->context_->radarProductView_->range(), - {radarSite->latitude(), radarSite->longitude()}); - p->map_->addCustomLayer("colorTable", std::move(pColorTableHost)); - p->map_->addCustomLayer("overlay", std::move(pOverlayHost)); + layerList_.push_back(id); } void MapWidget::keyPressEvent(QKeyEvent* ev) diff --git a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp index 5f07668e..a9267b44 100644 --- a/scwx-qt/source/scwx/qt/map/overlay_layer.cpp +++ b/scwx-qt/source/scwx/qt/map/overlay_layer.cpp @@ -103,7 +103,7 @@ void OverlayLayer::Render(const QMapbox::CustomLayerRenderParameters& params) gl::OpenGLFunctions& gl = context()->gl_; - if (p->sweepTimeNeedsUpdate_) + if (p->sweepTimeNeedsUpdate_ && context()->radarProductView_ != nullptr) { using namespace std::chrono; auto sweepTime =