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