From 717bdbb70cf6e391e7219ccc1d807bbe2e950bd6 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Mon, 29 Jun 2026 13:19:12 +0800 Subject: [PATCH] =?UTF-8?q?feat(radar):=20Impulse=20=E6=B5=8B=E7=BA=BF?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=AF=BC=E5=85=A5=E5=85=A5=E5=8F=A3(?= =?UTF-8?q?=E5=8F=8C=E6=95=B0=E6=8D=AE=E9=9B=86=E4=BA=92=E8=AF=81=E4=B8=8B?= =?UTF-8?q?=E6=B8=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit radarMenu 追加「导入Impulse测线目录(.iprb)…」动作,复用 createGprVolume (eager 同步建体,预填 cachedGrid)。内层 lambda 按引用捕获 window 修正 QMainWindow 拷贝构造删除/showToast 非 const QWidget* 编译错误。 --- src/app/main.cpp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/app/main.cpp b/src/app/main.cpp index d78e15c..ab05640 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1005,6 +1005,43 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re analysisTab->setItemBusy(qid, true); // spinner; 渲染完成由 datasetRendered 撤(main.cpp:987) analysisTab->scrollItemToTop(qid); }); + // 明星路 Impulse(.iprb) 本地导入:复用现成 createGprVolume(eager 同步建体,预填 cachedGrid)。 + // 双数据集互证:证下游渲染/切片/异常对 14ch(Impulse)/16ch(Mala) 几何无关。 + QAction* importImpulseAct = + radarMenu->addAction(QStringLiteral("导入Impulse测线目录(.iprb)…")); + QObject::connect(importImpulseAct, &QAction::triggered, &window, + [&window, scene3dRepo, refreshAnalysis, analysisTab, vtkLoading]() { + const QString dir = QFileDialog::getExistingDirectory( + &window, QStringLiteral("选择 Impulse 测线目录(含 *.iprb/*.ord)")); + if (dir.isEmpty()) return; + bool ok = false; + const QString prefix = QInputDialog::getText( + &window, QStringLiteral("测线前缀"), + QStringLiteral("输入测线前缀(如 明星路_010):"), QLineEdit::Normal, QString(), &ok); + if (!ok || prefix.isEmpty()) return; + vtkLoading->showOver(QStringLiteral("正在建Impulse体…")); + // 内层捕获 window 引用(非 [=] 值拷贝):QMainWindow 拷贝构造已删除,且 showToast 需非 const QWidget*。 + QTimer::singleShot(0, &window, [=, &window]() { + std::string newId; + try { + newId = scene3dRepo->createGprVolume(dir.toLocal8Bit().toStdString(), + prefix.toLocal8Bit().toStdString(), + prefix.toStdString(), /*coarse=*/8); + } catch (const std::exception& e) { + vtkLoading->hide(); + geopro::app::showToast(&window, + QStringLiteral("建体失败:%1").arg(QString::fromLocal8Bit(e.what()))); + return; + } + { const QSignalBlocker block(analysisTab); refreshAnalysis(); } + vtkLoading->hide(); + const QString qid = QString::fromStdString(newId); + // createGprVolume 预填 cachedGrid → setItemChecked 内 loadVolume 同步渲染、datasetRendered 自动撤 busy; + // 故此处【不要】再 setItemBusy(true)(否则 spinner 永久转圈 —— 评审 MEDIUM)。 + analysisTab->setItemChecked(qid, true); + analysisTab->scrollItemToTop(qid); + }); + }); } // 任一数据集(剖面/体)异步加载开始 → 列表项复选框转等待 spinner;渲染完成 → 复原复选框。 // 覆盖非三维体:勾选剖面首次渲染较慢时也有等待反馈(用户反馈)。