diff --git a/src/app/main.cpp b/src/app/main.cpp index 4dac989..f569ac3 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -138,6 +138,8 @@ #include "panels/columns/ColumnDrawer.hpp" #include "panels/columns/CategoryAnalysisTab.hpp" #include "panels/columns/CategorySection.hpp" +#include "VtkViewToolbar.hpp" +#include "AxesSettingsDialog.hpp" #include "panels/columns/Column3DDataset.hpp" #include "panels/columns/Column2DDataset.hpp" #include "panels/columns/Column3DAnalysis.hpp" @@ -362,10 +364,12 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re // 左侧内嵌三栏抽屉(自带折叠按钮)+ 右侧 GL 画布,水平并列(非 GL 覆盖层,避免 z-order/圆角伪影)。 auto* drawer = new geopro::app::ColumnDrawer(centerWidget); + auto* viewToolbar = new geopro::app::VtkViewToolbar(centerWidget); // VTK 画布全局视图控制竖排工具条 auto* viewRow = new QHBoxLayout(); viewRow->setContentsMargins(0, 0, 0, 0); viewRow->setSpacing(0); viewRow->addWidget(drawer); // 左侧抽屉(自带折叠按钮) + viewRow->addWidget(viewToolbar); // 画布工具条(竖排:设置/前后上下左右/缩放复位) viewRow->addWidget(vtkWidget, 1); // 右侧 GL 画布 centerLayout->addWidget(viewHeader); centerLayout->addLayout(viewRow, 1); @@ -658,6 +662,25 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re &geopro::controller::VtkSceneController::zoomOut); QObject::connect(c3, &geopro::app::Column3DDataset::fitRequested, sceneCtrl, &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, [checkedProfiles, pushChecked](const QStringList& ids) {