ningshuxia
2025-03-26 c44fcc54651c187d0883a041df60a3baf0164e9f
WinFrmUI/Yw.WinFrmUI.Hydro.Q3d.Core/Map/Drawer.cs
@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using Microsoft.VisualBasic.Devices;
using Newtonsoft.Json;
using System;
using System.Collections;
using System.Collections.Generic;
@@ -69,17 +70,13 @@
        {
            IsEditMode = isEditMode;
        }
        private void MapViewer_Load(object sender, EventArgs e)
        public void MapViewer_Load(object sender, EventArgs e)
        {
            //GlobalObject.PropertyForm = this.propertyForm;
            int i = 0;
            //遍历ColourType
            this.TC = TC;
            this.DrawNet = Draw;
@@ -93,62 +90,7 @@
            this.Inited = true;
            this.Status = DrawingStatus.Ready;
            SetDefaultView();
            //TContainer TCCube = new TContainer();
            //TCCube.settings = new Settings();
            //TCCube.settings.network = new MapViewNetWork();
            //TCCube.settings.network.Areas = new List<AreaViewModel>();
            //Cube cb = new Cube();
            //foreach (var item in cb.FacesVertices)
            //{
            //    AreaViewModel area = new AreaViewModel();
            //    area.ID = item.Key.ToString();
            //    area.InnerNodes = new List<NodeViewModel>();
            //    //area.Name= item.Key.ToString();
            //    //6个面设置不一样的颜色
            //    switch (item.Key)
            //    {
            //        case 1:
            //            area.color = Color.Red;
            //            area.Name = "右";
            //            break;
            //        case 2:
            //            area.color = Color.SkyBlue;
            //            area.Name = "左";
            //            break;
            //        case 3:
            //            area.color = Color.Green;
            //            area.Name = "后";
            //            break;
            //        case 4:
            //            area.color = Color.DarkBlue;
            //            area.Name = "前";
            //            break;
            //        case 5:
            //            area.color = Color.Purple;
            //            area.Name = "上";
            //            break;
            //        case 6:
            //            area.color = Color.Orange;
            //            area.Name = "下";
            //            break;
            //        default:
            //            area.color = Color.White;
            //            break;
            //    }
            //    foreach (var p in item.Value)
            //    {
            //        NodeViewModel node = new NodeViewModel();
            //        node.X = p.X;
            //        node.Y = p.Y;
            //        node.Z = p.Z;
            //        area.InnerNodes.Add(node);
            //    }
            //    TCCube.settings.network.Areas.Add(area);
            //}
            SetDefaultView();
        }
        #endregion
@@ -156,7 +98,7 @@
        #region 对外开放,全局控制方法
        private bool LoadData(bool isDelCache = false)
        public bool LoadData(bool isDelCache = false)
        {
            if (_Template == null) return false;
@@ -166,9 +108,6 @@
            }
            SuspendLayout();
            SetStartEndPoint(_Template.Node1, _Template.Node2);
@@ -228,7 +167,7 @@
        }
        private void InitCenter()
        public void InitCenter()
        {
            //MapCenter
            var p = new PointF3D(0, 0, 0);
@@ -335,7 +274,7 @@
        private void timer_draw_Tick(object sender, EventArgs e)
        public void timer_draw_Tick(object sender, EventArgs e)
        {
            _mouseHoverCheckFlag = true;
            if (_timerDraw && this.Status == DrawingStatus.Ready)
@@ -448,7 +387,7 @@
            }
        }
        private bool IsPointInPolygon(PointF point, List<PointF> polygon)
        public bool IsPointInPolygon(PointF point, List<PointF> polygon)
        {
            int count = polygon.Count;
            bool inside = false;
@@ -907,7 +846,7 @@
                RotationFChanged?.Invoke(this, RotationF.ToString("0"));
            }
        }
        private void getPointAndHeight(MouseEventArgs e, out PointF p, out float z)
        public void getPointAndHeight(MouseEventArgs e, out PointF p, out float z)
        {
            z = 0;
            if (RotationF != 0)
@@ -923,7 +862,7 @@
                p = new PointF(m.X, 0);
            }
        }
        private void getPointAndHeight(MouseEventArgs e, NodeViewModel j, out PointF p, out float z)
        public void getPointAndHeight(MouseEventArgs e, NodeViewModel j, out PointF p, out float z)
        {
            z = j.Z;
            if (RotationF != 0)
@@ -1046,8 +985,8 @@
            SetMapInvalidate();
        }
        private int _lastMouseX;
        private int _lastMouseY;
        public int _lastMouseX;
        public int _lastMouseY;
        #endregion
@@ -1245,7 +1184,7 @@
        // 显示点属性
        double 俯视角度_bak = 45;
        private void tool视角_ButtonClick(object sender, EventArgs e)
        public void tool视角_ButtonClick(object sender, EventArgs e)
        {
            mapOption0 = mapOption.Copy();
            if (RotationF == 90)
@@ -1262,7 +1201,7 @@
            SetMapInvalidate();
        }
        private void tool设置俯视角度_Click(object sender, EventArgs e)
        public void tool设置俯视角度_Click(object sender, EventArgs e)
        {
            mapOption0 = mapOption.Copy();
            double jiaodu = 45;
@@ -1284,7 +1223,7 @@
            if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption);
            SetMapInvalidate();
        }
        private void 正视图ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 正视图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            mapOption0 = mapOption.Copy();
            RotationF = 0;
@@ -1292,7 +1231,7 @@
            SetMapInvalidate();
        }
        private void 俯视图ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 俯视图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            mapOption0 = mapOption.Copy();
            RotationF = 90;
@@ -1300,7 +1239,7 @@
            SetMapInvalidate();
        }
        private void 默认视角ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 默认视角ToolStripMenuItem_Click(object sender, EventArgs e)
        {
@@ -1313,7 +1252,7 @@
            SetMapInvalidate();
        }
        private void 设为隐藏ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 设为隐藏ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            selectedObjs.ForEach(v =>
            {
@@ -1327,7 +1266,7 @@
            this.SetMapInvalidate();
        }
        private void 设置长度ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 设置长度ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            double length = 0;
            DialogResult result;
@@ -1392,7 +1331,7 @@
                //Console.WriteLine("移动后点 B 的坐标为 ({0}, {1}, {2})", x2, y2, z2);
            }
        }
        private void 全部显示ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 全部显示ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            _Nodes.Select(n => (NodeViewModel)n).ToList().ForEach(v =>
            {
@@ -1415,7 +1354,53 @@
        }
        #endregion
        #region 文件工具
        public void tool打开_ButtonClick(object sender, EventArgs e)
        {
            // 创建打开文件对话框
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "INP Files (*.inp)|*.inp|All Files (*.*)|*.*";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                _Template = new Settings();
                _network = new NetworkViewModel();
                //_Template.network.use_old = false;
                // 获取选中文件的文件路径
                string filePath = openFileDialog.FileName;
                {
                    // 读取文件内容
                    _network.BuildFromInp(filePath);
                    _Template.filePath = filePath;
                    //_filePath = filePath;
                    SetData(_network, _Template);
                }
            }
        }
        private void toolStripButton_save_Click(object sender, EventArgs e)
        {
        }
        private void 另存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
        }
        private void 导出形状ToolStripMenuItem_Click(object sender, EventArgs e)
        {
        }
        #endregion
        #region 绘图工具
@@ -1494,7 +1479,7 @@
        }
        private List<IBaseViewModel> AddLink(PointF e, bool isdoubleClick, PointF p, float z)
        public List<IBaseViewModel> AddLink(PointF e, bool isdoubleClick, PointF p, float z)
        {
            List<IBaseViewModel> l = new List<IBaseViewModel>();
            var node = GetObj_by_ScreenPoint(e);
@@ -1526,7 +1511,7 @@
            return l;
        }
        private void Set_junction1(MouseEventArgs e)
        public void Set_junction1(MouseEventArgs e)
        {
            var node = GetObj_by_ScreenPoint(new PointF(e.X, e.Y));
@@ -1646,7 +1631,7 @@
        private void MapViewer_KeyPress(object sender, KeyPressEventArgs e)
        public void MapViewer_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (IsEditMode && ctrlPressed && e.KeyChar == 'Z' - 64)
            {
@@ -1676,7 +1661,7 @@
                e.Handled = true;
            }
        }
        private void MapViewer_PreKeyPress(object sender, PreviewKeyDownEventArgs e)
        public void MapViewer_PreKeyPress(object sender, PreviewKeyDownEventArgs e)
        {
            if (IsEditMode && e.Control && e.KeyCode == Keys.Z)
            {
@@ -1723,7 +1708,7 @@
        #region 右键菜单
        private void 转换ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 转换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var nodes = selectedNodes;
            foreach (var obj in nodes)
@@ -1816,7 +1801,7 @@
            DeleteChoosedObj();
        }
        private void DeleteChoosedObj()
        public void DeleteChoosedObj()
        {
            var list = Network.Remove(selectedObjs);
            MapObjectExtensions.AddCommand(Network, "Remove", null, list);
@@ -1830,14 +1815,14 @@
        private void toolStripComboBox_expandRepeater_ButtonClick(object sender, EventArgs e)
        public void toolStripComboBox_expandRepeater_ButtonClick(object sender, EventArgs e)
        {
            IsEditMode = !IsEditMode;
            //toolStripComboBox_浏览模式.Text = isEditMode ? "编辑模式" : "浏览模式";
            //LoadData(true);
        }
        private void 浏览模式ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 浏览模式ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var obj = sender as ToolStripItem;
            IsEditMode = obj.Text == "编辑模式";
@@ -1952,7 +1937,7 @@
        private void btn_拓扑检查_Click(object sender, EventArgs e)
        public void btn_拓扑检查_Click(object sender, EventArgs e)
        {
            Dictionary<string, List<string>> result = _network.CheckValidate();
            if (result.Count > 0)
@@ -2020,7 +2005,7 @@
        List<LinkViewModel> LinksToFindSource = null;
        Dictionary<LinkViewModel, List<IBaseViewModel>> Sets = null;
        Dictionary<LinkViewModel, bool> Sets_hasSource = null;
        private void TraversePipeNetwork(List<IBaseViewModel> startObjs, HashSet<NodeViewModel> visitedNodes = null, bool consider = true)
        public void TraversePipeNetwork(List<IBaseViewModel> startObjs, HashSet<NodeViewModel> visitedNodes = null, bool consider = true)
        {
            LinksToFindSource = new List<LinkViewModel>();
@@ -2067,7 +2052,7 @@
        }
        private void TraversePipeNetwork(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null)
        public void TraversePipeNetwork(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null)
        {
            Queue<LinkViewModel> queue = new Queue<LinkViewModel>();
@@ -2121,7 +2106,7 @@
            }
        }
        private void TraversePipeNetwork_Set(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null)
        public void TraversePipeNetwork_Set(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null)
        {
            Queue<LinkViewModel> queue = new Queue<LinkViewModel>();
@@ -2184,7 +2169,7 @@
        }
        private bool FindSouce(LinkViewModel startLink, HashSet<LinkViewModel> visitedLinks, HashSet<LinkViewModel> visitedLinks2, Dictionary<IBaseViewModel, bool> hasSource = null)
        public bool FindSouce(LinkViewModel startLink, HashSet<LinkViewModel> visitedLinks, HashSet<LinkViewModel> visitedLinks2, Dictionary<IBaseViewModel, bool> hasSource = null)
        {
@@ -2206,7 +2191,7 @@
        }
        private bool FindSouce(NodeViewModel startNode, HashSet<LinkViewModel> visitedLinks, HashSet<LinkViewModel> visitedLinks2, Dictionary<IBaseViewModel, bool> hasSource = null)
        public bool FindSouce(NodeViewModel startNode, HashSet<LinkViewModel> visitedLinks, HashSet<LinkViewModel> visitedLinks2, Dictionary<IBaseViewModel, bool> hasSource = null)
        {
            foreach (var link in startNode.ViewLinks)
@@ -2234,7 +2219,7 @@
        }
        private void TraversePipeNetworkALL(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null, int direction = 0)
        public void TraversePipeNetworkALL(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null, int direction = 0)
        {
            Queue<LinkViewModel> queue = new Queue<LinkViewModel>();
@@ -2289,19 +2274,19 @@
        #region 显示选项
        private void 显示节点ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 显示节点ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IsShowJunction = true;
            SetMapInvalidate();
        }
        private void 隐藏节点ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 隐藏节点ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IsShowJunction = false;
            SetMapInvalidate();
        }
        private void 大ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 大ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var item = sender as ToolStripItem;
            if (item.Text == "大")
@@ -2319,14 +2304,14 @@
            SetMapInvalidate();
        }
        private void 显示阀门ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 显示阀门ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IsShowValve = true;
            SetMapInvalidate();
        }
        private void 隐藏阀门ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 隐藏阀门ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            IsShowValve = false;
            SetMapInvalidate();
@@ -2334,7 +2319,7 @@
        }
        private void 大ToolStripMenuItem1_Click(object sender, EventArgs e)
        public void 大ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            var item = sender as ToolStripItem;
            if (item.Text == "大")
@@ -2359,7 +2344,7 @@
        #endregion 二、工具栏
        #region 三、方法
        private void 标高推测ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 标高推测ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int num = UpdateNodesEle();
            if (num > 0)
@@ -2409,7 +2394,7 @@
            return num;
        }
        private void FindNonZeroNeighbors(NodeViewModel node, List<NodeViewModel> result, HashSet<NodeViewModel> origin)
        public void FindNonZeroNeighbors(NodeViewModel node, List<NodeViewModel> result, HashSet<NodeViewModel> origin)
        {
            foreach (LinkViewModel link in node.ViewLinks)
            {
@@ -2435,7 +2420,7 @@
                }
            }
        }
        private void 标高导出ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 标高导出ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("ID");
@@ -2572,7 +2557,7 @@
            }
        }
        private void 导入jsonToolStripMenuItem_Click(object sender, EventArgs e)
        public void 导入jsonToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var ofd = new OpenFileDialog();
            ofd.Filter = "json文件|*.json";
@@ -2602,7 +2587,7 @@
        }
        private void 连通性检查ToolStripMenuItem1_Click(object sender, EventArgs e)
        public void 连通性检查ToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (selectedObjs.Count > 0)//&& selectedObjs[0] is Link l
            {
@@ -2619,7 +2604,7 @@
            }
        }
        private void 下游连通性ToolStripMenuItem_Click(object sender, EventArgs e)
        public void 下游连通性ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (selectedObjs.Count > 0)//&& selectedObjs[0] is Link l
            {
@@ -2692,7 +2677,7 @@
            return projectedPoints;
        }
        public void SetSelectObj(List<string>  ids)
        public void SetSelectObj(List<string> ids)
        {
            //构造两个字典,一个是节点,一个是管道
            var dict_nodes = _Nodes.ToDictionary(o => o.ID);
@@ -2716,7 +2701,7 @@
        bool _isSettingBackGroundPictur = false;
        private bool __needpaintall = false;
        public bool __needpaintall = false;