53 lines
1.3 KiB
C++
53 lines
1.3 KiB
C++
#include "RasterLayer.h"
|
|
#include "RasterDataProvider.h"
|
|
#include "RasterRenderer.h"
|
|
|
|
RasterLayer::RasterLayer(const QString& name, const QString& uri)
|
|
: MapLayer(name, uri)
|
|
{
|
|
// lazy creation
|
|
}
|
|
|
|
RasterLayer::~RasterLayer()
|
|
{
|
|
}
|
|
|
|
MapLayer::LayerType RasterLayer::layerType() const
|
|
{
|
|
return MapLayer::LayerType::Raster;
|
|
}
|
|
|
|
RasterDataProvider* RasterLayer::dataProvider() const
|
|
{
|
|
return m_provider ? m_provider.get() : nullptr;
|
|
}
|
|
|
|
RasterRenderer* RasterLayer::renderer() const
|
|
{
|
|
return m_renderer ? m_renderer.get() : nullptr;
|
|
}
|
|
|
|
bool RasterLayer::openDataProvider()
|
|
{
|
|
if (!m_provider) m_provider = std::make_unique<RasterDataProvider>(dataPath());
|
|
if (!m_provider) return false;
|
|
bool ok = m_provider->open();
|
|
if (ok && !m_renderer) m_renderer = std::make_unique<RasterRenderer>(m_provider.get());
|
|
return ok;
|
|
}
|
|
|
|
QImage RasterLayer::render(const RenderParams& params)
|
|
{
|
|
if (!m_provider) {
|
|
if (!openDataProvider()) return QImage();
|
|
}
|
|
if (!m_renderer) m_renderer = std::make_unique<RasterRenderer>(m_provider.get());
|
|
RasterRenderer::Params p;
|
|
p.rWave = params.rWave;
|
|
p.gWave = params.gWave;
|
|
p.bWave = params.bWave;
|
|
p.minValue = params.minValue;
|
|
p.maxValue = params.maxValue;
|
|
return m_renderer->render(p);
|
|
}
|