fix(vtk): 治首帧部分瓦片需手动微动才出-相机程序化变化(取景/预设/缩放)后经onCameraChanged通知底图按新视锥重算覆盖

This commit is contained in:
gaozheng 2026-06-17 15:30:59 +08:00
parent fb43237830
commit e15930d8fb
3 changed files with 9 additions and 0 deletions

View File

@ -188,11 +188,13 @@ void VtkSceneView::applyCameraView(geopro::controller::ViewDir dir) {
scene_.renderer()->ResetCamera(bounds); // 重新取景到数据(否则被~公里级底图推到超远) scene_.renderer()->ResetCamera(bounds); // 重新取景到数据(否则被~公里级底图推到超远)
scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图 scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图
if (renderWindow_) renderWindow_->Render(); if (renderWindow_) renderWindow_->Render();
if (onCameraChanged) onCameraChanged(); // 相机变了 → 底图按新视锥重算覆盖
} }
void VtkSceneView::zoom(double factor) { void VtkSceneView::zoom(double factor) {
geopro::render::zoomBy(scene_.renderer(), factor); geopro::render::zoomBy(scene_.renderer(), factor);
if (renderWindow_) renderWindow_->Render(); if (renderWindow_) renderWindow_->Render();
if (onCameraChanged) onCameraChanged();
} }
void VtkSceneView::fitView() { void VtkSceneView::fitView() {
@ -203,6 +205,7 @@ void VtkSceneView::fitView() {
geopro::render::fitView(scene_.renderer()); geopro::render::fitView(scene_.renderer());
scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图 → 不被"蒙版"切掉 scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图 → 不被"蒙版"切掉
if (renderWindow_) renderWindow_->Render(); if (renderWindow_) renderWindow_->Render();
if (onCameraChanged) onCameraChanged(); // 取景后 → 底图按新视锥重算覆盖(治首帧部分瓦片不出)
} }
void VtkSceneView::rebuildAxes() { void VtkSceneView::rebuildAxes() {
@ -246,6 +249,7 @@ void VtkSceneView::render(bool is2D) {
scene_.renderer()->ResetCamera(); scene_.renderer()->ResetCamera();
scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图 → 不被"蒙版"切掉 scene_.renderer()->ResetCameraClippingRange(); // 裁剪面含底图 → 不被"蒙版"切掉
if (renderWindow_) renderWindow_->Render(); if (renderWindow_) renderWindow_->Render();
if (onCameraChanged) onCameraChanged(); // 取景后 → 底图按新视锥重算覆盖
} }
void VtkSceneView::renderIncremental() { void VtkSceneView::renderIncremental() {

View File

@ -62,6 +62,9 @@ public:
// frame 原点重锚(首个带经纬剖面到达)后回调,供底图等随之刷新到数据所在位置。 // frame 原点重锚(首个带经纬剖面到达)后回调,供底图等随之刷新到数据所在位置。
std::function<void()> onFrameReanchored; std::function<void()> onFrameReanchored;
// 相机程序化变化(取景/预设/缩放)后回调,供底图按新视锥重算覆盖(否则首帧部分瓦片要手动微动才出)。
std::function<void()> onCameraChanged;
private: private:
// 按当前坐标轴设置 + 场景包围盒重建坐标轴 proprender 末尾调)。 // 按当前坐标轴设置 + 场景包围盒重建坐标轴 proprender 末尾调)。
void rebuildAxes(); void rebuildAxes();

View File

@ -412,6 +412,8 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
sceneView->onFrameReanchored = [basemap, basemapKind]() { sceneView->onFrameReanchored = [basemap, basemapKind]() {
if (*basemapKind != geopro::app::TileBasemap::Hidden) basemap->show(*basemapKind); if (*basemapKind != geopro::app::TileBasemap::Hidden) basemap->show(*basemapKind);
}; };
// 相机程序化变化(取景/预设/缩放)后,底图按新视锥重算覆盖(治首帧部分瓦片需手动微动才出)。
sceneView->onCameraChanged = [basemap]() { basemap->refresh(); };
// ── 中央“空状态”引导浮层:未接入真实 sections 时,引导首次使用者从左侧入手。── // ── 中央“空状态”引导浮层:未接入真实 sections 时,引导首次使用者从左侧入手。──
// 透明背景 + 鼠标穿透(不挡 QVTK 交互CenterOverlay 随视口尺寸保持居中; // 透明背景 + 鼠标穿透(不挡 QVTK 交互CenterOverlay 随视口尺寸保持居中;