feat(app): VtkViewToolbar 接入中央画布(view/zoom/fit + axesSettings 弹窗)(Task12 工具条)

This commit is contained in:
gaozheng 2026-06-24 21:10:09 +08:00
parent 2f07e605c8
commit 6edfad9a2f
1 changed files with 23 additions and 0 deletions

View File

@ -138,6 +138,8 @@
#include "panels/columns/ColumnDrawer.hpp" #include "panels/columns/ColumnDrawer.hpp"
#include "panels/columns/CategoryAnalysisTab.hpp" #include "panels/columns/CategoryAnalysisTab.hpp"
#include "panels/columns/CategorySection.hpp" #include "panels/columns/CategorySection.hpp"
#include "VtkViewToolbar.hpp"
#include "AxesSettingsDialog.hpp"
#include "panels/columns/Column3DDataset.hpp" #include "panels/columns/Column3DDataset.hpp"
#include "panels/columns/Column2DDataset.hpp" #include "panels/columns/Column2DDataset.hpp"
#include "panels/columns/Column3DAnalysis.hpp" #include "panels/columns/Column3DAnalysis.hpp"
@ -362,10 +364,12 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
// 左侧内嵌三栏抽屉(自带折叠按钮)+ 右侧 GL 画布,水平并列(非 GL 覆盖层,避免 z-order/圆角伪影)。 // 左侧内嵌三栏抽屉(自带折叠按钮)+ 右侧 GL 画布,水平并列(非 GL 覆盖层,避免 z-order/圆角伪影)。
auto* drawer = new geopro::app::ColumnDrawer(centerWidget); auto* drawer = new geopro::app::ColumnDrawer(centerWidget);
auto* viewToolbar = new geopro::app::VtkViewToolbar(centerWidget); // VTK 画布全局视图控制竖排工具条
auto* viewRow = new QHBoxLayout(); auto* viewRow = new QHBoxLayout();
viewRow->setContentsMargins(0, 0, 0, 0); viewRow->setContentsMargins(0, 0, 0, 0);
viewRow->setSpacing(0); viewRow->setSpacing(0);
viewRow->addWidget(drawer); // 左侧抽屉(自带折叠按钮) viewRow->addWidget(drawer); // 左侧抽屉(自带折叠按钮)
viewRow->addWidget(viewToolbar); // 画布工具条(竖排:设置/前后上下左右/缩放复位)
viewRow->addWidget(vtkWidget, 1); // 右侧 GL 画布 viewRow->addWidget(vtkWidget, 1); // 右侧 GL 画布
centerLayout->addWidget(viewHeader); centerLayout->addWidget(viewHeader);
centerLayout->addLayout(viewRow, 1); centerLayout->addLayout(viewRow, 1);
@ -658,6 +662,25 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
&geopro::controller::VtkSceneController::zoomOut); &geopro::controller::VtkSceneController::zoomOut);
QObject::connect(c3, &geopro::app::Column3DDataset::fitRequested, sceneCtrl, QObject::connect(c3, &geopro::app::Column3DDataset::fitRequested, sceneCtrl,
&geopro::controller::VtkSceneController::fit); &geopro::controller::VtkSceneController::fit);
// ── VTK 画布工具条Task 12 §9全局视图控制 → sceneCtrl ──────────────────
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::viewRequested, sceneCtrl,
&geopro::controller::VtkSceneController::applyView);
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::zoomInRequested, sceneCtrl,
&geopro::controller::VtkSceneController::zoomIn);
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::zoomOutRequested, sceneCtrl,
&geopro::controller::VtkSceneController::zoomOut);
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::fitRequested, sceneCtrl,
&geopro::controller::VtkSceneController::fit);
QObject::connect(viewToolbar, &geopro::app::VtkViewToolbar::axesSettingsRequested, &window,
[&window, sceneCtrl]() {
geopro::app::AxesSettingsDialog dlg({}, {}, {}, &window);
if (dlg.exec() != QDialog::Accepted) return;
const bool anyShow = dlg.x().show || dlg.y().show || dlg.z().show;
sceneCtrl->setAxesMode(anyShow ? geopro::controller::AxesMode::Standard
: geopro::controller::AxesMode::None);
// per-axis min/max 范围待 VtkSceneController 加坐标轴范围 API 后接入。
});
// 三维数据集栏勾选(反演剖面)→ 并入渲染勾选集(剖面走帘面路径)。 // 三维数据集栏勾选(反演剖面)→ 并入渲染勾选集(剖面走帘面路径)。
QObject::connect(c3, &geopro::app::Column3DDataset::checkedDatasetsChanged, sceneCtrl, QObject::connect(c3, &geopro::app::Column3DDataset::checkedDatasetsChanged, sceneCtrl,
[checkedProfiles, pushChecked](const QStringList& ids) { [checkedProfiles, pushChecked](const QStringList& ids) {