lixiaojun
2025-03-18 90c8d96d1c7f02dd10a114811a668915921b8834
模型加载,基础功能缩放、平移、旋转
已重命名5个文件
已修改6个文件
已添加3个文件
269 ■■■■■ 文件已修改
Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/NetworkL3d_Method.cs 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/01-network/02-visual/VisualL3d.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/01-network/02-visual/eVisualState.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/01-network/03-node/00-core/NodeL3d.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/01-network/03-node/01-junction/JunctionL3d.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/01-network/04-link/00-core/LinkL3d.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/02-draw/DrawLine2dHelper.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/02-draw/DrawPoint2dHelper.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/03-helper/BoundingBox3.cs 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/03-helper/OrthoCameraHelper.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/04-control/OrthoDrawer2d.Designer.cs 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/04-control/OrthoDrawer2d.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/04-control/OrthoDrawer2d.resx 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/Yw.WinFrmUI.Hydro.L3d.Core.csproj.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Yw.WinFrmUI.Hydro.L3d.Core/01-network/00-core/NetworkL3d_Method.cs
@@ -1,4 +1,7 @@
namespace Yw.WinFrmUI.Hydro

using OpenTK.Mathematics;
namespace Yw.WinFrmUI.Hydro
{
    /// <summary>
    /// 
@@ -55,8 +58,14 @@
            return boundingBox.GetCenter();
        }
        /// <summary>
        /// ç»˜åˆ¶2d
        /// </summary>
        public void Draw2d()
        {
            this.Links?.ForEach(x => x.Draw2d());
            this.Nodes?.ForEach(x => x.Draw2d());
        }
Yw.WinFrmUI.Hydro.L3d.Core/01-network/02-visual/VisualL3d.cs
@@ -15,5 +15,17 @@
        /// </summary>
        public VisualL3d(VisualL3d rhs) : base(rhs) { }
        /// <summary>
        /// çŠ¶æ€
        /// </summary>
        internal eVisualState State { get; set; }
        /// <summary>
        /// 2d绘制
        /// </summary>
        public abstract void Draw2d();
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/01-network/02-visual/eVisualState.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
namespace Yw.WinFrmUI.Hydro
{
    /// <summary>
    /// å¯è§çŠ¶æ€
    /// </summary>
    internal enum eVisualState
    {
        /// <summary>
        /// æ­£å¸¸
        /// </summary>
        Normal,
        /// <summary>
        /// æ‚¬æµ®
        /// </summary>
        Hovered,
        /// <summary>
        /// é€‰æ‹©
        /// </summary>
        Selected
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/01-network/03-node/00-core/NodeL3d.cs
@@ -23,5 +23,21 @@
        /// </summary>
        public PointL3d Position { get; set; }
        /// <summary>
        ///
        /// </summary>
        public override void Draw2d()
        {
            switch (this.State)
            {
                case eVisualState.Normal: DrawPoint2dHelper.Draw(5f, Color.Red, this.Position); break;
                case eVisualState.Hovered: DrawPoint2dHelper.Draw(6f, ColorTranslator.FromHtml("#00BFFF"), this.Position); break;
                case eVisualState.Selected: DrawPoint2dHelper.Draw(7f, ColorTranslator.FromHtml("#008000"), this.Position); break;
                default: break;
            }
        }
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/01-network/03-node/01-junction/JunctionL3d.cs
@@ -1,4 +1,6 @@
namespace Yw.WinFrmUI.Hydro
using OpenTK.Graphics.OpenGL;
namespace Yw.WinFrmUI.Hydro
{
    /// <summary>
    /// è¿žæŽ¥èŠ‚ç‚¹
@@ -35,5 +37,7 @@
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/01-network/04-link/00-core/LinkL3d.cs
@@ -40,5 +40,21 @@
            }
        }
        /// <summary>
        /// ç»˜åˆ¶
        /// </summary>
        public override void Draw2d()
        {
            switch (this.State)
            {
                case eVisualState.Normal: DrawLine2dHelper.Draw(2f, Color.Blue, this.StartPosition, this.EndPosition); break;
                case eVisualState.Hovered: DrawLine2dHelper.Draw(3f, ColorTranslator.FromHtml("#00BFFF"), this.StartPosition, this.EndPosition); break;
                case eVisualState.Selected: DrawLine2dHelper.Draw(3.5f, ColorTranslator.FromHtml("#800080"), this.StartPosition, this.EndPosition); break;
                default: break;
            }
        }
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/02-draw/DrawLine2dHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
using OpenTK.Graphics.OpenGL;
using System.Numerics;
namespace Yw.WinFrmUI.Hydro
{
    /// <summary>
    /// ç»˜åˆ¶2d线辅助类
    /// </summary>
    internal class DrawLine2dHelper
    {
        /// <summary>
        /// ç»˜åˆ¶
        /// </summary>
        /// <param name="width">线宽</param>
        /// <param name="color">线色</param>
        /// <param name="spt">开始点</param>
        /// <param name="ept">结束点</param>
        public static void Draw(float width, Color color, PointL3d spt, PointL3d ept)
        {
            GL.LineWidth(width);
            GL.Begin(PrimitiveType.Lines);
            GL.Color3(color);
            GL.Vertex3(spt.X, spt.Y, spt.Z);
            GL.Vertex3(ept.X, ept.Y, ept.Z);
            GL.End();
        }
        /// <summary>
        /// ç»˜åˆ¶
        /// </summary>
        /// <param name="width">线宽</param>
        /// <param name="color">线色</param>
        /// <param name="spt">开始点</param>
        /// <param name="ept">结束点</param>
        public static void Draw(float width, Color color, Vector3 spt, Vector3 ept)
        {
            GL.LineWidth(width);
            GL.Begin(PrimitiveType.Lines);
            GL.Color3(color);
            GL.Vertex3(spt.X, spt.Y, spt.Z);
            GL.Vertex3(ept.X, ept.Y, ept.Z);
            GL.End();
        }
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/02-draw/DrawPoint2dHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using OpenTK.Graphics.OpenGL;
using OpenTK.Mathematics;
namespace Yw.WinFrmUI.Hydro
{
    /// <summary>
    /// ç»˜åˆ¶2d点辅助类
    /// </summary>
    internal class DrawPoint2dHelper
    {
        /// <summary>
        /// ç»˜åˆ¶
        /// </summary>
        /// <param name="size">点大小</param>
        /// <param name="color">点颜色</param>
        /// <param name="pt">点位置</param>
        public static void Draw(float size, Color color, PointL3d pt)
        {
            GL.PointSize(size);
            GL.Begin(PrimitiveType.Points);
            GL.Color3(Color.Red);
            GL.Vertex3(pt.X, pt.Y, pt.Z);
            GL.End();
        }
        /// <summary>
        /// ç»˜åˆ¶
        /// </summary>
        /// <param name="size">点大小</param>
        /// <param name="color">点颜色</param>
        /// <param name="pt">点位置</param>
        public static void Draw(float size, Color color, Vector3 pt)
        {
            GL.PointSize(size);
            GL.Begin(PrimitiveType.Points);
            GL.Color3(Color.Red);
            GL.Vertex3(pt.X, pt.Y, pt.Z);
            GL.End();
        }
    }
}
Yw.WinFrmUI.Hydro.L3d.Core/03-helper/BoundingBox3.cs
Yw.WinFrmUI.Hydro.L3d.Core/03-helper/OrthoCameraHelper.cs
ÎļþÃû´Ó Yw.WinFrmUI.Hydro.L3d.Core/02-helper/OrthoCameraHelper.cs ÐÞ¸Ä
@@ -108,6 +108,7 @@
            _radius = (_bx.Max - _bx.Min).Length / 2f;
        }
        //更新模型矩阵
        private void UpdateModelMatrix()
        {
@@ -117,17 +118,18 @@
        //更新视图矩阵
        private void UpdateViewMatrix()
        {
            var eye = new Vector3(_mc.X, _mc.Y + _radius * this.Zoom * 2, _mc.Z);
            var eye = new Vector3(_mc.X, _mc.Y, _mc.Z + this.Radius * 2);
            var target = _mc;
            var up = -Vector3.UnitZ;
            var up = Vector3.UnitY;
            var matrix = Matrix4.CreateFromQuaternion(_rotationQua);
            matrix.Invert();
            eye = Vector3.TransformPosition(eye, matrix);
            up = Vector3.TransformPosition(up, matrix);
            _viewMatrix = Matrix4.LookAt(eye, target, up);
        }
        //更新投影矩阵
        public void UpdateProjectionMatrix()
        private void UpdateProjectionMatrix()
        {
            var size = _radius * 2;
            _pw = size;
@@ -143,9 +145,11 @@
                _ph /= _aspect;
            }
            _projectionMatrix = Matrix4.CreateOrthographic(_pw * this.Zoom, _ph * this.Zoom, _radius * this.Zoom, _radius * this.Zoom * 3);
            _projectionMatrix = Matrix4.CreateOrthographic(_pw * this.Zoom, _ph * this.Zoom, _radius, _radius * 3);
        }
        /// <summary>
        /// æ›´æ–°è§†å£
@@ -245,7 +249,6 @@
            _lastMousePos = e.Location;
            gl.Invalidate();
        }
        #endregion
Yw.WinFrmUI.Hydro.L3d.Core/04-control/OrthoDrawer2d.Designer.cs
Yw.WinFrmUI.Hydro.L3d.Core/04-control/OrthoDrawer2d.cs
ÎļþÃû´Ó Yw.WinFrmUI.Hydro.L3d.Core/03-control/OrthoDrawer2d.cs ÐÞ¸Ä
@@ -69,76 +69,8 @@
            RenderGL();
        }
        //获取节点
        private void DrawNodes()
        {
            if (_nw == null)
            {
                return;
            }
            GL.PointSize(5f);
            GL.Begin(PrimitiveType.Points);
            foreach (NodeL3d node in _nw.Nodes)
            {
                // æ ¹æ®é«˜åº¦è®¾ç½®ä¸åŒé¢œè‰²
                GL.Color3(Color.Red);
                GL.Vertex3(node.Position.X, node.Position.Y, node.Position.Z);
            }
            GL.End();
        }
        //绘制管段
        private void DrawLinks()
        {
            GL.LineWidth(2.5f);
            GL.Begin(PrimitiveType.Lines);
            GL.Color3(Color.Blue); // ç®¡é“颜色
            foreach (var link in _nw.Links)
            {
                // ç»˜åˆ¶ç®¡é“起点和终点
                GL.Vertex3(link.StartPosition.X, link.StartPosition.Y, link.StartPosition.Z);
                GL.Vertex3(link.EndPosition.X, link.EndPosition.Y, link.EndPosition.Z);
            }
            GL.End();
        }
        // æ·»åŠ åæ ‡è½´æ˜¾ç¤º
        private void DrawAxes()
        {
            var mc = _orthoHelper.MC;
            var radius = _orthoHelper.Radius;
            GL.Begin(PrimitiveType.Lines);
            // X轴(红色)
            GL.Color3(Color.Red);
            GL.Vertex3(mc);
            GL.Vertex3(mc + Vector3.UnitX * radius);
            // Y轴(绿色)
            GL.Color3(Color.Green);
            GL.Vertex3(mc);
            GL.Vertex3(mc + Vector3.UnitY * radius);
            // Z轴(蓝色)
            GL.Color3(Color.Blue);
            GL.Vertex3(mc);
            GL.Vertex3(mc + Vector3.UnitZ * radius);
            GL.End();
        }
        private void DrawRotationCenter()
        {
            GL.Color3(Color.Red);
            GL.Begin(PrimitiveType.Lines);
            GL.Vertex3(_orthoHelper.MC - Vector3.UnitX * 0.5f);
            GL.Vertex3(_orthoHelper.MC + Vector3.UnitX * 0.5f);
            GL.Vertex3(_orthoHelper.MC - Vector3.UnitY * 0.5f);
            GL.Vertex3(_orthoHelper.MC + Vector3.UnitY * 0.5f);
            GL.End();
        }
        // æ¸²æŸ“
        private void RenderGL()
@@ -161,13 +93,8 @@
            GL.LoadMatrix(ref viewMatrix);
            DrawLinks();
            DrawNodes();
            //DrawAxes();
            DrawRotationCenter();
            _nw.Draw2d();
            var code = GL.GetError();
            this.glControl1.SwapBuffers();
        }
Yw.WinFrmUI.Hydro.L3d.Core/04-control/OrthoDrawer2d.resx
Yw.WinFrmUI.Hydro.L3d.Core/Yw.WinFrmUI.Hydro.L3d.Core.csproj.user
@@ -2,7 +2,7 @@
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup />
  <ItemGroup>
    <Compile Update="03-control\OrthoDrawer2d.cs">
    <Compile Update="04-control\OrthoDrawer2d.cs">
      <SubType>UserControl</SubType>
    </Compile>
  </ItemGroup>