From 12a6316ffa897b4ce4205f545b88359195b386d6 Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期三, 25 九月 2024 17:34:24 +0800
Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/HStation/XHS.V1.0

---
 WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs |  205 ++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 152 insertions(+), 53 deletions(-)

diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs
index f3be91b..658b9e8 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/Network_Method.cs
@@ -1,4 +1,7 @@
-锘縩amespace Yw.WinFrmUI.HydroL3d
+锘縰sing DevExpress.XtraCharts.Native;
+using DevExpress.XtraDiagram.Bars;
+
+namespace Yw.WinFrmUI.HydroL3d
 {
     /// <summary>
     /// 
@@ -56,49 +59,23 @@
         }
 
         /// <summary>
-        /// 鑾峰彇瑙傚療淇℃伅
+        /// 鑾峰彇杞崲
         /// </summary>
-        public LookAt3d GetLookAt()
+        public Point3d GetTranslation(BoundingBox3d boundingBox, Point3d center)
         {
-            return new LookAt3d()
+            if (boundingBox == null)
             {
-                Eye = new Point3d(0, 0, 0),
-                Center = new Point3d(0, 0, 0),
-                Up = new Point3d(0, 1, 0)
-            };
-        }
-
-        /// <summary>
-        /// 鑾峰彇閫忚淇℃伅
-        /// </summary>
-        public Perspective3d GetPerspective(LookAt3d lookAt, SharpGL.OpenGLControl openglControl = null)
-        {
-            if (lookAt == null)
-            {
-                lookAt = GetLookAt();
+                boundingBox = GetBoundingBox();
             }
-            var minDistance = float.MaxValue;
-            var maxDistance = float.MinValue;
-            foreach (var node in this.Nodes)
+            if (center == null)
             {
-                var distance = lookAt.Eye.Distance(node.Position);
-                minDistance = MathF.Min(minDistance, distance);
-                maxDistance = MathF.Max(maxDistance, distance);
+                center = GetCenter(boundingBox);
             }
-            var bufferFactor = 1.2f;
-            var aspect = 1.25f;
-            if (openglControl != null)
+            return new Point3d()
             {
-                aspect = (float)openglControl.Width / (float)openglControl.Height;
-            }
-            var near = minDistance * bufferFactor;
-            var far = maxDistance * bufferFactor;
-            return new Perspective3d()
-            {
-                Fovy = 45f,
-                Aspect = aspect,
-                Near = near,
-                Far = far
+                X = -center.X,
+                Y = -center.Y,
+                Z = -boundingBox.Max.Z * 3f
             };
         }
 
@@ -112,26 +89,77 @@
         }
 
         /// <summary>
-        /// 鑾峰彇杞崲
+        /// 缂╂斁
         /// </summary>
-        public Point3d GetTranslation(BoundingBox3d boudingBox, Point3d center)
+        public Point3d GetScale()
         {
-            if (boudingBox == null)
+            return new Point3d() { X = 1f, Y = 1f, Z = 1f };
+        }
+
+        /// <summary>
+        /// 鑾峰彇瑙傚療淇℃伅
+        /// </summary>
+        public LookAt3d GetLookAt(BoundingBox3d boundingBox, Point3d center)
+        {
+            if (boundingBox == null)
             {
-                boudingBox = GetBoundingBox();
+                boundingBox = GetBoundingBox();
             }
             if (center == null)
             {
-                center = GetCenter(boudingBox);
+                center = boundingBox.GetCenter();
             }
-            var zBufferFactor = 3f;
-            return new Point3d()
+            return new LookAt3d()
             {
-                X = -center.X,
-                Y = -center.Y,
-                Z = -boudingBox.Max.Z * zBufferFactor
+                Eye = new Point3d(center.X, center.Y, center.Z),
+                Center = new Point3d(center.X, center.Y, center.Z),
+                Up = new Point3d(0, 1, 0)
             };
         }
+
+        /// <summary>
+        /// 鑾峰彇閫忚淇℃伅
+        /// </summary>
+        public Perspective3d GetPerspective(BoundingBox3d boundingBox, Point3d center, LookAt3d lookAt, SharpGL.OpenGLControl openglControl = null)
+        {
+            if (boundingBox == null)
+            {
+                boundingBox = GetBoundingBox();
+            }
+            if (center == null)
+            {
+                center = boundingBox.GetCenter();
+            }
+            if (lookAt == null)
+            {
+                lookAt = GetLookAt(boundingBox, center);
+            }
+            var minDistance = float.MaxValue;
+            var maxDistance = float.MinValue;
+            foreach (var node in this.Nodes)
+            {
+                var distance = lookAt.Eye.Distance(node.Position);
+                minDistance = MathF.Min(minDistance, distance);
+                maxDistance = MathF.Max(maxDistance, distance);
+            }
+            var fovy = 45f;
+            var aspect = 1.25f;
+            if (openglControl != null)
+            {
+                aspect = (float)openglControl.Width / (float)openglControl.Height;
+            }
+            var bufferFactor = 1.2f;
+            var near = minDistance / 100f;
+            var far = maxDistance * 5f * bufferFactor;
+            return new Perspective3d()
+            {
+                Fovy = fovy,
+                Aspect = aspect,
+                Near = near,
+                Far = far
+            };
+        }
+
 
         /// <summary>
         /// 鑾峰彇鍙傛暟
@@ -141,23 +169,94 @@
         {
             var boundingBox = GetBoundingBox();
             var center = boundingBox.GetCenter();
-            var lookAt = GetLookAt();
-            var perspective = GetPerspective(lookAt, openglControl);
-            var rotation = GetRotation();
             var translation = GetTranslation(boundingBox, center);
+            var scale = GetScale();
+            var rotation = GetRotation();
+            var lookAt = GetLookAt(boundingBox, center);
+            var perspective = GetPerspective(boundingBox, center, lookAt, openglControl);
+
             return new NetworkParas()
             {
                 BoundingBox = boundingBox,
                 Ceneter = center,
-                Perspective = perspective,
-                LookAt = lookAt,
+                Translation = translation,
                 Rotation = rotation,
-                Translation = translation
+                Scale = scale,
+                LookAt = lookAt,
+                Perspective = perspective,
             };
         }
 
+        /// <summary>
+        /// 缁樺埗
+        /// </summary>
+        public void Draw(SharpGL.OpenGL gl)
+        {
+            foreach (var link in this.Links)
+            {
+                link.Draw(gl);
+            }
+            foreach (var node in this.Nodes)
+            {
+                node.Draw(gl);
+            }
+        }
 
+        /// <summary>
+        /// 閫夋嫨
+        /// </summary>
+        public List<Parter> Select(Point3d pt)
+        {
+            int i = 0;
+            foreach (var node in this.Nodes)
+            {
+                node.Selected = node.Contains(pt);
+                if (node.Selected)
+                {
+                    i++;
+                }
+            }
 
+            if (i > 0)
+            {
+                this.Links.ForEach(x => x.Selected = false);
+                return this.Nodes.Where(x => x.Selected).Select(x => x as Parter).ToList();
+            }
+
+            foreach (var link in this.Links)
+            {
+                link.Selected = link.Contains(pt);
+            }
+            return this.Links.Where(x => x.Selected).Select(x => x as Parter).ToList();
+        }
+
+        /// <summary>
+        /// 鎮仠
+        /// </summary>
+        public List<Parter> Hover(Point3d pt)
+        {
+            int i = 0;
+            foreach (var node in this.Nodes)
+            {
+                node.Hovered = node.Contains(pt);
+                if (node.Hovered)
+                {
+                    i++;
+                }
+            }
+
+            if (i > 0)
+            {
+                this.Links.ForEach(x => x.Hovered = false);
+                return this.Nodes.Where(x => x.Hovered).Select(x => x as Parter).ToList();
+            }
+
+            foreach (var link in this.Links)
+            {
+                link.Hovered = link.Contains(pt);
+            }
+            return this.Links.Where(x => x.Hovered).Select(x => x as Parter).ToList();
+        }
 
 
 

--
Gitblit v1.9.3