feat/3d-radar-volume-ingest #9
|
|
@ -52,6 +52,7 @@
|
|||
#include <QJsonObject>
|
||||
#include <QLibraryInfo>
|
||||
#include <QMenu>
|
||||
#include <QMenuBar>
|
||||
#include <QMessageBox>
|
||||
#include <QPoint>
|
||||
#include <QSet>
|
||||
|
|
@ -980,6 +981,31 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
analysisTab->scrollItemToTop(qid); // 新三维体行尽量滚到分析栏顶部
|
||||
});
|
||||
});
|
||||
// 本地导入三维雷达测线目录(后端未就绪的过渡入口):选目录+前缀 → registerRadarDataset(登记dd_radar_3d DS) → 勾选→后台建体渲染。
|
||||
{
|
||||
QMenu* radarMenu = window.menuBar()->addMenu(QStringLiteral("三维雷达"));
|
||||
QAction* importAct = radarMenu->addAction(QStringLiteral("导入测线目录(本地)…"));
|
||||
QObject::connect(importAct, &QAction::triggered, &window,
|
||||
[&window, scene3dRepo, refreshAnalysis, analysisTab]() {
|
||||
const QString dir = QFileDialog::getExistingDirectory(
|
||||
&window, QStringLiteral("选择规范化三维雷达测线目录(含 *.head/*.data)"));
|
||||
if (dir.isEmpty()) return;
|
||||
bool ok = false;
|
||||
const QString prefix = QInputDialog::getText(
|
||||
&window, QStringLiteral("测线前缀"),
|
||||
QStringLiteral("输入测线前缀(如 南同大道_000):"), QLineEdit::Normal, QString(), &ok);
|
||||
if (!ok || prefix.isEmpty()) return;
|
||||
// structParentId 暂空(P0 挂三维体段根;P1 接 TM 归属)。
|
||||
const std::string newId = scene3dRepo->registerRadarDataset(
|
||||
dir.toLocal8Bit().toStdString(), prefix.toLocal8Bit().toStdString(),
|
||||
prefix.toStdString(), /*structParentId=*/std::string(), /*coarse=*/4);
|
||||
{ const QSignalBlocker block(analysisTab); refreshAnalysis(); } // DS 进三维体段(不触发渲染)
|
||||
const QString qid = QString::fromStdString(newId);
|
||||
analysisTab->setItemChecked(qid, true); // 勾选 → addDatasetAsync → loadVolume 后台建体渲染
|
||||
analysisTab->setItemBusy(qid, true); // spinner; 渲染完成由 datasetRendered 撤(main.cpp:987)
|
||||
analysisTab->scrollItemToTop(qid);
|
||||
});
|
||||
}
|
||||
// 任一数据集(剖面/体)异步加载开始 → 列表项复选框转等待 spinner;渲染完成 → 复原复选框。
|
||||
// 覆盖非三维体:勾选剖面首次渲染较慢时也有等待反馈(用户反馈)。
|
||||
QObject::connect(sceneCtrl, &geopro::controller::VtkSceneController::datasetLoading, analysisTab,
|
||||
|
|
@ -1008,7 +1034,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
geopro::app::SlicePropertiesDialog dlg(name, sp, &window);
|
||||
dlg.exec();
|
||||
}
|
||||
} else if (ddCode == QStringLiteral("dd_voxel")) {
|
||||
} else if (ddCode == QStringLiteral("dd_voxel") || ddCode == QStringLiteral("dd_radar_3d")) {
|
||||
geopro::data::Api3dRepository::VolumeInfo info;
|
||||
if (scene3dRepo->volumeInfo(dsId.toStdString(), info)) {
|
||||
geopro::app::VolumePropertiesDialog dlg(name, info, &window);
|
||||
|
|
|
|||
|
|
@ -394,7 +394,7 @@ void CategorySection::showContextMenu(const QPoint& pos) {
|
|||
QMenu menu(this);
|
||||
menu.addAction(QStringLiteral("详情"), this,
|
||||
[this, id, ddCode, name] { emit detailRequested(id, ddCode, name); });
|
||||
if (ddCode == QStringLiteral("dd_voxel")) { // 三维体
|
||||
if (ddCode == QStringLiteral("dd_voxel") || ddCode == QStringLiteral("dd_radar_3d")) { // 三维体
|
||||
QMenu* sl = menu.addMenu(QStringLiteral("生成切片")); // id=被右键的三维体 dsId(切片建到该体上)
|
||||
sl->addAction(QStringLiteral("上下"), this, [this, id] { emit sliceRequested(SliceAxis::UpDown, id); });
|
||||
sl->addAction(QStringLiteral("前后"), this, [this, id] { emit sliceRequested(SliceAxis::FrontBack, id); });
|
||||
|
|
|
|||
Loading…
Reference in New Issue