From e62e2cdc8d4e53914b51f3c74ad00356ca589cbe Mon Sep 17 00:00:00 2001 From: gaozheng Date: Tue, 23 Jun 2026 19:17:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(vtk):=20=E5=88=87=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=A4=8D=E4=BD=8D=E9=87=8D=E9=94=9A=E6=A0=87=E5=BF=97,?= =?UTF-8?q?=E4=BF=AE=E5=BA=95=E5=9B=BE=E6=B8=85=E7=A9=BA=E5=90=8E=E5=86=8D?= =?UTF-8?q?=E9=80=89=E4=B8=8D=E9=87=8D=E6=98=BE=E7=9A=84=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上一改 basemap->hide() 引入回归:切项目后再次勾选数据集,底图不再渲染。 根因:勾选是增量渲染、不走 VtkSceneView::clear(),frameAnchoredToData_ 残留为 旧项目的 true → anchorFrameIfNeeded 直接 return 不重锚 → onFrameReanchored 不触发 → 被 hide() 的底图永不再 show(hide 前底图一直挂着才显得"正常")。 修:VtkSceneView 加 resetFrameAnchor(),clearCentral 中 hide() 前复位 → 新项目首个数据重锚→onFrameReanchored→底图按新项目位置重显。 build all 绿,341/341。 --- src/app/VtkSceneView.hpp | 4 ++++ src/app/main.cpp | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/app/VtkSceneView.hpp b/src/app/VtkSceneView.hpp index aecbb43..1560f8f 100644 --- a/src/app/VtkSceneView.hpp +++ b/src/app/VtkSceneView.hpp @@ -72,6 +72,10 @@ public: // frame 原点重锚(首个带经纬剖面到达)后回调,供底图等随之刷新到数据所在位置。 std::function onFrameReanchored; + // 复位"已按数据重锚"标志:切换项目清场后调,使新项目首个数据重新触发重锚(→ onFrameReanchored + // → 底图按新项目位置重显)。否则增量勾选不走 clear(),旧标志残留 → 不重锚 → 底图不再显示。 + void resetFrameAnchor() { frameAnchoredToData_ = false; } + // 相机程序化变化(取景/预设/缩放)后回调,供底图按新视锥重算覆盖(否则首帧部分瓦片要手动微动才出)。 std::function onCameraChanged; diff --git a/src/app/main.cpp b/src/app/main.cpp index a59eb5c..c94cd8f 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -1210,7 +1210,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re // 仅真正换项目用(delete-refresh 等 switchProject(currentProjectId) 不走此处,避免误清)。 auto clearCentral = [drawer, sceneCtrl, emptyState, checkedProfiles, checkedAnalysis, pushChecked, lastAnalysisRows, refreshAnalysis, checkedSliceIds, - syncSlices, basemap]() { + syncSlices, basemap, sceneView]() { // 三栏清空(col2D/col3D setDatasets({}) 会顺带发空勾选 → setChecked2DDatasets({})/帘面清空)。 drawer->col3D()->setDatasets({}); drawer->col2D()->setDatasets({}); @@ -1223,6 +1223,9 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re pushChecked(); // setCheckedDatasets({}) → 帘面/体素清空 syncSlices(); // 切片随空勾选调和 sceneCtrl->setChecked2DDatasets({}); // 2D 足迹显式撤场(与 col2D 空勾选双保险) + // 复位重锚标志:增量勾选不走 clear(),不复位则旧标志残留 → 新项目数据不重锚 → + // onFrameReanchored 不触发 → 下面 hide() 的底图永不再显。复位后新项目首个数据重锚→重显。 + sceneView->resetFrameAnchor(); basemap->hide(); // 底图瓦片清空(锚在旧项目位置;新项目数据到来 re-anchor 时按新位置重显) // 空状态浮层恢复(对象树勾选会随 structureLoaded 重建而清,无需手动)。 emptyState->setVisible(true);