fix(radar): 三维分析栏勾选(体/切片)隐藏不透明引导层,露出渲染

根因:中央引导层 emptyState(不透明 QFrame, background=canvas/bg)只在
objectTree.checkedSourcesChanged(对象树测线勾选)时隐藏(main.cpp:1612)。
雷达体由三维分析栏(CategoryAnalysisTab)勾选触发渲染——日志确认 addVolume
radar-1 已渲染——但该路径不碰 emptyState(因 emptyState 在 pushChecked 之后
才声明,分析渲染路径拿不到它),引导层不隐藏 → 盖住已渲染的体,用户只见
"勾选左侧数据集开始渲染"占位文本。
修复:用可后置赋值的回调把引导层隐藏接进 pushChecked(剖面∪三维分析 并集),
场景有勾选内容即隐藏;对象树隐藏条件并入 checkedAnalysis(取消勾选对象树不再
盖住仍渲染的雷达体)。
This commit is contained in:
gaozheng 2026-06-29 15:45:47 +08:00
parent 63ab099f76
commit cda84adcee
1 changed files with 11 additions and 3 deletions

View File

@ -607,10 +607,15 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
// 后下发控制器setCheckedDatasets 全量 diff须并集否则一栏勾选会清掉另一栏的图元
auto checkedProfiles = std::make_shared<QStringList>();
auto checkedAnalysis = std::make_shared<QStringList>();
auto pushChecked = [sceneCtrl, checkedProfiles, checkedAnalysis]() {
// 引导层(emptyState)隐藏器emptyState 在后文(~1390)才创建,故用可后置赋值的回调转发,
// 让「三维分析栏勾选(体/切片)」这条渲染路径也能隐藏不透明引导层——否则它盖住已渲染的体
// (雷达体由分析栏勾选触发渲染,但旧逻辑只在对象树勾选时隐藏引导层 → 体被盖住看不到)。
auto setSceneEmptyVisible = std::make_shared<std::function<void(bool)>>();
auto pushChecked = [sceneCtrl, checkedProfiles, checkedAnalysis, setSceneEmptyVisible]() {
QStringList all = *checkedProfiles;
all += *checkedAnalysis;
sceneCtrl->setCheckedDatasets(all);
if (*setSceneEmptyVisible) (*setSceneEmptyVisible)(all.isEmpty()); // 场景有内容→隐藏引导层
};
// ── VTK 视图切片右键菜单(设计 §2.3)──────────────────────────────────────
@ -1433,6 +1438,8 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
// 引导层定位后,把工具条与提示浮层 raise 到其上 → 工具条永在最上层(修:缩小渲染区时引导层挡工具条)。
emptyCentering->setRaiseAfter({viewToolbar, anomalyHint, elevHint});
emptyCentering->reposition();
// 引导层隐藏器就位(见 pushChecked 处声明):场景(剖面∪三维分析)有勾选 → 隐藏不透明引导层、露出渲染。
*setSceneEmptyVisible = [emptyState](bool empty) { emptyState->setVisible(empty); };
auto* vtkDock = new ads::CDockWidget(QStringLiteral("VTK视图"));
vtkDock->setWidget(centerWidget);
@ -1606,10 +1613,11 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
auto generation = std::make_shared<unsigned long long>(0);
QObject::connect(
objectTree, &geopro::app::ObjectTreePanel::checkedSourcesChanged, &window,
[&projectRepo, &nav, drawer, emptyState, generation, lastSourceRows,
[&projectRepo, &nav, drawer, emptyState, generation, lastSourceRows, checkedAnalysis,
refreshAnalysis](const QList<geopro::data::DataSource>& sources) {
const unsigned long long myGen = ++(*generation);
emptyState->setVisible(sources.isEmpty()); // 有勾选→隐藏引导层,露出中央渲染
// 引导层隐藏 = 对象树无源 且 三维分析栏也无勾选(否则取消勾选对象树会盖住仍在渲染的雷达体)。
emptyState->setVisible(sources.isEmpty() && checkedAnalysis->isEmpty());
if (sources.isEmpty()) {
*lastSourceRows = {};
refreshAnalysis(); // 清空 5 段(客户端三维体仍驻留) + col2D