geopro/src/controller/I3dSceneView.hpp

67 lines
3.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma once
#include <string>
#include "model/ColorScale.hpp"
#include "model/Field.hpp"
#include "repo/I3dSceneRepository.hpp"
namespace geopro::controller {
// 坐标轴显示方式spec §4 C3I3标准 / 三维立体 / 不显示。
enum class AxesMode { Standard, Stereo, None };
// 坐标轴刻度单位spec §4 D5I5无 / 米 / 英尺 / 经纬度。
enum class AxesUnit { None, Meter, Feet, LatLon };
// 快捷视图方向spec §4 C7前/后/左/右/上/下。
enum class ViewDir { Front, Back, Left, Right, Top, Bottom };
// 三维场景视图抽象(编排层与 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 着色);按 dsId 跟踪以支持增量移除。
virtual void addCurtain(const std::string& dsId, const geopro::core::Grid& grid,
const geopro::core::ColorScale& cs) = 0;
// 3D体绘制IDW 体素 + colorScale按 dsId 跟踪。
virtual void addVolume(const std::string& dsId, const geopro::data::VolumeGrid& vol,
const geopro::core::ColorScale& cs) = 0;
// 3DDEM 地形 + 影像纹理。
virtual void addTerrain(const geopro::data::TerrainPaths& paths) = 0;
// 增量移除某数据集的全部图元(取消勾选时调,不影响其余 ds 与底图)。
virtual void removeDataset(const std::string& dsId) = 0;
// ── 异常(#4按 anomaly id 跟踪 3D actor独立于数据集图元 ──────────────
// addAnomaly用 worldPts 建 3D 多边形/折线/点 actor 加入场景id 已在 Anomaly 内)。
// 坐标已是世界系(圈定时从切片平面取,含 VE故不再额外施加 VE 缩放。
virtual void addAnomaly(const geopro::core::Anomaly& a) = 0;
virtual void removeAnomaly(const std::string& anomalyId) = 0;
virtual void clearAnomalies() = 0;
virtual void setAnomalyVisible(const std::string& anomalyId, bool visible) = 0;
// 坐标轴设置P2显示方式 + 刻度单位 + 字号。视图据当前场景包围盒重建坐标轴 prop。
// None 模式 = 移除坐标轴rebuild 时由控制器在 clear 后重新下发当前坐标轴设置。
virtual void setAxes(AxesMode mode, AxesUnit unit, int fontSize) = 0;
// 快捷视图P2应用 6 向相机预设并提交渲染。
virtual void applyCameraView(ViewDir dir) = 0;
// 缩放P2factor>1 放大、<1 缩小,提交渲染。
virtual void zoom(double factor) = 0;
// 适配全览P2ResetCamera 并提交渲染。
virtual void fitView() = 0;
// 应用相机预设2D 俯视 / 3D 自由)并提交渲染(全量重建用,会 ResetCamera
virtual void render(bool is2D) = 0;
// 增量提交渲染:重建坐标轴并刷新,但不动相机(勾选/取消单个 ds 时视角不跳)。
virtual void renderIncremental() = 0;
};
} // namespace geopro::controller