From 77ab118a04eb43da0ce07b2f22d4a4bc82f04a7f Mon Sep 17 00:00:00 2001
From: qin <a@163.com>
Date: 星期二, 04 六月 2024 09:09:37 +0800
Subject: [PATCH] 水表当量管理

---
 Hydraulic/Hydro.MapUI/Map/MapViewer.cs |  305 +++++++++++++++++++++++++++++++++++---------------
 1 files changed, 211 insertions(+), 94 deletions(-)

diff --git a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs
index 0e374d3..5f079fc 100644
--- a/Hydraulic/Hydro.MapUI/Map/MapViewer.cs
+++ b/Hydraulic/Hydro.MapUI/Map/MapViewer.cs
@@ -119,7 +119,7 @@
 
             //if (!showToolBar) this.panel1.Visible = false;
         }
-        public MapViewer() 
+        public MapViewer()
         {
 
             this.showToolBar = false;
@@ -127,10 +127,14 @@
 
             MapCenter = PointF.Empty;
             zoom = 1.0f;
-            
+
             SetStyle(ControlStyles.SupportsTransparentBackColor, true);
             BackColor = Color.Transparent;
 
+        }
+        public void SetEditMode(bool isEditMode)
+        {
+            _IsEditMode = isEditMode;
         }
         private void MapViewer_Load(object sender, EventArgs e)
         {
@@ -161,9 +165,9 @@
 
             cb_Link_Colour.SelectedIndex = 0;
 
-            map.Init(TC,new DrawDelegate[] { Draw, Draw, DrawH },new MouseDelegate[] { mapMouseDown, mapMouseMove, mapMouseUp, mapMouseWheel });
+            map.Init(TC, new DrawDelegate[] { Draw, Draw, DrawH }, new MouseDelegate[] { mapMouseDown, mapMouseMove, mapMouseUp, mapMouseWheel });
 
-            
+
 
 
         }
@@ -175,7 +179,7 @@
 
         public bool LoadData(bool isDelCache = false)
         {
-            
+
             if (_Template == null) return false;
             if (isDelCache || _Template.network == null)
             {
@@ -252,7 +256,7 @@
             bool reLoad = _Template == template;
             this._Template = template;
             this._ViewModel = viewMode;
-            
+
 
             //if ( _Template?.Floors!=null)
             //{
@@ -295,7 +299,7 @@
                     SetMapInvalidate();
                 }
             }
-           
+
             鍒锋柊妤煎眰ToolStripMenuItem_Click(1, new EventArgs());
             label_center.Text = $"center锛�({MapCenter.X.ToString("0.00")} 锛寋MapCenter.Y.ToString("0.00")}锛�";
             label_zoom.Text = $"Zoom锛歿zoom.ToString("0.000")}";
@@ -377,8 +381,8 @@
 
         #region 閲嶇粯鍑芥暟
 
-        bool _needPaintAll 
-        { 
+        bool _needPaintAll
+        {
             get
             {
                 return __needpaintall;
@@ -491,7 +495,7 @@
         //        }
         //        if (_isSettingBackGroundPictur)
         //        {
-                   
+
         //            var _lastMousePosition = DragStartPos;
         //            // 缁樺埗鐭╁舰
         //            var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y));
@@ -539,11 +543,11 @@
             return points;
         }
 
-        
-           
 
-       
-        
+
+
+
+
         private void timer_draw_Tick(object sender, EventArgs e)
         {
             _mouseHoverCheckFlag = true;
@@ -565,13 +569,13 @@
 
 
         #region 榧犳爣浜嬩欢
-        
+
         void mapMouseDown(MouseEventArgs e)
         {
             base.OnMouseDown(e);
 
             _ClickStartPos = new PointF(e.X, e.Y);
-            DragStartPos= ScreenToMap(new PointF(e.X, e.Y));
+            DragStartPos = ScreenToMap(new PointF(e.X, e.Y));
             mousePosition = _MousePosition = ScreenToMap(new PointF(e.X, e.Y));
             if (e.Button == MouseButtons.Left && _isInsertingObject)
             {
@@ -623,7 +627,7 @@
                 }
 
                 //绉诲姩
-                if (selectedObjs.Count >= 1) //&& selectedObjs[0].isNode())
+                if (_IsEditMode && selectedObjs.Count >= 1) //&& selectedObjs[0].isNode())
                 {
                     List<NodeViewModel> nodes = selectedNodes;
                     foreach (NodeViewModel node in nodes)
@@ -752,7 +756,7 @@
                 //    Math.Abs((int)DragStartPos.Y - (int)MP.Y));
                 //DrawSelectionRect(selectionRect);
                 needInvalidate = true;
-                 
+
             }
             else if (_isRotating)
             {
@@ -786,7 +790,7 @@
                 // 閬嶅巻鎵�鏈夊璞�,鎵惧嚭鑼冨洿鍐呯殑瀵硅薄
                 PointF clickedPoint = new PointF(e.X, e.Y);  //ScreenToMap(new PointF(e.X, e.Y));
                 var obj = GetObj_by_ScreenPoint(clickedPoint);
-                if (hoveredObjs.Count > 0 && hoveredObjs[0] == obj || hoveredObjs.Count==0 && obj==null)
+                if (hoveredObjs.Count > 0 && hoveredObjs[0] == obj || hoveredObjs.Count == 0 && obj == null)
                 {
                     //needInvalidate = false;
                 }
@@ -795,18 +799,18 @@
                     needInvalidate = true;
                     hoveredObjs.ForEach(o => o.Hovered = false);
                     hoveredObjs.Clear();
-                    if (obj!=null)
+                    if (obj != null)
                     {
                         obj.Hovered = true;
                         hoveredObjs.Add(obj);
                     }
-                    
-                   
+
+
                 }
-                
+
 
             }
-            
+
 
 
             if (needInvalidate) this.SetMapInvalidate();
@@ -933,6 +937,7 @@
             if  /*鎻掑叆缁撴瀯*/(e.Button == MouseButtons.Left && _isInsertingObject)
             {
                 var net = _newTemplate.network;
+                var net0 = _newTemplate.network.DeepCopyByBin<MapViewNetWork>();
                 List<NodeViewModel> nodes = _Nodes.Select(node => (NodeViewModel)node).ToList();
                 float minDist = 100f;
                 NodeViewModel minNode = null;
@@ -1007,7 +1012,12 @@
                 //_OperaNode = null;
                 //_Network.Nodes.AddRange(net.Nodes);
                 //_Network.Links.AddRange(net.Links);
-            
+
+                _newTemplate.network = net0;
+                _undoOldValue = new PointF3D(0, 0, 0);
+            _OperaNode = _newTemplate.network.Nodes.Find(node => node.ID == _newTemplate.Node1) as NodeViewModel;
+                _isInsertingObject = true;
+
                 SetMapInvalidate();
                 return;
             }
@@ -1077,7 +1087,7 @@
                     var l = new List<IBaseViewModel>();
                     l.Add(_Network.AddPipe(_OperaNode, minNode));
                     if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
-                   
+
                     _OperaNode = null;
                     _NewNet.Clear();
                 }
@@ -1152,7 +1162,7 @@
                     case MouseState.鏂板缓閲嶅鍣�:
                         if (_select_junction1 == null)
                         {
-                            if (_mouseState==MouseState.鏂板绔嬬)
+                            if (_mouseState == MouseState.鏂板绔嬬)
                             {
                                 var m = ScreenToVMap(new PointF(e.X, e.Y));
                                 z = m.Y;
@@ -1164,19 +1174,19 @@
                                 getPointAndHeight(e, out p, out z);
                                 Set_junction1(e);
                             }
-                            
+
                         }
                         else
                         {
                             if (_mouseState == MouseState.鏂板绔嬬)
                             {
                                 //闇�瑕佹妸榧犳爣浣嶇疆杞崲涓虹珛绠$殑浣嶇疆锛岃幏鍙栭紶鏍囦綅缃殑楂樼▼
-                                
+
                                 var wPos = GetZZWorldPoint(_select_junction1.Position3D, _MousePosition, new Vector3(0, 0, 1));
                                 //var m = ScreenToVMap(new PointF(e.X, e.Y));
                                 //z = m.Y;
                                 p = new PointF(wPos.X, wPos.Y);
-                                var l = AddLink(new PointF( e.X,e.Y), isdoubleClick, p, wPos.Z);
+                                var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p, wPos.Z);
                                 if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                             }
                             else
@@ -1191,14 +1201,14 @@
                                 }
                                 else
                                 {
-                                    getPointAndHeight(e, _select_junction1, out p, out z);                                  
-                                    var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p,z);
+                                    getPointAndHeight(e, _select_junction1, out p, out z);
+                                    var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p, z);
                                     if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
                                 }
-                                
+
 
                             }
-                            
+
                         }
                         break;
                 }
@@ -1466,8 +1476,11 @@
                     if (!isMouseMoved)
                     {
                         鍙抽敭_Menu.Show(this, e.Location);
+
                         杞崲涓篢oolStripMenuItem.Enabled = selectedNodes.Count > 0; //(selectedObjs.Count == 1);
                         鍒犻櫎ToolStripMenuItem.Enabled = selectedObjs.Count > 0;
+                        鍒犻櫎ToolStripMenuItem1.Enabled = selectedObjs.Count > 0;
+
                     }
 
                     if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption);
@@ -1508,7 +1521,7 @@
         IBaseViewModel GetObj_by_ScreenPoint(PointF clickedPoint, float DistLimit = 15f)
         {
             float minDist = float.MaxValue;
-           
+
             int minIndex = -1;
             bool isJunction = true;
             IBaseViewModel obj = null;
@@ -1557,9 +1570,9 @@
             float minDist = float.MaxValue;
 
             int minIndex = -1;
-       
+
             IBaseViewModel obj = null;
-            List < IBaseViewModel > objs = new List<IBaseViewModel>();
+            List<IBaseViewModel> objs = new List<IBaseViewModel>();
             for (int i = 0; i < _Nodes.Count; i++)
             {
                 var node = _Nodes[i] as NodeViewModel;
@@ -1588,7 +1601,7 @@
                 //float dist = Get_dist(clickedPoint, currentPoint);
                 if (dist < minDist && dist <= DistLimit)
                 {
-                    
+
 
                     objs.Add(link);
                 }
@@ -1694,10 +1707,10 @@
         }
         private void 榛樿瑙嗚ToolStripMenuItem_Click(object sender, EventArgs e)
         {
-       
+
 
             mapOption0 = mapOption.Copy();
-            
+
             InitCenter();
             RotationF = 45;
             Rotation = -45;
@@ -1820,8 +1833,8 @@
             {
                 _Template = new Template();
                 _Template.network = new MapViewNetWork();
-               
-                
+
+
                 //_Template.network.use_old = false;
                 // 鑾峰彇閫変腑鏂囦欢鐨勬枃浠惰矾寰�
                 string filePath = openFileDialog.FileName;
@@ -1911,7 +1924,7 @@
         #region 缁樺浘宸ュ叿
 
 
-        
+
         public void toolStripButton_鏂板缓鑺傜偣_Click(object sender, EventArgs e)
         {
             _mouseState = MouseState.鏂板鑺傜偣;
@@ -1922,6 +1935,55 @@
         {
             _mouseState = MouseState.鏃�;
             Cursor = Cursors.Default;
+            if (_isPainting)
+            {
+                _select_junction1 = null;
+                _isPainting = false;
+                SetMapInvalidate();
+            }
+            else if (_isDragging)
+            {
+                _isDragging = false;
+                SetMapInvalidate();
+            }
+            else if (_isPanning)
+            {
+                _isPanning = false;
+                SetMapInvalidate();
+            }
+            else if (_isRotating)
+            {
+                Rotation = Rotation0;
+                _isRotating = false;
+                SetMapInvalidate();
+            }
+            else if (_isMovingObject)
+            {
+                _NewNet.Clear();
+                _isMovingObject = false;
+                SetMapInvalidate();
+            }
+            else if (_mouseState != MouseState.鏃�)
+            {
+                _mouseState = MouseState.鏃�;
+                Cursor = Cursors.Default;
+            }
+            else if (_isInsertingObject)
+            {
+                _NewNet.Clear();
+                _isInsertingObject = false;
+                _OperaNode = null;
+                SetMapInvalidate();
+            }
+            else
+            {
+                _Nodes.ForEach(o => ((NodeViewModel)o).Selected = false);
+                _Links.ForEach(o => ((LinkViewModel)o).Selected = false);
+                selectedObjs.Clear();
+                SetMapInvalidate();
+
+
+            }
         }
 
         public void toolStripButton_鏂板缓绠$嚎_Click(object sender, EventArgs e)
@@ -1929,7 +1991,7 @@
             _mouseState = MouseState.鏂板绠$嚎;
             Cursor = Cursors.Cross;
         }
-        public void toolStripButton_鏂板缓绔嬬_Click(object sender,EventArgs e)
+        public void toolStripButton_鏂板缓绔嬬_Click(object sender, EventArgs e)
         {
             _mouseState = MouseState.鏂板绔嬬;
             Cursor = Cursors.Cross;
@@ -1952,7 +2014,7 @@
                     l.Add(_select_junction2);
                 }
 
-                if (_mouseState == MouseState.鏂板绠$嚎 || _mouseState==MouseState.鏂板绔嬬)
+                if (_mouseState == MouseState.鏂板绠$嚎 || _mouseState == MouseState.鏂板绔嬬)
                     l.Add(_Network.AddPipe(_select_junction1, _select_junction2));
                 else if (_mouseState == MouseState.鏂板缓闃�闂�)
                     l.Add(_Network.AddValve(_select_junction1, _select_junction2));
@@ -2073,7 +2135,7 @@
 
 
             }
-            if (e.KeyCode == Keys.Delete)
+            if (_IsEditMode && e.KeyCode == Keys.Delete)
             {
                 DeleteChoosedObj();
             }
@@ -2085,29 +2147,29 @@
                 SetMapInvalidate();
             }
 
-            if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control)
+            if (_IsEditMode && e.KeyCode == Keys.C && e.Modifiers == Keys.Control)
             {
                 澶嶅埗ToolStripMenuItem_Click(1, new EventArgs());
             }
-            if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
+            if (_IsEditMode && e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
             {
                 _ClickStartPos = Cursor.Position;
                 绮樿创ToolStripMenuItem1_Click(1, new EventArgs());
             }
-            if (e.KeyCode == Keys.D1 && e.Modifiers == Keys.Control)
+            if (_IsEditMode && e.KeyCode == Keys.D1 && e.Modifiers == Keys.Control)
             {
                 鍗楀寳瀵归綈ToolStripMenuItem_Click(1, new EventArgs());
 
             }
-            if (e.KeyCode == Keys.Oemtilde && e.Modifiers == Keys.Control)
+            if (_IsEditMode && e.KeyCode == Keys.Oemtilde && e.Modifiers == Keys.Control)
             {
                 涓滆タ瀵归綈ToolStripMenuItem_Click(1, new EventArgs());
             }
-            if (e.KeyCode == Keys.D2 && e.Modifiers == Keys.Control)
+            if (_IsEditMode && e.KeyCode == Keys.D2 && e.Modifiers == Keys.Control)
             {
                 绔栫洿瀵归綈ToolStripMenuItem_Click(1, new EventArgs());
             }
-            if (e.KeyCode == Keys.D3 && e.Modifiers == Keys.Control)
+            if (_IsEditMode && e.KeyCode == Keys.D3 && e.Modifiers == Keys.Control)
             {
                 鑷姩瀵归綈ToolStripMenuItem_Click(1, new EventArgs());
             }
@@ -2117,7 +2179,7 @@
 
         private void MapViewer_KeyPress(object sender, KeyPressEventArgs e)
         {
-            if (ctrlPressed && e.KeyChar == 'Z' - 64)
+            if (_IsEditMode && ctrlPressed && e.KeyChar == 'Z' - 64)
             {
                 // 鎵ц鐩稿簲鐨勬搷浣�
                 buttonUndo_Click(sender, e);
@@ -2126,7 +2188,7 @@
                 // 闃叉榛樿鎿嶄綔
                 e.Handled = true;
             }
-            if (ctrlPressed && e.KeyChar == 'Y' - 64)
+            if (_IsEditMode && ctrlPressed && e.KeyChar == 'Y' - 64)
             {
                 // 鎵ц鐩稿簲鐨勬搷浣�
                 buttonRedo_Click(sender, e);
@@ -2147,14 +2209,14 @@
         }
         private void MapViewer_PreKeyPress(object sender, PreviewKeyDownEventArgs e)
         {
-            if (e.Control && e.KeyCode == Keys.Z)
+            if (_IsEditMode && e.Control && e.KeyCode == Keys.Z)
             {
                 ctrlPressed = true;
                 // 闃叉榛樿鎿嶄綔
                 e.IsInputKey = true;
 
             }
-            if (e.Control && e.KeyCode == Keys.Y)
+            if (_IsEditMode && e.Control && e.KeyCode == Keys.Y)
             {
                 ctrlPressed = true;
                 // 闃叉榛樿鎿嶄綔
@@ -2302,7 +2364,7 @@
         {
             _IsEditMode = !_IsEditMode;
             //toolStripComboBox_娴忚妯″紡.Text = isEditMode ? "缂栬緫妯″紡" : "娴忚妯″紡";
-            LoadData(true);
+            //LoadData(true);
         }
 
         private void 娴忚妯″紡ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -2310,7 +2372,7 @@
             var obj = sender as ToolStripItem;
             _IsEditMode = obj.Text == "缂栬緫妯″紡";
             //toolStripComboBox_娴忚妯″紡.Text = isEditMode ? "缂栬緫妯″紡" : "娴忚妯″紡";
-            LoadData(true);
+            //LoadData(true);
         }
         #endregion
 
@@ -2464,7 +2526,7 @@
 
         private void 缂╂斁ToolStripMenuItem_Click(object sender, EventArgs e)
         {
-          
+
             var objs = GlobalObject.PropertyForm.selectionSet.selectedObjects;
             var list = objs.FindAll(o => o is NodeViewModel); //GlobalObject.PropertyForm.listBox1.SelectedItems;
             if (list.Count <= 0) return;
@@ -2538,12 +2600,12 @@
         }
 
 
-        
+
 
         public void toolStripButton_璁$畻_Click(object sender, EventArgs e)
         {
             //LoadData();
-            _Network.Calc(_Template.FullPath, GlobalPath.configPath+ "config_calc.wdb");
+            _Network.Calc(_Template.FullPath, GlobalPath.configPath + "config_calc.wdb");
         }
 
         public void 鍏抽榾鎼滅储ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -2819,7 +2881,7 @@
 
         //    }
         //}
-        private void TraversePipeNetworkALL(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null,int direction=0)
+        private void TraversePipeNetworkALL(LinkViewModel startLink, HashSet<NodeViewModel> visitedNodes = null, int direction = 0)
         {
 
             Queue<LinkViewModel> queue = new Queue<LinkViewModel>();
@@ -3204,6 +3266,59 @@
             }
         }
 
+        /// <summary>
+        /// 鎵归噺涓�閿敓鎴愭ゼ灞傛ā鍨�
+        /// </summary>
+        public void BatchInsertNet(Template temp)
+        {
+            var nodes = _Nodes.Where(c => c.Elev > 0).Select(node => (NodeViewModel)node).ToList();
+            _undoOldValue = new PointF3D(0, 0, 0);
+            _OperaNode = temp.network.Nodes.Find(node => node.ID == temp.Node1) as NodeViewModel;
+            //foreach (var item in nodes)
+            if (nodes.Any())
+            {
+                for (var i = 0; i < nodes.Count(); i++)
+                {
+                    var net = temp.network.DeepCopy();
+
+                    float dx, dy, dz;
+                    var p1 = (PointF3D)_undoOldValue;
+                    var p2 = nodes[i].Position3D;
+                    var dd = temp.OffSet;
+                    dx = p2.X - p1.X;
+                    dy = p2.Y - p1.Y;
+                    dz = p2.Z - p1.Z;
+
+                    net.Nodes.ForEach(n => { ((NodeViewModel)n).Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); });
+
+                    var list = _Network.Add(net);
+
+                    //var j = _Network.AddPipe(nodes[i], _OperaNode);
+                    //j.Length = 0.0001f;
+                    //list.Add(j);
+                    _NewNet.Clear();
+
+                    _Network.BuildRelation();
+
+                    selectedObjs.ForEach(o => o.Selected = false);
+                    selectedObjs.Clear();
+
+                    //list.ForEach(m => m.Selected = true);
+                    //selectedObjs.AddRange(list);
+
+                    MapObjectExtensions.AddCommand(_Network, "Add", null, list);
+                }
+
+                _OperaNode = null;
+
+                //_OperaNode = null;
+                //_Network.Nodes.AddRange(net.Nodes);
+                //_Network.Links.AddRange(net.Links);
+
+                SetMapInvalidate();
+            }
+        }
+
         private void 浠ュ綋鍓嶈瑙掑彟瀛楾oolStripMenuItem_Click(object sender, EventArgs e)
         {
             if (_Template == null) return;
@@ -3263,7 +3378,7 @@
             {
 
                 var objs = selectedObjs.FindAll(o => o is LinkViewModel).Select(o => o as LinkViewModel).ToList();
-                if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o=>objs.AddRange(o.Links.Select(l=>l as LinkViewModel).ToList()));
+                if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o => objs.AddRange(o.Links.Select(l => l as LinkViewModel).ToList()));
                 //objs鍘绘帀閲嶅鐨勫厓绱�
                 objs = objs.Distinct().ToList();
                 var visitedNodes = new HashSet<NodeViewModel>();
@@ -3280,21 +3395,21 @@
             {
 
                 var objs = selectedObjs.FindAll(o => o is LinkViewModel).Select(o => o as LinkViewModel).ToList();
-                if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o => 
+                if (objs.Count == 0) selectedObjs.FindAll(o => o is NodeViewModel).Select(o => o as NodeViewModel).ToList().ForEach(o =>
                 {
-                    objs.AddRange(o.Links.Select(oo => oo as LinkViewModel).ToList().FindAll(oo=>oo.StartNode==o?oo.EN_FLOW>0:oo.EN_FLOW<0));
+                    objs.AddRange(o.Links.Select(oo => oo as LinkViewModel).ToList().FindAll(oo => oo.StartNode == o ? oo.EN_FLOW > 0 : oo.EN_FLOW < 0));
                 });
                 //objs鍘绘帀閲嶅鐨勫厓绱�
                 objs = objs.Distinct().ToList();
                 var visitedNodes = new HashSet<NodeViewModel>();
-                objs.ForEach(o => TraversePipeNetworkALL(o, visitedNodes,1));
+                objs.ForEach(o => TraversePipeNetworkALL(o, visitedNodes, 1));
                 this.SetMapInvalidate();
 
             }
         }
         public void 澶嶅埗ToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            if(hoveredObjs.Count<=0 || !(hoveredObjs[0] is NodeViewModel))
+            if (hoveredObjs.Count <= 0 || !(hoveredObjs[0] is NodeViewModel))
             {
                 MessageBox.Show("璇峰皢榧犳爣鎮仠鍦ㄤ竴涓妭鐐瑰璞′笂,浣滀负鍩哄噯鐐�");
                 return;
@@ -3304,7 +3419,7 @@
                 MessageBox.Show("璇烽�夋嫨瑕佸鍒剁殑瀵硅薄");
                 return;
             }
-           
+
             _OperaNode = hoveredObjs[0] as NodeViewModel;
 
             MapViewNetWork net = new MapViewNetWork();
@@ -3329,14 +3444,14 @@
         public void 绮樿创ToolStripMenuItem1_Click(object sender, EventArgs e)
         {
             {
-                
+
                 var net = new MapViewNetWork();
                 string json = Clipboard.GetText();
                 net.ReadFromJson(json);
                 if (net.StartPoint == null) return;
                 string SID = net.StartPoint.ID;
-                net.StartPoint=net.Nodes.Find(n => n.ID == SID);
-                PointF minPoint = new PointF(net.StartPoint.X, net.StartPoint.Y);
+                net.StartPoint = net.Nodes.Find(n => n.ID == SID);
+                PointF3D minPoint = net.StartPoint.Position3D;// new PointF(net.StartPoint.X, net.StartPoint.Y);
                 Point controlLocation = this.PointToScreen(new Point(0, 0));
                 int offsetX = Cursor.Position.X - controlLocation.X;
                 int offsetY = Cursor.Position.Y - controlLocation.Y;
@@ -3345,22 +3460,23 @@
                 net.BuildRelation();
                 //var basePoint = MapPointToWorldPoint(ScreenToMap(position, net.StartPoint.Elev), net.StartPoint.Elev);
                 var mPos = _MousePosition;
-                if (hoveredObjs.Count>0 && hoveredObjs[0] is NodeViewModel minNode) 
+                if (hoveredObjs.Count > 0 && hoveredObjs[0] is NodeViewModel minNode)
                 {
-                   
-                    var basePoint = minNode.Position;
+
+                    var basePoint = minNode.Position3D;
                     net.Nodes.ForEach(obj =>
                     {
                         obj.X = obj.X + basePoint.X - minPoint.X;
                         obj.Y = obj.Y + basePoint.Y - minPoint.Y;
+                        obj.Elev = obj.Elev + basePoint.Z - minPoint.Z;
                     });
-                    
+
                     selectedObjs.ForEach(o => o.Selected = false);
                     selectedObjs.Clear();
                     selectedObjs.AddRange(net.Nodes.Select(n => (NodeViewModel)n));
                     selectedObjs.AddRange(net.Links.ViewLinks);
-                    var list = _Network.Add(net,null,false,minNode);
-                    
+                    var list = _Network.Add(net, null, false, minNode);
+                    net.BuildRelation();
                     //list.Add(_Network.AddPipe(Snode, minNode));
                     MapObjectExtensions.AddCommand(_Network, "Add", null, list);
                     SetMapInvalidate();
@@ -3378,11 +3494,12 @@
                     selectedObjs.AddRange(net.Nodes.Select(n => (NodeViewModel)n));
                     selectedObjs.AddRange(net.Links.ViewLinks);
                     var list = _Network.Add(net);
+                    net.BuildRelation();
                     MapObjectExtensions.AddCommand(_Network, "Add", null, list);
                     SetMapInvalidate();
                 }
 
-               
+
             }
         }
         private void 澧為噺淇濆瓨ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -3409,7 +3526,7 @@
         }
         private void 璁句负鍏抽棴ToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            selectedObjs.ForEach(obj => { if (obj is LinkViewModel link) link.Status =Hydro.Core.ObjectEnum. StatusType.CLOSED; });
+            selectedObjs.ForEach(obj => { if (obj is LinkViewModel link) link.Status = Hydro.Core.ObjectEnum.StatusType.CLOSED; });
             SetMapInvalidate();
         }
         private void 鏄剧ず鍏ㄩ儴妤煎眰ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -3723,11 +3840,11 @@
                 string tagstring = i.ToString() + "妤�";
                 if (tags.Contains(tagstring))
                 {
-                    var item=ToolStripMenuItem_Floor.DropDownItems.Add(i.ToString() + "妤�");
+                    var item = ToolStripMenuItem_Floor.DropDownItems.Add(i.ToString() + "妤�");
                     item.Click += (oo, ee) =>
                     {
-                        
-                        
+
+
                         mapobjects.ForEach(o =>
                         {
                             if (o.Tags.Contains(tagstring))
@@ -3766,30 +3883,30 @@
         {
             _isShowDirection = !_isShowDirection;
         }
-        bool _isShowDirection=false;
+        bool _isShowDirection = false;
         private void 棰滆壊鍒嗙骇绠$悊ToolStripMenuItem_Click(object sender, EventArgs e)
         {
             Form_Colour form_Colour = new Form_Colour(_Template.Colours);
             form_Colour.Show(this);
         }
-       
-		private bool __needpaintall=false;
-        
 
-   
+        private bool __needpaintall = false;
+
+
+
         private void cb_Link_Colour_SelectedIndexChanged(object sender, EventArgs e)
         {
             if (_Template == null) return;
-            
-            var type = cb_Link_Colour.SelectedItem==null?ColourType.绠$嚎娴侀噺:(ColourType)cb_Link_Colour.SelectedItem;
+
+            var type = cb_Link_Colour.SelectedItem == null ? ColourType.绠$嚎娴侀噺 : (ColourType)cb_Link_Colour.SelectedItem;
             mapOption.ColourLink = type;
             this.SetMapInvalidate();
         }
         private void cb_Node_Colour_SelectedIndexChanged(object sender, EventArgs e)
         {
             if (_Template == null) return;
-   
-            var type = cb_Node_Colour.SelectedItem==null?ColourType.鑺傜偣鑷敱鍘嬪姏:(ColourType)cb_Node_Colour.SelectedItem;
+
+            var type = cb_Node_Colour.SelectedItem == null ? ColourType.鑺傜偣鑷敱鍘嬪姏 : (ColourType)cb_Node_Colour.SelectedItem;
             mapOption.ColourNode = type;
             this.SetMapInvalidate();
         }
@@ -3802,7 +3919,7 @@
 
         private void 妤煎眰绠$悊ToolStripMenuItem_Click(object sender, EventArgs e)
         {
-            if (_Template.Regions==null)
+            if (_Template.Regions == null)
             {
                 _Template.Regions = new List<TRegion>();
             }
@@ -3810,9 +3927,9 @@
             form_EditFloors.Show(this);
         }
 
-       
 
-        
+
+
         #endregion
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3