lixiaojun
2025-01-21 f589894c84d47b9671eef6d3a8337b6b51b32edb
WinFrmUI/Yw.WinFrmUI.Hydro.L3d.Core/02-panel/NetworkPanel.cs
@@ -1,6 +1,4 @@
using DevExpress.CodeParser;
using DevExpress.XtraCharts.Native;
using Yw.Untity;
using Yw.Untity;
namespace Yw.WinFrmUI.HydroL3d
{
@@ -88,12 +86,22 @@
            // 创建透视投影变换
            gl.Perspective(_paras.Perspective.Fovy, _paras.Perspective.Aspect, _paras.Perspective.Near, _paras.Perspective.Far);
            //gl.LoadIdentity();
            //gl.Ortho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
            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);
            //重置当前指定的矩阵为单位矩阵,将当前的用户坐标系的原点移到了屏幕中心
            gl.LoadIdentity();
            //平移
            gl.Translate(_paras.Translation.X, _paras.Translation.Y, _paras.Translation.Z);
@@ -110,9 +118,40 @@
            _network.Draw(gl);
            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);
            //float[] minCorner = { _paras.BoundingBox.Min.X, _paras.BoundingBox.Min.Y, _paras.BoundingBox.Min.Z };
            //float[] maxCorner = { _paras.BoundingBox.Max.X, _paras.BoundingBox.Max.Y, _paras.BoundingBox.Max.Z };
            //gl.Begin(OpenGL.GL_POINT);
            //gl.Vertex(minCorner[0], minCorner[1], minCorner[2]);
            //gl.End();
            //gl.Begin(OpenGL.GL_POINT);
            //gl.Vertex(maxCorner[0], maxCorner[1], maxCorner[2]);
            //gl.End();
            //gl.Begin(OpenGL.GL_LINE_LOOP);
            //// 绘制底面
            //gl.Vertex(minCorner[0], minCorner[1], minCorner[2]);
            //gl.Vertex(maxCorner[0], minCorner[1], minCorner[2]);
            //gl.Vertex(maxCorner[0], maxCorner[1], minCorner[2]);
            //gl.Vertex(minCorner[0], maxCorner[1], minCorner[2]);
            //// 绘制顶面
            //gl.Vertex(minCorner[0], minCorner[1], maxCorner[2]);
            //gl.Vertex(maxCorner[0], minCorner[1], maxCorner[2]);
            //gl.Vertex(maxCorner[0], maxCorner[1], maxCorner[2]);
            //gl.Vertex(minCorner[0], maxCorner[1], maxCorner[2]);
            //// 连接底面和顶面的边
            //gl.Vertex(minCorner[0], minCorner[1], minCorner[2]);
            //gl.Vertex(minCorner[0], minCorner[1], maxCorner[2]);
            //gl.Vertex(maxCorner[0], minCorner[1], minCorner[2]);
            //gl.Vertex(maxCorner[0], minCorner[1], maxCorner[2]);
            //gl.Vertex(maxCorner[0], maxCorner[1], minCorner[2]);
            //gl.Vertex(maxCorner[0], maxCorner[1], maxCorner[2]);
            //gl.Vertex(minCorner[0], maxCorner[1], minCorner[2]);
            //gl.Vertex(minCorner[0], maxCorner[1], maxCorner[2]);
            //gl.End();
            gl.Flush();   //强制刷新
@@ -176,8 +215,8 @@
                        int deltaX = e.X - _mouseLeftDownRotatePoint.X;
                        int deltaY = e.Y - _mouseLeftDownRotatePoint.Y;
                        _rotationX += deltaY * 0.05f;
                        _rotationY += deltaX * 0.05f;
                        _rotationX += deltaY * 0.1f;
                        _rotationY += deltaX * 0.1f;
                        _mouseLeftDownRotatePoint = e.Location;
                        return true;
@@ -291,7 +330,6 @@
            {
                this.openGLControl1.Invalidate();
            }
        }
        private void openGLControl1_MouseUp(object sender, MouseEventArgs e)
@@ -311,9 +349,13 @@
                return;
            }
            var pt = this.openGLControl1.PointToClient(MousePosition);
            var list = this.openGLControl1.OpenGL.UnProject(pt.X, pt.Y, 0);
            var list = this.openGLControl1.OpenGL.UnProject(pt.X, this.openGLControl1.Height - pt.Y, 0);
            var wpt = new Point3d(list[0], list[1], list[2]);
            _network.Hover(wpt);
            var list1 = _network.Hover(wpt);
            if (list1 != null && list1.Count > 0)
            {
            }
        }
        private void openGLControl1_MouseDoubleClick(object sender, MouseEventArgs e)