From 7f3f33c7af8aa852af4029d0d6070c0228e337ba Mon Sep 17 00:00:00 2001
From: cloudflight <cloudflight@126.com>
Date: 星期三, 08 五月 2024 21:09:51 +0800
Subject: [PATCH] rq

---
 WinfrmUI/Hydro.MapUI/Map/MapViewer.cs |  175 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 145 insertions(+), 30 deletions(-)

diff --git a/WinfrmUI/Hydro.MapUI/Map/MapViewer.cs b/WinfrmUI/Hydro.MapUI/Map/MapViewer.cs
index 42e1233..0e1d8b5 100644
--- a/WinfrmUI/Hydro.MapUI/Map/MapViewer.cs
+++ b/WinfrmUI/Hydro.MapUI/Map/MapViewer.cs
@@ -132,6 +132,10 @@
             BackColor = Color.Transparent;
 
         }
+        public void SetEditMode(bool isEditMode)
+        {
+            _IsEditMode= isEditMode;
+        }   
         private void MapViewer_Load(object sender, EventArgs e)
         {
             this.panel1.Visible = _showToolBar;
@@ -623,8 +627,9 @@
                 }
 
                 //绉诲姩
-                if (selectedObjs.Count >= 1) //&& selectedObjs[0].isNode())
+                if (_IsEditMode && selectedObjs.Count >= 1) //&& selectedObjs[0].isNode())
                 {
+
                     List<NodeViewModel> nodes = selectedNodes;
                     foreach (NodeViewModel node in nodes)
                     {
@@ -1074,6 +1079,10 @@
                     List<PointF3D> newPositons = selectedNodes.Select(n => n.Position3D).ToList();
                     List<PointF3D> oldPositons = newPositons.Select(n => new PointF3D(n.X - dx, n.Y - dy, n.Z - dz)).ToList();
                     MapObjectExtensions.AddCommand(selectedNodes, "Position3D", oldPositons, newPositons);
+                    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();
                 }
@@ -1177,9 +1186,21 @@
                             }
                             else
                             {
-                                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);
+                                if (mapOption.IsOrtho)
+                                {
+                                    var wPos = GetZZWorldPoint(_select_junction1.Position3D, _MousePosition, new Vector3(1, 1, 0));
+                                    //getPointAndHeight(e, _select_junction1, out p, out z);
+                                    p = new PointF(wPos.X, wPos.Y);
+                                    var l = AddLink(new PointF(e.X, e.Y), isdoubleClick, p, wPos.Z);
+                                    if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l);
+                                }
+                                else
+                                {
+                                    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);
+                                }
+                                
 
                             }
                             
@@ -1450,8 +1471,21 @@
                     if (!isMouseMoved)
                     {
                         鍙抽敭_Menu.Show(this, e.Location);
-                        杞崲涓篢oolStripMenuItem.Enabled = selectedNodes.Count > 0; //(selectedObjs.Count == 1);
+                        
+                        杞崲涓篢oolStripMenuItem.Enabled = _IsEditMode && selectedNodes.Count > 0; //(selectedObjs.Count == 1);
+                        鍒犻櫎ToolStripMenuItem.Visible = _IsEditMode;
+                        鍒犻櫎ToolStripMenuItem1.Visible = _IsEditMode;
                         鍒犻櫎ToolStripMenuItem.Enabled = selectedObjs.Count > 0;
+                        鍒犻櫎ToolStripMenuItem1.Enabled = selectedObjs.Count > 0;
+                        澶嶅埗ToolStripMenuItem.Visible = _IsEditMode;
+                        澶嶅埗ToolStripMenuItem1.Visible = _IsEditMode;
+                        绮樿创ToolStripMenuItem.Visible = _IsEditMode;
+                        绮樿创ToolStripMenuItem1.Visible = _IsEditMode; 
+                        璁剧疆闀垮害ToolStripMenuItem.Visible = _IsEditMode;
+                        璁句负鍏抽棴ToolStripMenuItem.Visible = _IsEditMode;
+                        璁句负绔嬬鐐筎oolStripMenuItem.Visible = _IsEditMode;
+                        瀵归綈ToolStripMenuItem.Visible = _IsEditMode;
+                        瀵归綈ToolStripMenuItem1.Visible = _IsEditMode;
                     }
 
                     if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption);
@@ -1906,6 +1940,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)
@@ -2057,7 +2140,7 @@
 
 
             }
-            if (e.KeyCode == Keys.Delete)
+            if (_IsEditMode && e.KeyCode == Keys.Delete)
             {
                 DeleteChoosedObj();
             }
@@ -2069,29 +2152,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());
             }
@@ -2101,7 +2184,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);
@@ -2110,7 +2193,7 @@
                 // 闃叉榛樿鎿嶄綔
                 e.Handled = true;
             }
-            if (ctrlPressed && e.KeyChar == 'Y' - 64)
+            if (_IsEditMode && ctrlPressed && e.KeyChar == 'Y' - 64)
             {
                 // 鎵ц鐩稿簲鐨勬搷浣�
                 buttonRedo_Click(sender, e);
@@ -2131,14 +2214,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;
                 // 闃叉榛樿鎿嶄綔
@@ -3316,6 +3399,9 @@
                 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);
                 Point controlLocation = this.PointToScreen(new Point(0, 0));
                 int offsetX = Cursor.Position.X - controlLocation.X;
@@ -3323,19 +3409,46 @@
                 var position = new Point(offsetX, offsetY);
 
                 net.BuildRelation();
-                var basePoint = MapPointToWorldPoint(ScreenToMap(position, net.StartPoint.Elev), net.StartPoint.Elev);
-                net.Nodes.ForEach(obj =>
+                //var basePoint = MapPointToWorldPoint(ScreenToMap(position, net.StartPoint.Elev), net.StartPoint.Elev);
+                var mPos = _MousePosition;
+                if (hoveredObjs.Count>0 && hoveredObjs[0] is NodeViewModel minNode) 
                 {
-                    obj.X = obj.X + basePoint.X - minPoint.X;
-                    obj.Y = obj.Y + basePoint.Y - minPoint.Y;
-                });
-                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);
-                MapObjectExtensions.AddCommand(_Network, "Add", null, list);
-                SetMapInvalidate();
+                   
+                    var basePoint = minNode.Position;
+                    net.Nodes.ForEach(obj =>
+                    {
+                        obj.X = obj.X + basePoint.X - minPoint.X;
+                        obj.Y = obj.Y + basePoint.Y - minPoint.Y;
+                    });
+                    
+                    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);
+                    
+                    //list.Add(_Network.AddPipe(Snode, minNode));
+                    MapObjectExtensions.AddCommand(_Network, "Add", null, list);
+                    SetMapInvalidate();
+                }
+                else
+                {
+                    var basePoint = MapPointToWorldPoint(_MousePosition, net.StartPoint.Elev);
+                    net.Nodes.ForEach(obj =>
+                    {
+                        obj.X = obj.X + basePoint.X - minPoint.X;
+                        obj.Y = obj.Y + basePoint.Y - minPoint.Y;
+                    });
+                    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);
+                    MapObjectExtensions.AddCommand(_Network, "Add", null, list);
+                    SetMapInvalidate();
+                }
+
+               
             }
         }
         private void 澧為噺淇濆瓨ToolStripMenuItem_Click(object sender, EventArgs e)
@@ -3763,9 +3876,11 @@
             form_EditFloors.Show(this);
         }
 
-       
+
+
+
+        #endregion
 
         
-        #endregion
     }
 }
\ No newline at end of file

--
Gitblit v1.9.3