mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 21:00:05 +00:00
Draw overlay layer regardless of radar product view, general layer organization
This commit is contained in:
parent
410eb85d3f
commit
b9c4b9e9c7
2 changed files with 48 additions and 46 deletions
|
|
@ -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<GenericLayer> layer,
|
||||
const std::string& before = {});
|
||||
bool UpdateStoredMapParameters();
|
||||
|
||||
std::shared_ptr<MapContext> context_;
|
||||
|
|
@ -77,6 +81,7 @@ public:
|
|||
MapWidget* widget_;
|
||||
QMapboxGLSettings settings_;
|
||||
std::shared_ptr<QMapboxGL> map_;
|
||||
std::list<std::string> layerList_;
|
||||
|
||||
std::shared_ptr<manager::RadarProductManager> 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<RadarProductLayer>(p->context_);
|
||||
p->colorTableLayer_ = std::make_shared<ColorTableLayer>(p->context_);
|
||||
|
||||
std::shared_ptr<config::RadarSite> 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<RadarProductLayer>(p->context_);
|
||||
p->overlayLayer_ = std::make_shared<OverlayLayer>(p->context_);
|
||||
p->colorTableLayer_ = std::make_shared<ColorTableLayer>(p->context_);
|
||||
p->overlayLayer_ = std::make_shared<OverlayLayer>(p->context_);
|
||||
p->AddLayer("overlay", p->overlayLayer_);
|
||||
}
|
||||
|
||||
void MapWidgetImpl::AddLayer(const std::string& id,
|
||||
std::shared_ptr<GenericLayer> layer,
|
||||
const std::string& before)
|
||||
{
|
||||
// QMapboxGL::addCustomLayer will take ownership of the std::unique_ptr
|
||||
std::unique_ptr<QMapbox::CustomLayerHostInterface> pHost =
|
||||
std::make_unique<LayerWrapper>(p->radarProductLayer_);
|
||||
std::unique_ptr<QMapbox::CustomLayerHostInterface> pOverlayHost =
|
||||
std::make_unique<LayerWrapper>(p->overlayLayer_);
|
||||
std::unique_ptr<QMapbox::CustomLayerHostInterface> pColorTableHost =
|
||||
std::make_unique<LayerWrapper>(p->colorTableLayer_);
|
||||
std::make_unique<LayerWrapper>(layer);
|
||||
|
||||
std::shared_ptr<config::RadarSite> 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)
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue