#pragma once #include "model/ColorScale.hpp" #include "model/Field.hpp" #include "repo/I3dSceneRepository.hpp" namespace geopro::controller { // 三维场景视图抽象(编排层与 VTK 渲染解耦的缝): // VtkSceneController 只发出"清场 / 加某类图元 / 提交渲染"指令,不认 vtkActor/vtkVolume; // 真实实现(VtkSceneView)调 render actor + Scene;测试用 fake 记录调用断言编排。 // verticalExaggeration 由视图统一作用于 3D 图元(actor SetScale(1,1,VE) / image z 烤入)。 class I3dSceneView { public: virtual ~I3dSceneView() = default; virtual void clear() = 0; virtual void setVerticalExaggeration(double ve) = 0; // 2D:俯视测线红线(z=0)。 virtual void addSurveyLine(const geopro::core::Grid& grid) = 0; // 3D:竖直帘面(grid + colorScale 着色)。 virtual void addCurtain(const geopro::core::Grid& grid, const geopro::core::ColorScale& cs) = 0; // 3D:体绘制(IDW 体素 + colorScale)。 virtual void addVolume(const geopro::data::VolumeGrid& vol, const geopro::core::ColorScale& cs) = 0; // 3D:DEM 地形 + 影像纹理。 virtual void addTerrain(const geopro::data::TerrainPaths& paths) = 0; // 应用相机预设(2D 俯视 / 3D 自由)并提交渲染。 virtual void render(bool is2D) = 0; }; } // namespace geopro::controller