From 744b55c1b6e5fb18536e105fb16f641f4aa0f706 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Tue, 16 Jun 2026 18:18:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(vtk):=20I3dSceneRepository=20=E5=8A=A0?= =?UTF-8?q?=E5=BC=82=E6=AD=A5=20loadSection(=E5=B8=98=E9=9D=A2Grid+?= =?UTF-8?q?=E8=89=B2=E9=98=B6)+LocalSample=E6=A0=B7=E6=9C=AC=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0(=E2=91=A0.1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/data/repo/I3dSceneRepository.hpp | 11 +++++++++++ src/data/repo/LocalSample3dRepository.cpp | 13 +++++++++++++ src/data/repo/LocalSample3dRepository.hpp | 2 ++ tests/controller/test_vtk_scene_controller.cpp | 10 ++++++++++ 4 files changed, 36 insertions(+) diff --git a/src/data/repo/I3dSceneRepository.hpp b/src/data/repo/I3dSceneRepository.hpp index dd26f81..2042ddc 100644 --- a/src/data/repo/I3dSceneRepository.hpp +++ b/src/data/repo/I3dSceneRepository.hpp @@ -6,6 +6,7 @@ #include #include "model/Anomaly.hpp" +#include "model/ColorScale.hpp" #include "model/Field.hpp" #include "repo/RepoTypes.hpp" @@ -28,6 +29,12 @@ struct TerrainPaths { std::string demPath, imagePath; }; +// 切面/剖面着色数据:帘面渲染输入(Grid + 色阶)。spec §6.2 帘面入 3D。 +struct SectionData { + geopro::core::Grid grid{0, 0}; // Grid 无默认构造,给 0×0 占位(加载后填) + geopro::core::ColorScale scale; +}; + // 三维场景仓储抽象(异步,spec §6 评审 HIGH)。 // 取数方法走回调 std::function(LocalSample 本地数据同步算好后直接回调; // 将来 Api3dRepository 在网络完成时回调,上层不变)。 @@ -48,6 +55,10 @@ public: virtual void loadVolume(const std::string& dsId, std::function onOk, OnError onErr) = 0; + // 异步:加载剖面(帘面)着色数据(Grid+色阶)。本地样本同步回调;Api 实现走 ERT 反演端点异步回调。 + virtual void loadSection(const std::string& dsId, + std::function onOk, OnError onErr) = 0; + // 异步:加载地形 DEM/影像路径。 virtual void loadTerrainPaths(std::function onOk, OnError onErr) = 0; diff --git a/src/data/repo/LocalSample3dRepository.cpp b/src/data/repo/LocalSample3dRepository.cpp index 87da76e..183fe03 100644 --- a/src/data/repo/LocalSample3dRepository.cpp +++ b/src/data/repo/LocalSample3dRepository.cpp @@ -146,6 +146,19 @@ void LocalSample3dRepository::loadVolume(const std::string& /*dsId*/, } } +void LocalSample3dRepository::loadSection(const std::string& /*dsId*/, + std::function onOk, OnError onErr) { + // P1 样本:忽略入参 dsId(本地仅一份样本 grid1);真实 Api 实现走 ERT 反演端点按 dsId 取。 + try { + SectionData s; + s.grid = base_.loadGrid("grid1"); // 样本 dd_section 网格 + s.scale = base_.loadColorScale("grid1"); // 对应色阶 + onOk(std::move(s)); // 本地同步回调 + } catch (const std::exception& e) { + onErr(std::string("LocalSample3dRepository::loadSection: ") + e.what()); + } +} + void LocalSample3dRepository::loadTerrainPaths(std::function onOk, OnError onErr) { try { diff --git a/src/data/repo/LocalSample3dRepository.hpp b/src/data/repo/LocalSample3dRepository.hpp index 667ed0d..414a923 100644 --- a/src/data/repo/LocalSample3dRepository.hpp +++ b/src/data/repo/LocalSample3dRepository.hpp @@ -25,6 +25,8 @@ public: DsDimension dimensionOf(const DsRow& ds) const override; void loadVolume(const std::string& dsId, std::function onOk, OnError onErr) override; + void loadSection(const std::string& dsId, std::function onOk, + OnError onErr) override; void loadTerrainPaths(std::function onOk, OnError onErr) override; // 切片 CRUD(spec §6.3 内存态 stub) diff --git a/tests/controller/test_vtk_scene_controller.cpp b/tests/controller/test_vtk_scene_controller.cpp index 9a6daeb..13206dd 100644 --- a/tests/controller/test_vtk_scene_controller.cpp +++ b/tests/controller/test_vtk_scene_controller.cpp @@ -93,6 +93,16 @@ struct FakeSceneRepo : data::I3dSceneRepository { g.vmin = 0.0; g.vmax = 1.0; onOk(std::move(g)); // 同步回调(异步壳) } + void loadSection(const std::string&, std::function onOk, + OnError) override { + data::SectionData s; + s.grid = core::Grid(2, 2); + s.grid.lat = {22.0, 22.001}; + s.grid.lon = {114.0, 114.001}; + s.scale.addStop(0.0, core::Rgba{0, 0, 255, 255}); + s.scale.addStop(1.0, core::Rgba{255, 0, 0, 255}); + onOk(std::move(s)); // 同步回调(异步壳) + } void loadTerrainPaths(std::function onOk, OnError) override { onOk(data::TerrainPaths{"dem.tif", "image.tif"}); }