feat/vtk-3d-view #7

Merged
gaozheng merged 301 commits from feat/vtk-3d-view into main 2026-06-27 18:43:52 +08:00
1 changed files with 8 additions and 11 deletions
Showing only changes of commit e34abd271f - Show all commits

View File

@ -82,7 +82,6 @@
#include "model/ColorScale.hpp" #include "model/ColorScale.hpp"
#include "model/Field.hpp" #include "model/Field.hpp"
#include "repo/LocalSampleRepository.hpp" #include "repo/LocalSampleRepository.hpp"
#include "repo/LocalSample3dRepository.hpp"
#include "ApiClient.hpp" #include "ApiClient.hpp"
#include "AuthService.hpp" #include "AuthService.hpp"
@ -110,6 +109,7 @@
#include "panels/chart/GridStrategy.hpp" #include "panels/chart/GridStrategy.hpp"
#include "api/ApiProjectRepository.hpp" #include "api/ApiProjectRepository.hpp"
#include "api/ApiDatasetRepository.hpp" #include "api/ApiDatasetRepository.hpp"
#include "api/Api3dRepository.hpp"
#include "panels/ObjectTreePanel.hpp" #include "panels/ObjectTreePanel.hpp"
#include "login/LoginWindow.hpp" #include "login/LoginWindow.hpp"
#include "panels/DatasetListPanel.hpp" #include "panels/DatasetListPanel.hpp"
@ -224,6 +224,7 @@ constexpr const char* kWgs84 = "EPSG:4326";
// repo 生命周期须覆盖到事件循环结束(由调用方保证)。 // repo 生命周期须覆盖到事件循环结束(由调用方保证)。
void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& repo, void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& repo,
geopro::data::IAsyncProjectRepository& projectRepo, geopro::data::IAsyncProjectRepository& projectRepo,
geopro::data::IAsyncDatasetRepository& datasetRepo,
geopro::controller::WorkbenchNavController& nav, geopro::controller::WorkbenchNavController& nav,
geopro::controller::DatasetDetailController& detailCtrl) geopro::controller::DatasetDetailController& detailCtrl)
{ {
@ -247,9 +248,9 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
vtkGenericOpenGLRenderWindow* renderWindowPtr = renderWindow.Get(); vtkGenericOpenGLRenderWindow* renderWindowPtr = renderWindow.Get();
// 中央渲染编排VtkSceneController + VtkSceneView取代旧 rebuildCentral lambda 与裸 show* 标志)。 // 中央渲染编排VtkSceneController + VtkSceneView取代旧 rebuildCentral lambda 与裸 show* 标志)。
// 3D 场景仓储用 LocalSample3dRepository本期样本驱动接口异步将来换 Api 实现不动上层)。 // 3D 场景仓储用 Api3dRepository真实后端loadSection 走真实 ERT 反演端点,委托 datasetRepo)。
// 视图VtkSceneView非 QObject、控制器/3D 仓储亦然:随 scene 一并在 vtkWidget 销毁时清理。 // 视图VtkSceneView非 QObject、控制器/3D 仓储亦然:随 scene 一并在 vtkWidget 销毁时清理。
auto* scene3dRepo = new geopro::data::LocalSample3dRepository(repo, kProjectCrs, lat0, lon0); auto* scene3dRepo = new geopro::data::Api3dRepository(datasetRepo);
auto* sceneView = new geopro::app::VtkSceneView(*scene, renderWindowPtr, auto* sceneView = new geopro::app::VtkSceneView(*scene, renderWindowPtr,
frame, refElev); frame, refElev);
auto* sceneCtrl = new geopro::controller::VtkSceneController(repo, *scene3dRepo, *sceneView, auto* sceneCtrl = new geopro::controller::VtkSceneController(repo, *scene3dRepo, *sceneView,
@ -373,14 +374,10 @@ 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);
// 渲染勾选的 3D 数据集。本阶段渲染走 LocalSampleRepository仅含样本 dd_section "grid1" // 渲染勾选的 3D 数据集:真实 ds id 直达控制器异步帘面路径
// 真实后端 ds 的渲染数据尚未就绪Api3dRepository 后置)→ 勾任一 3D ds 暂以样本帘面呈现。 // setCheckedDatasets → Api3dRepository.loadSection(realId) → 真实 ERT 反演端点 → 真实帘面)。
// Api3dRepository 就绪后删除此映射、改为直接 setCheckedDatasets(ids) 渲染真实数据。
QObject::connect(c3, &geopro::app::Column3DDataset::checkedDatasetsChanged, sceneCtrl, QObject::connect(c3, &geopro::app::Column3DDataset::checkedDatasetsChanged, sceneCtrl,
[sceneCtrl](const QStringList& ids) { &geopro::controller::VtkSceneController::setCheckedDatasets);
sceneCtrl->setCheckedDatasets(
ids.isEmpty() ? QStringList{} : QStringList{QStringLiteral("grid1")});
});
// O点位置/字体本期 stubTODO P4弹框 // O点位置/字体本期 stubTODO P4弹框
QObject::connect(c3, &geopro::app::Column3DDataset::oPointClicked, vtkWidget, QObject::connect(c3, &geopro::app::Column3DDataset::oPointClicked, vtkWidget,
[]() { /* TODO P4: O点位置弹框 */ }); []() { /* TODO P4: O点位置弹框 */ });
@ -1349,7 +1346,7 @@ int main(int argc, char* argv[])
window->setWindowTitle(kTitle); window->setWindowTitle(kTitle);
window->resize(1280, 800); window->resize(1280, 800);
window->setMinimumSize(1024, 680); window->setMinimumSize(1024, 680);
buildWorkbench(*window, repo, projectRepo, nav, detailCtrl); buildWorkbench(*window, repo, projectRepo, datasetRepo, nav, detailCtrl);
// 主题桥ThemeManager 明/暗切换 → 重应用全局 QSS+调色板(标准控件 + ADS内联 chrome 经各自连接)。 // 主题桥ThemeManager 明/暗切换 → 重应用全局 QSS+调色板(标准控件 + ADS内联 chrome 经各自连接)。
QObject::connect(&geopro::app::ThemeManager::instance(), &geopro::app::ThemeManager::changed, QObject::connect(&geopro::app::ThemeManager::instance(), &geopro::app::ThemeManager::changed,