1、为图层添加渲染器和读取器,分离图层基础信息、渲染和读写;
2、LayerTreeLayerNode持有MapLayer图层引用,为右键菜单做准备; 3、改名:imageviewer → mapcavas,mapcavas持有MapLayer图层引用,为刷新图像做准备;
This commit is contained in:
@ -1,12 +1,48 @@
|
||||
#include "RasterLayer.h"
|
||||
#include "RasterDataProvider.h"
|
||||
#include "RasterRenderer.h"
|
||||
|
||||
RasterLayer::RasterLayer(const QString& name, const QString& uri)
|
||||
: MapLayer(name, uri)
|
||||
{
|
||||
|
||||
// lazy creation
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user