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;
}
}
}
}