#pragma once #include namespace geopro::render { // 俯视二维:正交投影,相机在 +Z 正对 XY 平面。 void applyTop2D(vtkRenderer* r); // 自由三维:透视投影,斜视方位看到剖面立体。 void applyFree3D(vtkRenderer* r); // 二维分析近俯视:透视投影,自正俯视下压一点(约12°→约78°俯角)。留一点倾斜使高程差可见 // (绝对正俯视下高程不可辨),仅平移+缩放(旋转由 interactor style 锁定)。 void applyNearTop2D(vtkRenderer* r); // 快捷视图方向(世界系 x=East,y=North,z=-depth)。 // Top 俯视 (相机在 +Z 向下看) // Bottom 仰视 (相机在 -Z 向上看) // Front 从 -Y 看向 +Y (北望),Back 反向 // Left 从 -X 看向 +X (东望),Right 反向 enum class ViewDir { Front, Back, Left, Right, Top, Bottom }; // 应用 6 向正交快捷视图:设 position/focalPoint/viewUp 后 ResetCamera。 void applyView(vtkRenderer* r, ViewDir dir); // 绕支点转到某轴的相机位姿(纯数学,可单测):focal=pivot,pos=pivot+dir_offset*distance, // up 按 dir 预设。方向偏移/up 约定与 applyView 完全一致(Top=+Z 看下、+Y 朝上;Front 从 -Y // 看 +Y、+Z 朝上;…)。用于 orbitToAxis:保留当前缩放距离、只改朝向绕 pivot 转。 struct CameraPose { double pos[3]; double focal[3]; double up[3]; }; CameraPose orbitPose(ViewDir dir, const double pivot[3], double distance); // 相机缩放:factor>1 拉近(放大),factor<1 推远(缩小)。透视下改距离、正交下改 parallelScale。 void zoomBy(vtkRenderer* r, double factor); // 适配场景:ResetCamera(全览)。 void fitView(vtkRenderer* r); } // namespace geopro::render