namespace Yw.WpfUI.Hydro { /// /// 抽象相机辅助类 /// internal class LogicalCameraHelper { /// /// /// public LogicalCameraHelper(HelixViewport3D viewport) { _viewport = viewport; } /// /// 保存默认相机事件 /// public event Action SaveDefaultCameraEvent; private readonly HelixViewport3D _viewport = null;//三维组件 private LogicalCamera3D _defaultCamera = null;//默认相机设置 /// /// 设置默认相机 /// public void SetDefault(CameraL3d camera) { if (camera == null) { return; } _defaultCamera = camera.ToLogicalCamera3D(); } /// /// 保存默认相机 /// public void SaveDefault() { var cameraSetting = new CameraSetting(_viewport.Camera); var logicalCamera = new LogicalCamera3D(cameraSetting); _defaultCamera = logicalCamera; this.SaveDefaultCameraEvent?.Invoke(logicalCamera); } /// /// 获取默认相机 /// /// public LogicalCamera3D GetDefault() { return _defaultCamera; } /// /// 应用默认相机 /// public void ApplyDefault() { if (_defaultCamera == null) { return; } var camera = _viewport.Camera; camera.NearPlaneDistance = _defaultCamera.NearPlaneDistance; camera.FarPlaneDistance = _defaultCamera.FarPlaneDistance; camera.Position = _defaultCamera.Position; camera.LookDirection = _defaultCamera.LookDirection; camera.UpDirection = _defaultCamera.UpDirection; if (camera is PerspectiveCamera perspectiveCamera) { perspectiveCamera.FieldOfView = _defaultCamera.FieldOfView; } else if (camera is OrthographicCamera orghographicCamera) { orghographicCamera.Width = _defaultCamera.Width; } } } }