From 6edfad9a2f090773070bf6aa73dd68652a0e3668 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 24 Jun 2026 21:10:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=20VtkViewToolbar=20=E6=8E=A5?= =?UTF-8?q?=E5=85=A5=E4=B8=AD=E5=A4=AE=E7=94=BB=E5=B8=83(view/zoom/fit=20+?= =?UTF-8?q?=20axesSettings=20=E5=BC=B9=E7=AA=97)(Task12=20=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E6=9D=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/main.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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) {