From 17b67713b60e9940ddb0d3f9ea35bea04d99cea8 Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期三, 25 九月 2024 01:49:46 +0800
Subject: [PATCH] l3d修改

---
 WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs |  233 +++++++++++++++++++++++++++++++++++----------------------
 1 files changed, 143 insertions(+), 90 deletions(-)

diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs
index d5c22cc..991b711 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanelDebug.cs
@@ -1,5 +1,6 @@
 锘縰sing DevExpress.Mvvm.Native;
 using DevExpress.XtraCharts.GLGraphics;
+using DevExpress.XtraScheduler.Outlook.Interop;
 using SharpGL;
 
 namespace Yw.WinFrmUI.HydroL3d
@@ -9,7 +10,9 @@
         public NetworkPanelDebug()
         {
             InitializeComponent();
+            this.openGLControl1.MouseWheel += OpenGLControl1_MouseWheel;
         }
+
 
 
         private Network _network = null;//绠$綉
@@ -27,27 +30,18 @@
         public virtual void Initial(Network network)
         {
             _network = network;
-            _paras = new NetworkParas();
-            _paras.BoundingBox = _network.GetBoundingBox();
-            _paras.Ceneter = _paras.BoundingBox.GetCenter();
-            _paras.Rotation = new Point3d();
-            _paras.Translation = new Point3d();
-            _paras.Perspective = new Perspective3d()
-            {
-                Fovy = 60f,
-                Aspect = this.openGLControl1.Width / (float)this.openGLControl1.Height,
-                Near = 5,
-                Far = 100
-            };
-            _paras.LookAt = new LookAt3d()
-            {
-                Eye = new Point3d(),
-                Center = new Point3d(),
-                Up = new Point3d()
-            };
+            _paras = _network.GetParas();
             this.propertyGridControl1.SelectedObject = _paras;
         }
 
+        //gl 鍒濆鍖�
+        private void openGLControl1_OpenGLInitialized(object sender, EventArgs e)
+        {
+            OpenGL gl = openGLControl1.OpenGL;
+            gl.ClearColor(0, 0, 0, 0);
+        }
+
+        //gl 缁樺埗
         private void openGLControl1_OpenGLDraw(object sender, RenderEventArgs args)
         {
             if (!Initialized)
@@ -67,8 +61,7 @@
             gl.LoadIdentity();
 
             // 鍒涘缓閫忚鎶曞奖鍙樻崲
-            gl.Perspective(45f, openGLControl1.Width / openGLControl1.Height, 15696f, 38395f);
-
+            gl.Perspective(_paras.Perspective.Fovy, _paras.Perspective.Aspect, _paras.Perspective.Near, _paras.Perspective.Far);
 
             // 璁剧疆褰撳墠鐭╅樀涓烘ā鍨嬭鍥剧煩闃�
             gl.MatrixMode(OpenGL.GL_MODELVIEW);
@@ -76,12 +69,11 @@
             //閲嶇疆褰撳墠鎸囧畾鐨勭煩闃典负鍗曚綅鐭╅樀,灏嗗綋鍓嶇殑鐢ㄦ埛鍧愭爣绯荤殑鍘熺偣绉诲埌浜嗗睆骞曚腑蹇�
             gl.LoadIdentity();
 
-           // gl.Translate(-_paras.Ceneter.X, -_paras.Ceneter.Y, -_paras.Ceneter.Z);
-            //gl.Translate(0, 0, -5f);
+            gl.Translate(_paras.Translation.X, _paras.Translation.Y, _paras.Translation.Z);
 
-            //gl.Rotate(_paras.Rotation.X, 1, 0, 0);
-            // gl.Rotate(_paras.Rotation.Y, 0, 1, 0);
-            //gl.Rotate(_paras.Rotation.Z, 0, 0, 1);
+            gl.Rotate(_paras.Rotation.X, 1, 0, 0);
+            gl.Rotate(_paras.Rotation.Y, 0, 1, 0);
+            gl.Rotate(_paras.Rotation.Z, 0, 0, 1);
 
             gl.Color(1.0f, 1.0f, 1.0f);
             foreach (var pipe in _network.Pipes)
@@ -89,99 +81,160 @@
                 var startPosition = pipe.StartPosition;
                 var endPosition = pipe.EndPosition;
                 gl.Begin(OpenGL.GL_LINES);
-
                 gl.Vertex(startPosition.X, startPosition.Y, startPosition.Z);//宸﹂《鐐�
                 gl.Vertex(endPosition.X, endPosition.Y, endPosition.Z);//鍙抽《鐐�
                 gl.End();
             }
 
-            gl.Color(1.0f, 1.0f, 1.0f);
-            gl.Begin(OpenGL.GL_LINES);
+            gl.LookAt(_paras.LookAt.Eye.X, _paras.LookAt.Eye.Y, _paras.LookAt.Eye.Z,
+                _paras.LookAt.Center.X, _paras.LookAt.Center.Y, _paras.LookAt.Center.Z,
+                _paras.LookAt.Up.X, _paras.LookAt.Up.Y, _paras.LookAt.Up.Z);
 
-            gl.Vertex(_paras.BoundingBox.Min.X, _paras.BoundingBox.Min.Y, _paras.BoundingBox.Min.Z);//宸﹂《鐐�
-            gl.Vertex(_paras.BoundingBox.Max.X, _paras.BoundingBox.Max.Y, _paras.BoundingBox.Max.Z);//鍙抽《鐐�
-            gl.End();
-
-            #region 鐐瑰埌绾�
-            gl.Begin(OpenGL.GL_LINES);
-            gl.Color(1.0f, 1.0f, 1.0f);
-            gl.Vertex(-2.0f, 0.0f, 0.0f);//宸﹂《鐐�
-            gl.Vertex(2.0f, 2.0f, 0.0f);//鍙抽《鐐�
-            gl.End();
-            #endregion
-
-            var minX = _paras.BoundingBox.Min.X;
-            var maxX = _paras.BoundingBox.Max.X;
-            var minY = _paras.BoundingBox.Min.Y;
-            var maxY = _paras.BoundingBox.Max.Y;
-            var minZ = _paras.BoundingBox.Min.Z;
-            var maxZ = _paras.BoundingBox.Max.Z;
-
-            float distance = Math.Max(maxX - minX, Math.Max(maxY - minY, maxZ - minZ)) * 1.5f;
-
-            var centerX = (minX + maxX) / 2f;
-            var centerY = (minY + maxY) / 2f;
-            var centerZ = (minZ + maxZ) / 2f;
-
-            var cameraX = centerX + distance;
-            var cameraY = centerY + distance;
-            var cameraZ = centerZ + distance;
-
-            //gl.LookAt(cameraX, cameraY, cameraZ, centerX, centerY, centerZ, 0, 1, 0);
-            gl.LookAt(-27484f, -12576f, 8833f, 23675f, 23079f, -7200f, 0f, 0f, 1f);
             gl.Flush();   //寮哄埗鍒锋柊
 
         }
 
-        private void openGLControl1_OpenGLInitialized(object sender, EventArgs e)
+        private void openGLControl1_MouseDown(object sender, MouseEventArgs e)
         {
-            OpenGL gl = openGLControl1.OpenGL;
-            gl.ClearColor(0, 0, 0, 0);
+            HasMouseRightDown(e);
         }
 
+        private void openGLControl1_MouseMove(object sender, MouseEventArgs e)
+        {
+            var hasMouseRightDownMove = MouseRightDownMove(e);
+            if (hasMouseRightDownMove)
+            {
+                this.Invalidate();
+            }
+        }
 
+        private void openGLControl1_MouseUp(object sender, MouseEventArgs e)
+        {
+            var hasMouseRightUp = HasMouseRightUp(e);
+            if (hasMouseRightUp)
+            {
+                this.Invalidate();
+            }
+        }
+
+        private void openGLControl1_MouseHover(object sender, EventArgs e)
+        {
+
+        }
+
+        private void openGLControl1_MouseDoubleClick(object sender, MouseEventArgs e)
+        {
+            if (!Initialized)
+            {
+                return;
+            }
+            if (e.Button == MouseButtons.Left)
+            {
+                _paras = _network.GetParas(this.openGLControl1);
+                this.openGLControl1.Invalidate();
+                this.propertyGridControl1.SelectedObject = _paras;
+                this.propertyGridControl1.UpdateRows();
+            }
+        }
+
+        private void openGLControl1_MouseClick(object sender, MouseEventArgs e)
+        {
+
+        }
+
+        private void OpenGLControl1_MouseWheel(object sender, MouseEventArgs e)
+        {
+            if (e.Delta > 0)
+            {
+                _paras.Perspective.Fovy += 1f;
+            }
+            else
+            {
+                _paras.Perspective.Fovy -= 1f;
+            }
+            this.openGLControl1.Invalidate();
+            this.propertyGridControl1.UpdateRows();
+        }
+
+        //Resize
         private void openGLControl1_Resized(object sender, EventArgs e)
         {
             if (!Initialized)
             {
                 return;
             }
-            // _paras.Perspective.Aspect = this.openGLControl1.Width / (float)this.openGLControl1.Height;
-            //Reset();
+            _paras.Perspective.Aspect = (float)this.openGLControl1.Width / (float)this.openGLControl1.Height;
+            this.propertyGridControl1.UpdateRows();
         }
 
-        //閲嶇疆
-        private void Reset()
+        #region 榧犳爣鍙抽敭鎸変笅鎷栧姩
+
+        /// <summary>
+        /// 褰撻紶鏍囧彸閿寜涓嬫椂鍏佽鎷栧姩
+        /// </summary>
+        [Browsable(true)]
+        [Description("褰撻紶鏍囧彸閿寜涓嬫椂鍏佽鎷栧姩")]
+        [DefaultValue(true)]
+        public bool AllowMoveWhenMouseRightDown
         {
-            if (!Initialized)
-            {
-                return;
-            }
-            OpenGL gl = openGLControl1.OpenGL;
-
-            // 璁剧疆褰撳墠鐭╅樀妯″紡,瀵规姇褰辩煩闃靛簲鐢ㄩ殢鍚庣殑鐭╅樀鎿嶄綔
-            gl.MatrixMode(OpenGL.GL_PROJECTION);
-
-            // 閲嶇疆褰撳墠鎸囧畾鐨勭煩闃典负鍗曚綅鐭╅樀,灏嗗綋鍓嶇殑鐢ㄦ埛鍧愭爣绯荤殑鍘熺偣绉诲埌浜嗗睆骞曚腑蹇�
-            gl.LoadIdentity();
-
-            // 鍒涘缓閫忚鎶曞奖鍙樻崲
-            gl.Perspective(_paras.Perspective.Fovy, _paras.Perspective.Aspect, _paras.Perspective.Near, _paras.Perspective.Far);
-
-            // 瑙嗙偣鍙樻崲
-            // gl.LookAt(_paras.LookAt.Eye.X, _paras.LookAt.Eye.Y, _paras.LookAt.Eye.Z, _paras.LookAt.Center.X, _paras.LookAt.Center.Y, _paras.LookAt.Center.Z, _paras.LookAt.Up.X, _paras.LookAt.Up.Y, _paras.LookAt.Up.Z);
-
-            // 璁剧疆褰撳墠鐭╅樀涓烘ā鍨嬭鍥剧煩闃�
-            gl.MatrixMode(OpenGL.GL_MODELVIEW);
+            get => _allowMoveWhenMouseRightDown;
+            set => _allowMoveWhenMouseRightDown = value;
         }
+        private bool _allowMoveWhenMouseRightDown = true;
 
-        private void propertyGridControl1_CellValueChanged(object sender, DevExpress.XtraVerticalGrid.Events.CellValueChangedEventArgs e)
+        protected bool _hasMouseRightDown = false;//榧犳爣鍙抽敭鏄惁鎸変笅
+        protected Point _mouseRightDownMovePoint;//榧犳爣鍙抽敭鎸変笅绉诲姩鐐�
+
+        /// <summary>
+        /// 鍒ゆ柇榧犳爣鍙抽敭鏄惁鎸変笅
+        /// </summary>
+        protected virtual bool HasMouseRightDown(MouseEventArgs e)
         {
-            if (!Initialized)
+            if (e.Button == MouseButtons.Right)
             {
-                return;
+                _hasMouseRightDown = true;
+                _mouseRightDownMovePoint = e.Location;
+                return true;
             }
-            //Reset();
+            return false;
         }
+
+        /// <summary>
+        /// 榧犳爣鍙抽敭鎸変笅绉诲姩
+        /// </summary>
+        protected virtual bool MouseRightDownMove(MouseEventArgs e)
+        {
+            if (_hasMouseRightDown)
+            {
+                if (this.AllowMoveWhenMouseRightDown)
+                {
+                    if (this.Initialized)
+                    {
+                        var pt = new PointF(e.X - _mouseRightDownMovePoint.X, e.Y - _mouseRightDownMovePoint.Y);
+                        _paras.Translation.X += pt.X;
+                        _paras.Translation.Y -= pt.Y;
+                        _mouseRightDownMovePoint = e.Location;
+                        return true;
+                    }
+                }
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇榧犳爣宸﹂敭鏄惁寮硅捣
+        /// </summary>
+        protected virtual bool HasMouseRightUp(MouseEventArgs e)
+        {
+            if (_hasMouseRightDown)
+            {
+                _hasMouseRightDown = false;
+                return true;
+            }
+            return false;
+        }
+
+        #endregion
+
     }
 }

--
Gitblit v1.9.3