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