From e970ab428e1362d1924187c8132257dcc1b4ecff Mon Sep 17 00:00:00 2001 From: gaozheng Date: Tue, 30 Jun 2026 22:03:10 +0800 Subject: [PATCH] =?UTF-8?q?refactor(vtk):=20=E7=A7=BB=E9=99=A4=E9=80=80?= =?UTF-8?q?=E5=BD=B9=E7=9A=84=20Column2DDataset(=E5=B9=B6=E5=85=A5?= =?UTF-8?q?=E7=BB=9F=E4=B8=80=E5=8D=95=E5=88=97)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/CMakeLists.txt | 1 - src/app/panels/columns/Column2DDataset.cpp | 129 --------------------- src/app/panels/columns/Column2DDataset.hpp | 31 ----- 3 files changed, 161 deletions(-) delete mode 100644 src/app/panels/columns/Column2DDataset.cpp delete mode 100644 src/app/panels/columns/Column2DDataset.hpp diff --git a/src/app/CMakeLists.txt b/src/app/CMakeLists.txt index dd1434f..9f06ef4 100644 --- a/src/app/CMakeLists.txt +++ b/src/app/CMakeLists.txt @@ -80,7 +80,6 @@ add_executable(geopro_desktop WIN32 panels/chart/ChartPickGeometry.cpp panels/chart/ScatterMarqueePicker.cpp panels/chart/ContourDrawTool.cpp - panels/columns/Column2DDataset.cpp panels/columns/CategorySection.cpp panels/columns/CategoryAnalysisTab.cpp panels/columns/DateRangeEdit.cpp diff --git a/src/app/panels/columns/Column2DDataset.cpp b/src/app/panels/columns/Column2DDataset.cpp deleted file mode 100644 index a8da596..0000000 --- a/src/app/panels/columns/Column2DDataset.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include "panels/columns/Column2DDataset.hpp" - -#include -#include - -#include - -#include "EmptyAwareComboBox.hpp" -#include -#include -#include -#include -#include -#include -#include -#include - -#include "Theme.hpp" -#include "panels/DatasetListPanel.hpp" - -namespace geopro::app { - -Column2DDataset::Column2DDataset(QWidget* parent) : QWidget(parent) { - auto* root = new QVBoxLayout(this); - root->setContentsMargins(space::kMd, space::kMd, space::kMd, space::kMd); - root->setSpacing(space::kMd); - - // 地图 - { - auto* form = new QFormLayout(); - auto* basemap = new EmptyAwareComboBox(); - basemap->addItem(QStringLiteral("天地图")); - basemap->addItem(QStringLiteral("Google Map")); - basemap->addItem(QStringLiteral("隐藏")); - basemap->setCurrentIndex(0); // 默认天地图:数据重锚后由 onFrameReanchored 在数据位置加载 - connect(basemap, qOverload(&QComboBox::currentIndexChanged), this, - [this](int index) { emit basemapChanged(index); }); - form->addRow(QStringLiteral("底图源"), basemap); - root->addWidget(new QLabel(QStringLiteral("地图"))); - root->addLayout(form); - } - - // 2D视图 - { - auto* form = new QFormLayout(); - auto* view2d = new EmptyAwareComboBox(); - view2d->addItem(QStringLiteral("关闭")); - view2d->addItem(QStringLiteral("Z=0")); - view2d->addItem(QStringLiteral("顶部")); - view2d->addItem(QStringLiteral("底部")); - view2d->addItem(QStringLiteral("自定义")); - view2d->setCurrentIndex(1); - auto* zSpin = new QDoubleSpinBox(); - zSpin->setRange(-1000000, 1000000); - zSpin->setSuffix(QStringLiteral(" m")); - zSpin->setValue(0); - connect(view2d, qOverload(&QComboBox::currentIndexChanged), this, - [this, form, zSpin](int idx) { - form->setRowVisible(zSpin, idx == 4); // 整行隐藏(含"Z 值"标签),非自定义时不留孤标签 - emit view2DModeChanged(idx); - }); - connect(zSpin, qOverload(&QDoubleSpinBox::valueChanged), this, - [this](double z) { emit customZChanged(z); }); - form->addRow(QStringLiteral("位置"), view2d); - form->addRow(QStringLiteral("Z 值"), zSpin); - form->setRowVisible(zSpin, false); // 默认非自定义→隐藏整行 - root->addWidget(new QLabel(QStringLiteral("2D视图"))); - root->addLayout(form); - } - - // 数据集列表(可勾选) - list_ = new QTreeWidget(); - list_->setHeaderHidden(true); - list_->setRootIsDecorated(true); - list_->setSelectionMode(QAbstractItemView::ExtendedSelection); // 多选行(与 VTK 多选拖动联动) - applyDatasetCardDelegate(list_); - connect(list_, &QTreeWidget::itemChanged, this, [this](QTreeWidgetItem*, int) { - QStringList ids; - for (QTreeWidgetItemIterator it(list_); *it; ++it) { - if ((*it)->checkState(0) == Qt::Checked) - ids << (*it)->data(0, kDsIdRole).toString(); - } - emit checkedDatasetsChanged(ids); - }); - // 行选中变化 → 上抛选中 dsId(高亮联动 VTK;与勾选/渲染独立)。 - connect(list_, &QTreeWidget::itemSelectionChanged, this, [this]() { - QStringList ids; - for (QTreeWidgetItem* it : list_->selectedItems()) - ids << it->data(0, kDsIdRole).toString(); - emit selectedDatasetsChanged(ids); - }); - root->addWidget(list_, 1); -} - -void Column2DDataset::setDatasets(const std::vector& rows) { - // 增量保留:记住当前已勾选的足迹 ds,重建后复原(仍存在的项保持勾选)。否则对象树每次增删勾选都触发 - // 本刷新 → 清空全部勾选 + 上抛空集 → 已渲染足迹被移除、列表选中丢失(用户反馈:必须增量更新, - // 与三维分析段 CategorySection::rebuildList 同一处理)。 - std::set wasChecked; - for (QTreeWidgetItemIterator it(list_); *it; ++it) - if ((*it)->checkState(0) == Qt::Checked) - wasChecked.insert((*it)->data(0, kDsIdRole).toString().toStdString()); - - { - QSignalBlocker blocker(list_); - populateDatasetList(list_, rows, /*append=*/false); - for (QTreeWidgetItemIterator it(list_); *it; ++it) { - (*it)->setFlags((*it)->flags() | Qt::ItemIsUserCheckable); - const std::string id = (*it)->data(0, kDsIdRole).toString().toStdString(); - // 复原勾选:仍存在的曾勾选项保持勾选;新项默认不勾。 - (*it)->setCheckState(0, wasChecked.count(id) ? Qt::Checked : Qt::Unchecked); - } - } // blocker released here - // 上抛复原后的勾选集(保持渲染,不再清空 → 控制器据 diff 增量保留已渲染足迹,集合不变则不增删)。 - QStringList ids; - for (QTreeWidgetItemIterator it(list_); *it; ++it) - if ((*it)->checkState(0) == Qt::Checked) - ids << (*it)->data(0, kDsIdRole).toString(); - emit checkedDatasetsChanged(ids); -} - -void Column2DDataset::setSelectedDsIds(const QStringList& dsIds) { - QSignalBlocker blocker(list_); // 防回环:VTK→列表 设置选中不再上抛 selectedDatasetsChanged - list_->clearSelection(); - for (QTreeWidgetItemIterator it(list_); *it; ++it) - if (dsIds.contains((*it)->data(0, kDsIdRole).toString())) (*it)->setSelected(true); -} - -} // namespace geopro::app diff --git a/src/app/panels/columns/Column2DDataset.hpp b/src/app/panels/columns/Column2DDataset.hpp deleted file mode 100644 index 5003510..0000000 --- a/src/app/panels/columns/Column2DDataset.hpp +++ /dev/null @@ -1,31 +0,0 @@ -#pragma once -#include -#include -#include -#include "repo/RepoTypes.hpp" - -class QTreeWidget; - -namespace geopro::app { - -// 二维数据集栏:地图 + 2D视图(含自定义 Z) + 2D 数据集列表。 -class Column2DDataset : public QWidget { - Q_OBJECT -public: - explicit Column2DDataset(QWidget* parent = nullptr); - void setDatasets(const std::vector& rows); - // VTK→列表 选择联动:按 dsId 选中对应行(高亮),内部屏蔽信号避免回环。 - void setSelectedDsIds(const QStringList& dsIds); - -signals: - void basemapChanged(int index); // 0 天地图 / 1 Google / 2 隐藏 - void view2DModeChanged(int index); // 0 关闭 /1 Z=0 /2 顶部 /3 底部 /4 自定义 - void customZChanged(double z); // 世界绝对高程(米),向上为正 - void checkedDatasetsChanged(const QStringList& dsIds); // 勾选(渲染开关)变化 - void selectedDatasetsChanged(const QStringList& dsIds); // 行选中(高亮联动)变化,非勾选 - -private: - QTreeWidget* list_ = nullptr; -}; - -} // namespace geopro::app