feat(app): 对象树拉取改 checkedSourcesChanged+confType 分流(支持 GS 直挂 ds)(Task12 #1)

This commit is contained in:
gaozheng 2026-06-24 21:13:28 +08:00
parent 6edfad9a2f
commit 1d744bab81
1 changed files with 9 additions and 8 deletions

View File

@ -1223,27 +1223,28 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
// 渲染由三栏勾选框驱动Task 7Column3DDataset::checkedDatasetsChanged → setCheckedDatasets
auto generation = std::make_shared<unsigned long long>(0);
QObject::connect(
objectTree, &geopro::app::ObjectTreePanel::checkedTmsChanged, &window,
objectTree, &geopro::app::ObjectTreePanel::checkedSourcesChanged, &window,
[&projectRepo, &nav, drawer, emptyState, generation, lastSourceRows,
refreshAnalysis](const QStringList& tmIds) {
refreshAnalysis](const QList<geopro::data::DataSource>& sources) {
const unsigned long long myGen = ++(*generation);
emptyState->setVisible(tmIds.isEmpty()); // 有勾选→隐藏引导层,露出中央渲染
if (tmIds.isEmpty()) {
emptyState->setVisible(sources.isEmpty()); // 有勾选→隐藏引导层,露出中央渲染
if (sources.isEmpty()) {
*lastSourceRows = {};
refreshAnalysis(); // 清空 5 段(客户端三维体仍驻留) + col2D
return;
}
// 多 TM 异步汇总:每个 TM 取整棵 ds 子树,全部回来后 splitByCategory 分发到 5 段。
// 多源异步汇总:每个源(TM / GS·项目根直挂)按 confType 取整棵 ds 子树,全部回来后 splitByCategory 分 5 段。
auto acc = std::make_shared<std::vector<geopro::data::DsRow>>();
auto remaining = std::make_shared<int>(tmIds.size());
auto remaining = std::make_shared<int>(sources.size());
auto finish = [acc, generation, myGen, lastSourceRows, refreshAnalysis]() {
if (*generation != myGen) return; // 已被更新的勾选批次取代→丢弃陈旧结果
*lastSourceRows = *acc; // 全部对象树 ds 作分析数据源
refreshAnalysis(); // splitByCategory→5段 + 合并三维体/切片 + dim2D→col2D
};
for (const QString& tm : tmIds) {
for (const geopro::data::DataSource& src : sources) {
// 第3参 confType1=GS/项目根(直挂 ds)2=TM(测线下 ds)——透传给 loadRowsAsync(spec §6)。
geopro::data::NavRequest* req = projectRepo.loadRowsAsync(
nav.currentProjectId().toStdString(), tm.toStdString(), 2, 3, 1, 100000);
nav.currentProjectId().toStdString(), src.id, src.confType, 3, 1, 100000);
QObject::connect(req, &geopro::data::NavRequest::done, drawer,
[acc, remaining, finish](const QVariant& v) {
auto page = qvariant_cast<geopro::data::DsPage>(v);