lixiaojun
8 天以前 1c4e474ff6a0ae6cf1b1f7a9de71b3246aba29b6
Yw.WpfUI.Hydro.L3d.Core/03-draw/00-core/04-camera/DrawCameraHelper.cs
@@ -8,18 +8,67 @@
        /// <summary>
        /// 
        /// </summary>
        public DrawCameraHelper(HelixViewport3D viewport)
        public DrawCameraHelper
            (
                HelixViewport3D viewport,
                DrawInitialHelper initialHelper
            )
        {
            _viewport = viewport;
            _initialHelper = initialHelper;
            Attach();
        }
        private readonly HelixViewport3D _viewport = null;//三维组件
        private readonly DrawInitialHelper _initialHelper = null;//初始化辅助类
        /// <summary>
        /// 是否启用
        /// </summary>
        public bool Enabled
        {
            get { return _enabled; }
            set { _enabled = value; }
        }
        private bool _enabled = true;
        /// <summary>
        /// 是否初始化
        /// </summary>
        public bool Initialized
        {
            get { return _initialized; }
            private set { _initialized = value; }
        }
        private bool _initialized = false;
        //初始化
        private void Initialize()
        {
            if (!_initialHelper.Initialized)
            {
                return;
            }
            _initialized = true;
        }
        //处理初始化完成
        private void OnInitialCompleted()
        {
            Initialize();
        }
        #region 视图操作
        /// <summary>
        /// 获取视图
        /// </summary>
        public CameraSettingL3d GetView()
        {
            if (!Initialized)
            {
                return default;
            }
            var cameraSetting = new CameraSetting(_viewport.Camera);
            return cameraSetting.ToCameraSettingL3d();
        }
@@ -29,6 +78,10 @@
        /// </summary>
        public void SetView(CameraSettingL3d cameraSetting)
        {
            if (!Initialized)
            {
                return;
            }
            if (cameraSetting == null)
            {
                return;
@@ -49,6 +102,8 @@
            }
        }
        #endregion
        #region 六视图
        /// <summary>
@@ -56,6 +111,10 @@
        /// </summary>
        public void SetTopView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(0, 0, -1); // 向下看
            var upDirection = new Vector3D(0, 1, 0);// Y轴朝上
            _viewport.FitView(lookDirection, upDirection);
@@ -66,6 +125,10 @@
        /// </summary>
        public void SetBottomView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(0, 0, 1);   // 向上看
            var upDirection = new Vector3D(0, 1, 0);// Y轴朝上
            _viewport.FitView(lookDirection, upDirection);
@@ -76,6 +139,10 @@
        /// </summary>
        public void SetLeftView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(1, 0, 0);   // 向右看
            var upDirection = new Vector3D(0, 0, 1);// Z轴朝上
            _viewport.FitView(lookDirection, upDirection);
@@ -86,6 +153,10 @@
        /// </summary>
        public void SetRightView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(-1, 0, 0);   // 向左看
            var upDirection = new Vector3D(0, 0, 1);// Z轴朝上
            _viewport.FitView(lookDirection, upDirection);
@@ -96,6 +167,10 @@
        /// </summary>
        public void SetFrontView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(0, 1, 0);   // 向后看
            var upDirection = new Vector3D(0, 0, 1);// Z轴朝上
            _viewport.FitView(lookDirection, upDirection);
@@ -106,6 +181,10 @@
        /// </summary>
        public void SetBackView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(0, -1, 0);   // 向前看
            var upDirection = new Vector3D(0, 0, 1);// Z轴朝上
            _viewport.FitView(lookDirection, upDirection);
@@ -121,6 +200,10 @@
        /// </summary>
        public void SetSouthWestView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(1, 1, -1);
            var upDirection = new Vector3D(0, 0, 1);
            _viewport.FitView(lookDirection, upDirection);
@@ -132,6 +215,10 @@
        /// </summary>
        public void SetSouthEastView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(-1, 1, -1);
            var upDirection = new Vector3D(0, 0, 1);
            _viewport.FitView(lookDirection, upDirection);
@@ -143,6 +230,10 @@
        /// </summary>
        public void SetNorthEastView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(-1, -1, -1);
            var upDirection = new Vector3D(0, 0, 1);
            _viewport.FitView(lookDirection, upDirection);
@@ -154,6 +245,10 @@
        /// </summary>
        public void SetNorthWestView()
        {
            if (!Initialized)
            {
                return;
            }
            var lookDirection = new Vector3D(1, -1, -1);
            var upDirection = new Vector3D(0, 0, 1);
            _viewport.FitView(lookDirection, upDirection);
@@ -161,12 +256,67 @@
        #endregion
        #region 默认视图
        /// <summary>
        /// 显示默认视图
        /// </summary>
        public bool ShowDefaultView()
        {
            if (!Initialized)
            {
                return false;
            }
            var cameraSetting = _initialHelper.GetDefaultCameraSetting();
            if (cameraSetting == null)
            {
                return false;
            }
            SetView(cameraSetting);
            return true;
        }
        #endregion
        //处理鼠标双击事件
        private void OnMouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (e.ChangedButton != MouseButton.Left)
            {
                return;
            }
            if (!Enabled)
            {
                return;
            }
            var bol = ShowDefaultView();
            if (bol)
            {
                return;
            }
            SetSouthWestView();
        }
        //附加
        private void Attach()
        {
            _viewport.MouseDoubleClick += OnMouseDoubleClick;
            _initialHelper.InitialCompletedEvent += OnInitialCompleted;
        }
        //分离
        private void Detach()
        {
            _viewport.MouseDoubleClick -= OnMouseDoubleClick;
            _initialHelper.InitialCompletedEvent -= OnInitialCompleted;
        }
        /// <summary>
        /// 释放
        /// </summary>
        public void Dispose()
        {
            Detach();
        }
    }