|
|
|
|
@ -2,6 +2,8 @@
|
|
|
|
|
//#include <afx.h>
|
|
|
|
|
|
|
|
|
|
#include <exception>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <QMessageBox>
|
|
|
|
|
#include <QFileInfo> // 新增,用于解析路径
|
|
|
|
|
|
|
|
|
|
@ -1016,28 +1018,31 @@ void HPPA::removeLayerByTreeIndex()
|
|
|
|
|
auto* layerNode = static_cast<LayerTreeLayer*>(node);
|
|
|
|
|
MapLayer* mapLayer = layerNode->mapLayer();
|
|
|
|
|
|
|
|
|
|
QWidget* layerWidget = nullptr;
|
|
|
|
|
if (!mapLayer || !m_MapLayerStore) return;
|
|
|
|
|
|
|
|
|
|
if (mapLayer && m_MapLayerStore)
|
|
|
|
|
// 获取该 mapLayer 对应的所有 widget 并从 tab 中移除
|
|
|
|
|
std::vector<QWidget*> widgets = m_MapLayerStore->widgetsForMapLayer(mapLayer);
|
|
|
|
|
for (QWidget* widget : widgets)
|
|
|
|
|
{
|
|
|
|
|
layerWidget = m_MapLayerStore->widgetForLayer(mapLayer);
|
|
|
|
|
m_MapLayerStore->removeLayer(mapLayer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (layerWidget && m_imageViewerTabWidget)
|
|
|
|
|
{
|
|
|
|
|
const int tabIndex = m_imageViewerTabWidget->indexOf(layerWidget);
|
|
|
|
|
if (tabIndex >= 0)
|
|
|
|
|
if (widget && m_imageViewerTabWidget)
|
|
|
|
|
{
|
|
|
|
|
if (m_recordFrameCounter)
|
|
|
|
|
const int tabIndex = m_imageViewerTabWidget->indexOf(widget);
|
|
|
|
|
if (tabIndex >= 0)
|
|
|
|
|
{
|
|
|
|
|
m_recordFrameCounter->removeCounter(layerWidget);
|
|
|
|
|
if (m_recordFrameCounter)
|
|
|
|
|
{
|
|
|
|
|
m_recordFrameCounter->removeCounter(widget);
|
|
|
|
|
}
|
|
|
|
|
m_imageViewerTabWidget->removeTab(tabIndex);
|
|
|
|
|
}
|
|
|
|
|
m_imageViewerTabWidget->removeTab(tabIndex);
|
|
|
|
|
widget->deleteLater();
|
|
|
|
|
}
|
|
|
|
|
layerWidget->deleteLater();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除 MapLayerStore 中的 mapLayer
|
|
|
|
|
m_MapLayerStore->removeLayer(mapLayer);
|
|
|
|
|
|
|
|
|
|
// 删除树模型中的节点
|
|
|
|
|
LayerTreeNode* parent = node->parentNode();
|
|
|
|
|
int row = node->rowInParent();
|
|
|
|
|
LayerTreeNode* removed = model->removeNode(parent, row);
|
|
|
|
|
@ -1050,7 +1055,6 @@ void HPPA::removeLayerByTreeIndex()
|
|
|
|
|
void HPPA::showColorImageByTreeIndex()
|
|
|
|
|
{
|
|
|
|
|
QModelIndex currentIndexTmp = m_layerTreeView->currentIndex();
|
|
|
|
|
|
|
|
|
|
if (!currentIndexTmp.isValid()) return;
|
|
|
|
|
|
|
|
|
|
LayerTreeModel* model = const_cast<LayerTreeModel*>(static_cast<const LayerTreeModel*>(currentIndexTmp.model()));
|
|
|
|
|
@ -1060,8 +1064,9 @@ void HPPA::showColorImageByTreeIndex()
|
|
|
|
|
if (!node || node->type() != LayerTreeNode::Type::Layer) return;
|
|
|
|
|
|
|
|
|
|
auto* layerNode = static_cast<LayerTreeLayer*>(node);
|
|
|
|
|
MapLayer* mapLayer = layerNode->mapLayer();
|
|
|
|
|
RasterLayer* mapLayer = static_cast<RasterLayer*>(layerNode->mapLayer());
|
|
|
|
|
|
|
|
|
|
newImage(mapLayer, RasterImageLayer::RendererType::Multiband, node);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HPPA::removeImageByTreeIndex()
|
|
|
|
|
@ -2604,7 +2609,7 @@ void HPPA::onLayerCreatedFromFile(const QString& baseName, const QString& filePa
|
|
|
|
|
addLayer(baseName, filePath, false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refresh)
|
|
|
|
|
void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refresh, bool isAddImage)
|
|
|
|
|
{
|
|
|
|
|
// Create MapLayer first and attach it to a LayerTreeLayerNode
|
|
|
|
|
RasterLayer* ml = new RasterLayer(baseName, filePath);
|
|
|
|
|
@ -2614,13 +2619,31 @@ void HPPA::addLayer(const QString& baseName, const QString& filePath,bool refres
|
|
|
|
|
|
|
|
|
|
if (m_MapLayerStore) m_MapLayerStore->addLayer(ml);
|
|
|
|
|
|
|
|
|
|
QWidget* mapcavasContainer = onCreateTab(baseName);
|
|
|
|
|
RasterImageLayer* rasterImageLayer = new RasterImageLayer(ml, RasterImageLayer::RendererType::Multiband);
|
|
|
|
|
if (isAddImage)
|
|
|
|
|
{
|
|
|
|
|
newImage(ml, RasterImageLayer::RendererType::Multiband, node);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HPPA::newImage(RasterLayer* ml, RasterImageLayer::RendererType type, LayerTreeNode* parent, bool refresh)
|
|
|
|
|
{
|
|
|
|
|
QWidget* mapcavasContainer = onCreateTab(ml->name());
|
|
|
|
|
RasterImageLayer* rasterImageLayer = new RasterImageLayer(ml, type);
|
|
|
|
|
QList<Mapcavas*> mapcavas = mapcavasContainer->findChildren<Mapcavas*>();
|
|
|
|
|
mapcavas[0]->setImageLayer(rasterImageLayer);
|
|
|
|
|
|
|
|
|
|
LayerTreeImageNode* imageNode = new LayerTreeImageNode(rasterImageLayer, "222");
|
|
|
|
|
LayerTreeNode* node2 = m_LayerTreeModel->addLayer(node, imageNode);
|
|
|
|
|
QString title = ml->name();
|
|
|
|
|
if (type == RasterImageLayer::RendererType::Multiband)
|
|
|
|
|
{
|
|
|
|
|
title = title + "-RGB";
|
|
|
|
|
}
|
|
|
|
|
else if(type == RasterImageLayer::RendererType::Singleband)
|
|
|
|
|
{
|
|
|
|
|
title = title + "-GreyScale";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LayerTreeImageNode* imageNode = new LayerTreeImageNode(rasterImageLayer, title);
|
|
|
|
|
LayerTreeNode* node2 = m_LayerTreeModel->addLayer(parent, imageNode);
|
|
|
|
|
|
|
|
|
|
if (m_MapLayerStore) m_MapLayerStore->addImageLayer(ml, rasterImageLayer, mapcavasContainer);
|
|
|
|
|
|
|
|
|
|
@ -2634,50 +2657,72 @@ void HPPA::onLayerTreeSelectionChanged(const QItemSelection& selected, const QIt
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(deselected);
|
|
|
|
|
|
|
|
|
|
if (selected.indexes().isEmpty()) {
|
|
|
|
|
if (selected.indexes().isEmpty())
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QModelIndex idx = selected.indexes().first();
|
|
|
|
|
if (!idx.isValid()) {
|
|
|
|
|
if (!idx.isValid())
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LayerTreeNode* node = static_cast<LayerTreeNode*>(idx.internalPointer());
|
|
|
|
|
if (!node || node->type() != LayerTreeNode::Type::Layer) {
|
|
|
|
|
LayerTreeNode* node = static_cast<LayerTreeNode*>(idx.internalPointer());
|
|
|
|
|
|
|
|
|
|
if (!node || node->type() == LayerTreeNode::Type::Group)
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//后续工作:当选择图层树中的图层时,应该显示此图层的元数据
|
|
|
|
|
if (!node || node->type() == LayerTreeNode::Type::Layer)
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
auto* layerNode = static_cast<LayerTreeLayer*>(node);
|
|
|
|
|
MapLayer* mapLayer = layerNode->mapLayer();
|
|
|
|
|
if (!mapLayer || mapLayer->layerType() != MapLayer::LayerType::Raster) {
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!node || node->type() == LayerTreeNode::Type::Image)
|
|
|
|
|
{
|
|
|
|
|
auto* imageNode = static_cast<LayerTreeImageNode*>(node);
|
|
|
|
|
RasterImageLayer* imageLayer = imageNode->imageLayer();
|
|
|
|
|
MapLayer* mapLayer = imageLayer->layer();
|
|
|
|
|
|
|
|
|
|
// Also switch to the corresponding tab in the image viewer
|
|
|
|
|
if (m_MapLayerStore && m_imageViewerTabWidget) {
|
|
|
|
|
QWidget* widget = m_MapLayerStore->widgetForLayer(mapLayer);
|
|
|
|
|
if (widget) {
|
|
|
|
|
int tabIndex = m_imageViewerTabWidget->indexOf(widget);
|
|
|
|
|
if (tabIndex >= 0) {
|
|
|
|
|
m_imageViewerTabWidget->setCurrentIndex(tabIndex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!mapLayer || mapLayer->layerType() != MapLayer::LayerType::Raster) {
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Get RasterImageLayer from the Mapcavas container
|
|
|
|
|
QList<Mapcavas*> mapcavas = widget->findChildren<Mapcavas*>();
|
|
|
|
|
if (!mapcavas.isEmpty()) {
|
|
|
|
|
m_ic->setActiveLayer(mapcavas[0]->imageLayer());
|
|
|
|
|
} else {
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
}
|
|
|
|
|
if (m_MapLayerStore && m_imageViewerTabWidget)
|
|
|
|
|
{
|
|
|
|
|
QWidget* widget = m_MapLayerStore->widgetForImageLayer(imageLayer);
|
|
|
|
|
if (widget)
|
|
|
|
|
{
|
|
|
|
|
int tabIndex = m_imageViewerTabWidget->indexOf(widget);
|
|
|
|
|
if (tabIndex >= 0)
|
|
|
|
|
{
|
|
|
|
|
m_imageViewerTabWidget->setCurrentIndex(tabIndex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QList<Mapcavas*> mapcavas = widget->findChildren<Mapcavas*>();
|
|
|
|
|
if (!mapcavas.isEmpty())
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(mapcavas[0]->imageLayer());
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
m_ic->setActiveLayer(nullptr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void HPPA::onBandSelectionChanged(double rWave, double gWave, double bWave)
|
|
|
|
|
@ -2693,7 +2738,7 @@ void HPPA::onBandSelectionChanged(double rWave, double gWave, double bWave)
|
|
|
|
|
|
|
|
|
|
if (!m_MapLayerStore) return;
|
|
|
|
|
MapLayer* mapLayer = imageLayer->layer();
|
|
|
|
|
QWidget* container = m_MapLayerStore->widgetForLayer(mapLayer);
|
|
|
|
|
QWidget* container = m_MapLayerStore->widgetForImageLayer(imageLayer);
|
|
|
|
|
if (!container) return;
|
|
|
|
|
|
|
|
|
|
QList<Mapcavas*> mapcavas = container->findChildren<Mapcavas*>();
|
|
|
|
|
|