| | |
| | | //using CloudWaterNetwork.Magnifier; |
| | | using CommonBase; |
| | | using Hydro.CommonBase; |
| | | //using ConfigApp; |
| | | //using DevExpress.Diagram.Core.Layout; |
| | | //using DevExpress.DirectX.NativeInterop.Direct2D; |
| | |
| | | using System.Numerics; |
| | | using System.Reflection; |
| | | using System.Runtime.CompilerServices; |
| | | using System.Runtime.InteropServices.WindowsRuntime; |
| | | using System.Runtime.Remoting.Metadata; |
| | | using System.Security.Cryptography; |
| | | using System.Text; |
| | |
| | | void Draw(Graphics bufferG, Template template) |
| | | { |
| | | if (template == null) return; |
| | | var _Nodes = template.network.Nodes; |
| | | var _Links = template.network.Links; |
| | | var _Nodes = template.network.Nodes.ViewNodes; |
| | | var _Links = template.network.Links.ViewLinks; |
| | | |
| | | var Cpoints = getCurclePoints(64).ToList(); |
| | | |
| | |
| | | |
| | | Pen penChoosed = new Pen(Color.Purple, 5 * r); |
| | | Pen pen_valveChoosed = new Pen(Color.Red, 5 * r); |
| | | |
| | | Pen penClosed = new Pen(Color.OrangeRed, 2 * r); |
| | | |
| | | |
| | |
| | | { |
| | | if (link.Selected || _ShowValve) |
| | | { |
| | | //var p1 = WorldPointToMapPoint(link.StartNode); |
| | | //var p2 = WorldPointToMapPoint(link.EndNode); |
| | | //var c = new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); |
| | | //bufferG.DrawLines(link.Selected ? valveChoosed : pen, new PointF[] { p1, p2 }); |
| | | //PointF[] points = new PointF[] { |
| | | // getRotatePoint(c.X - 3 * r, c.Y + 3 * r,c,p1,p2), |
| | | // getRotatePoint(c.X - 3 * r, c.Y - 3 * r,c,p1,p2), |
| | | // getRotatePoint(c.X + 3 * r, c.Y +0 * r,c,p1,p2), |
| | | // getRotatePoint(c.X - 3 * r, c.Y + 3 * r,c,p1,p2), |
| | | // //getRotatePoint(c.X - 3 * r, c.Y + 3 * r,c,p1,p2), |
| | | |
| | | //}; |
| | | //bufferG.DrawLines(link.Selected ? valveChoosed : pen, points); |
| | | |
| | | |
| | | |
| | | |
| | | var c = new PointF((p1.X + p2.X) / 2, (p1.Y + p2.Y) / 2); |
| | | //bufferG.DrawLine(link.Selected ? pen_valveChoosed : pen, p1, p2); |
| | |
| | | // getRotatePoint(c.X + radius - radius, c.Y + radius, c, p1, p2), |
| | | // getRotatePoint(c.X - radius - radius, c.Y + radius, c, p1, p2), |
| | | // getRotatePoint(c.X - radius - radius, c.Y - radius, c, p1, p2), |
| | | |
| | | //}; |
| | | List<PointF> p = new List<PointF>(); |
| | | Cpoints.ForEach(cp => p.Add(getRotatePoint(c.X + cp.X * radius - radius, c.Y + cp.Y * radius, c, p1, p2))); |
| | |
| | | _isInsertingObject = true; |
| | | _newTemplate = temp; |
| | | _undoOldValue = new PointF3D(0, 0, 0); |
| | | _OperaNode = temp.network.Nodes.Find(node => node.ID == temp.Node1); |
| | | _OperaNode = temp.network.Nodes.Find(node => node.ID == temp.Node1) as NodeViewModel; |
| | | //if (_OperaNode == null) _OperaNode=_NewNet.Nodes[0]; |
| | | } |
| | | |
| | |
| | | bool isMouseMoved = Get_dist(_ClickStartPos, new PointF(e.X, e.Y)) > 10; |
| | | bool isdoubleClick = (DateTime.Now - _lastMouseUp).TotalMilliseconds <= doubleClick_Delay; |
| | | _lastMouseUp = DateTime.Now; |
| | | if (e.Button == MouseButtons.Middle || e.Button == MouseButtons.XButton2) |
| | | if /*框选放大*/(ModifierKeys == Keys.Control && (e.Button == MouseButtons.Middle || e.Button == MouseButtons.XButton2)) |
| | | { |
| | | if (ModifierKeys == Keys.Control) |
| | | { |
| | | _isDragging = false; |
| | | _isDragging = false; |
| | | |
| | | this.Cursor = _lastCursor; |
| | | this.Cursor = _lastCursor; |
| | | |
| | | mapOption0 = mapOption; |
| | | var _lastMousePosition = DragStartPos; |
| | | mapOption0 = mapOption; |
| | | var _lastMousePosition = DragStartPos; |
| | | |
| | | List<IBaseViewModel> objs = new List<IBaseViewModel>(); |
| | | // 绘制矩形 |
| | | var start = new Point((int)Math.Min(mousePosition.X, _lastMousePosition.X), (int)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new Size((int)Math.Abs(_lastMousePosition.X - mousePosition.X), (int)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new Rectangle(start, size); |
| | | List<IBaseViewModel> objs = new List<IBaseViewModel>(); |
| | | // 绘制矩形 |
| | | var start = new Point((int)Math.Min(mousePosition.X, _lastMousePosition.X), (int)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new Size((int)Math.Abs(_lastMousePosition.X - mousePosition.X), (int)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new Rectangle(start, size); |
| | | |
| | | var new_center = MapPointToWorldPoint(new PointF(start.X + size.Width / 2, start.Y + size.Height / 2)); |
| | | var new_center = MapPointToWorldPoint(new PointF(start.X + size.Width / 2, start.Y + size.Height / 2)); |
| | | |
| | | this.MapCenter = new_center; |
| | | this.zoom = Math.Max(1.0f * Width / size.Width, 1.0f * Height / size.Height); |
| | | this.MapCenter = new_center; |
| | | this.zoom = Math.Max(1.0f * Width / size.Width, 1.0f * Height / size.Height); |
| | | |
| | | if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption); |
| | | if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption); |
| | | |
| | | label_center.Text = $"center:({MapCenter.X.ToString("0.000")} ,{MapCenter.Y.ToString("0.000")})"; |
| | | label_zoom.Text = $"Zoom:{zoom.ToString("0.000")}"; |
| | | Invalidate(); |
| | | } |
| | | if (ModifierKeys == Keys.Shift) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | this.Cursor = _lastCursor; |
| | | |
| | | |
| | | var _lastMousePosition = DragStartPos; |
| | | |
| | | List<IBaseViewModel> objs = new List<IBaseViewModel>(); |
| | | // 绘制矩形 |
| | | var start = new Point((int)Math.Min(mousePosition.X, _lastMousePosition.X), (int)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new Size((int)Math.Abs(_lastMousePosition.X - mousePosition.X), (int)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new Rectangle(start, size); |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | PointF p = WorldPointToMapPoint(_Nodes[i]); |
| | | if (rectangle0.Contains(p.ToPoint())) |
| | | { |
| | | //_Nodes[i].Selected = true; |
| | | //selectedObjs.Add(_Nodes[i]); |
| | | objs.Add(_Nodes[i]); |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | //PointF p = GetPointF(Pipes[i]); |
| | | if (rectangle0.Contains(_Links[i].Position.ToPoint())) |
| | | { |
| | | //_Links[i].Selected = true; |
| | | //selectedObjs.Add(_Links[i]); |
| | | objs.Add(_Links[i]); |
| | | } |
| | | } |
| | | Form_Magnifier fr = new Form_Magnifier(objs); |
| | | |
| | | fr.ShowDialog(); |
| | | } |
| | | else |
| | | { |
| | | if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption); |
| | | this.Cursor = _lastCursor; |
| | | _isPanning = false; |
| | | } |
| | | |
| | | label_center.Text = $"center:({MapCenter.X.ToString("0.000")} ,{MapCenter.Y.ToString("0.000")})"; |
| | | label_zoom.Text = $"Zoom:{zoom.ToString("0.000")}"; |
| | | Invalidate(); |
| | | return; |
| | | } |
| | | else if (e.Button == MouseButtons.Left && _isSettingBackGroundPictur == true) |
| | | if /*放大镜*/(ModifierKeys == Keys.Shift && (e.Button == MouseButtons.Middle || e.Button == MouseButtons.XButton2)) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | this.Cursor = _lastCursor; |
| | | |
| | | |
| | | var _lastMousePosition = DragStartPos; |
| | | |
| | | List<IBaseViewModel> objs = new List<IBaseViewModel>(); |
| | | // 绘制矩形 |
| | | var start = new Point((int)Math.Min(mousePosition.X, _lastMousePosition.X), (int)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new Size((int)Math.Abs(_lastMousePosition.X - mousePosition.X), (int)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new Rectangle(start, size); |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | var node = _Nodes[i] as NodeViewModel; |
| | | PointF p = WorldPointToMapPoint(node); |
| | | if (rectangle0.Contains(p.ToPoint())) |
| | | { |
| | | //_Nodes[i].Selected = true; |
| | | //selectedObjs.Add(_Nodes[i]); |
| | | objs.Add(node); |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | var link = _Links[i] as LinkViewModel; |
| | | //PointF p = GetPointF(Pipes[i]); |
| | | if (rectangle0.Contains(link.Position.ToPoint())) |
| | | { |
| | | //_Links[i].Selected = true; |
| | | //selectedObjs.Add(_Links[i]); |
| | | objs.Add(link); |
| | | } |
| | | } |
| | | Form_Magnifier fr = new Form_Magnifier(objs); |
| | | |
| | | fr.ShowDialog(); |
| | | return; |
| | | } |
| | | if /*平移视角*/(ModifierKeys == Keys.None && (e.Button == MouseButtons.Middle || e.Button == MouseButtons.XButton2)) |
| | | { |
| | | if (recordView) MapObjectExtensions.AddCommand(mapOption, "Map", mapOption0, mapOption); |
| | | this.Cursor = _lastCursor; |
| | | _isPanning = false; |
| | | return; |
| | | } |
| | | if /*设置背景*/(e.Button == MouseButtons.Left && _isSettingBackGroundPictur) |
| | | { |
| | | _Template.BackGroundPoint1 = BackGroudPicLeftPos; |
| | | _Template.BackGroundPoint2 = MapPointToWorldPoint(mousePosition, _Template.BackGroundElev); |
| | |
| | | mapOption.isShowPic = true; |
| | | this.Cursor = _lastCursor; |
| | | Invalidate(); |
| | | return; |
| | | } |
| | | else if (e.Button == MouseButtons.Left) |
| | | if /*插入结构*/(e.Button == MouseButtons.Left && _isInsertingObject) |
| | | { |
| | | if (_isInsertingObject) |
| | | var net = _newTemplate.network; |
| | | List<NodeViewModel> nodes = _Nodes.Select(node => (NodeViewModel)node).ToList(); |
| | | float minDist = 100f; |
| | | NodeViewModel minNode = null; |
| | | foreach (NodeViewModel node in nodes) |
| | | { |
| | | var net = _newTemplate.network; |
| | | //_OperaNode = net.EndPoint; |
| | | //_OperaNode = _NewNet.Nodes.Find(node => node.ID == temp.Node2); |
| | | //if (_OperaNode == null) _OperaNode = _NewNet.Nodes[0]; |
| | | //PointF minPoint = new PointF(net.StartPoint.X, net.StartPoint.Y); |
| | | List<NodeViewModel> nodes = _Nodes; |
| | | float minDist = 100f; |
| | | NodeViewModel minNode = null; |
| | | foreach (NodeViewModel node in nodes) |
| | | |
| | | |
| | | PointF mapPos = WorldPointToMapPoint(node); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float currentDist = 0; |
| | | if (node != _OperaNode && (currentDist = Get_dist(new PointF(e.X, e.Y), currentPoint)) < 15f) |
| | | { |
| | | |
| | | |
| | | PointF mapPos = WorldPointToMapPoint(node); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float currentDist = 0; |
| | | if (node != _OperaNode && (currentDist = Get_dist(new PointF(e.X, e.Y), currentPoint)) < 15f) |
| | | { |
| | | if (currentDist < minDist) currentDist = minDist; |
| | | minNode = node; |
| | | break; |
| | | } |
| | | } |
| | | float dx, dy, dz; |
| | | |
| | | if (ModifierKeys != Keys.Alt && minNode != null) |
| | | { |
| | | |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = minNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | dx = p2.X - p1.X; |
| | | dy = p2.Y - p1.Y; |
| | | dz = p2.Z - p1.Z; |
| | | |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | _NewNet.Clear(); |
| | | _OperaNode = null; |
| | | _isInsertingObject = false; |
| | | this.Invalidate(); |
| | | return; |
| | | |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = _OperaNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | dx = dd.X; //p2.X - p1.X; |
| | | dy = dd.Y;// p2.Y - p1.Y; |
| | | dz = dd.Z;// p2.Z - p1.Z; |
| | | |
| | | } |
| | | |
| | | |
| | | net.Nodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | |
| | | var list = _Network.Add(net); |
| | | |
| | | var j = _Network.AddPipe(minNode, _OperaNode); |
| | | j.Length = 0.0001f; |
| | | list.Add(j); |
| | | _OperaNode = null; |
| | | _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); |
| | | _isInsertingObject = false; |
| | | |
| | | //_OperaNode = null; |
| | | //_Network.Nodes.AddRange(net.Nodes); |
| | | //_Network.Links.AddRange(net.Links); |
| | | Invalidate(); |
| | | } |
| | | else if (_isDrawingPolygon) |
| | | { |
| | | if (ModifierKeys != Keys.Shift) |
| | | { |
| | | _isDrawingPolygon = false; |
| | | if (polygonPoints.Count >= 3) |
| | | { |
| | | _Nodes.ForEach(n => |
| | | { |
| | | if (IsPointInPolygon(WorldPointToMapPoint(n), polygonPoints)) |
| | | { |
| | | selectedObjs.Add(n); |
| | | n.Selected = true; |
| | | } |
| | | }); |
| | | _Links.ForEach(n => |
| | | { |
| | | if (IsPointInPolygon(WorldPointToMapPoint(n.Position, n.Elev), polygonPoints)) |
| | | { |
| | | selectedObjs.Add(n); |
| | | n.Selected = true; |
| | | } |
| | | }); |
| | | |
| | | } |
| | | Invalidate(); |
| | | // 结束绘制多边形 |
| | | if (currentDist < minDist) currentDist = minDist; |
| | | minNode = node; |
| | | break; |
| | | } |
| | | } |
| | | else if (_isMovingObject) |
| | | { |
| | | if (isMouseMoved) |
| | | { |
| | | List<NodeViewModel> nodes = _Nodes; |
| | | float minDist = 100f; |
| | | NodeViewModel minNode = null; |
| | | foreach (NodeViewModel node in nodes) |
| | | { |
| | | float dx, dy, dz; |
| | | |
| | | |
| | | PointF mapPos = WorldPointToMapPoint(node); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float currentDist = 0; |
| | | if (node != _OperaNode && (currentDist = Get_dist(new PointF(e.X, e.Y), currentPoint)) < 15f) |
| | | { |
| | | if (currentDist < minDist) currentDist = minDist; |
| | | minNode = node; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | if (ModifierKeys != Keys.Alt && minNode != null) |
| | | { |
| | | _isMovingObject = false; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = minNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | var dx = p2.X - p1.X; |
| | | var dy = p2.Y - p1.Y; |
| | | var dz = p2.Z - p1.Z; |
| | | selectedNodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | 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); |
| | | _OperaNode = null; |
| | | _NewNet.Clear(); |
| | | } |
| | | else |
| | | { |
| | | _isMovingObject = false; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = _OperaNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | var dx = dd.X; //p2.X - p1.X; |
| | | var dy = dd.Y;// p2.Y - p1.Y; |
| | | var dz = dd.Z;// p2.Z - p1.Z; |
| | | selectedNodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | 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); |
| | | _OperaNode = null; |
| | | _NewNet.Clear(); |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | _isMovingObject = false; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = _OperaNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | var dx = dd.X; //p2.X - p1.X; |
| | | var dy = dd.Y;// p2.Y - p1.Y; |
| | | var dz = dd.Z;// p2.Z - p1.Z; |
| | | //selectedNodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | //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); |
| | | _OperaNode = null; |
| | | _NewNet.Clear(); |
| | | } |
| | | |
| | | |
| | | } |
| | | else if (_mouseState != MouseState.无) |
| | | { |
| | | PointF p; |
| | | float z; |
| | | NodeViewModel n; |
| | | |
| | | switch (_mouseState) |
| | | { |
| | | case MouseState.新增节点: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddJunction(p, z); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新建水表: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddMeter(p); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新建水库: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddReservoir(p); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新建水池: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddTank(p); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新增管线: |
| | | case MouseState.新建水泵: |
| | | case MouseState.新建阀门: |
| | | case MouseState.新建重复器: |
| | | if (_select_junction1 == null) |
| | | { |
| | | getPointAndHeight(e, out p, out z); |
| | | Set_junction1(e); |
| | | } |
| | | else |
| | | { |
| | | getPointAndHeight(e, _select_junction1, out p, out z); |
| | | var l = AddLink(e, isdoubleClick, p, z); |
| | | if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l); |
| | | } |
| | | break; |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | Invalidate(); |
| | | } |
| | | else if (isMouseMoved) |
| | | if (ModifierKeys != Keys.Alt && minNode != null) |
| | | { |
| | | |
| | | _isDragging = false; |
| | | Cursor = Cursors.Default; |
| | | var _lastMousePosition = DragStartPos; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = minNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | dx = p2.X - p1.X; |
| | | dy = p2.Y - p1.Y; |
| | | dz = p2.Z - p1.Z; |
| | | |
| | | // 绘制矩形 |
| | | var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new SizeF((float)Math.Abs(_lastMousePosition.X - mousePosition.X), (float)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new RectangleF(start, size); |
| | | |
| | | if (ModifierKeys == Keys.Control) |
| | | { |
| | | |
| | | |
| | | |
| | | |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | if (!_Nodes[i].Visible) continue; |
| | | PointF p = WorldPointToMapPoint(_Nodes[i]); |
| | | |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | if (selectedObjs.Contains(_Nodes[i])) |
| | | { |
| | | _Nodes[i].Selected = false; |
| | | selectedObjs.Remove(_Nodes[i]); |
| | | } |
| | | else |
| | | { |
| | | _Nodes[i].Selected = true; |
| | | selectedObjs.Add(_Nodes[i]); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | if (!_Links[i].Visible) continue; |
| | | PointF p = WorldPointToMapPoint(_Links[i].Position, _Links[i].Elev); |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | if (selectedObjs.Contains(_Links[i])) |
| | | { |
| | | _Links[i].Selected = false; |
| | | selectedObjs.Remove(_Links[i]); |
| | | } |
| | | else |
| | | { |
| | | _Links[i].Selected = true; |
| | | selectedObjs.Add(_Links[i]); |
| | | } |
| | | } |
| | | } |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | else |
| | | { |
| | | selectedObjs.ForEach(obj => obj.Selected = false); |
| | | selectedObjs.Clear(); |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | if (!_Nodes[i].Visible) continue; |
| | | PointF p = WorldPointToMapPoint(_Nodes[i]); |
| | | |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | _Nodes[i].Selected = true; |
| | | selectedObjs.Add(_Nodes[i]); |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | if (!_Links[i].Visible) continue; |
| | | PointF p = WorldPointToMapPoint(_Links[i].Position, _Links[i].Elev); |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | _Links[i].Selected = true; |
| | | selectedObjs.Add(_Links[i]); |
| | | } |
| | | } |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | _isDragging = false; |
| | | _NewNet.Clear(); |
| | | _OperaNode = null; |
| | | _isInsertingObject = false; |
| | | this.Invalidate(); |
| | | return; |
| | | |
| | | // 遍历所有点,找出最近的点 |
| | | PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); |
| | | var obj = GetObj_by_ScreenPoint(clickedPoint); |
| | | bool isJunction = obj is NodeViewModel; |
| | | |
| | | |
| | | |
| | | if (ModifierKeys == Keys.Control) |
| | | { |
| | | if (obj != null) |
| | | { |
| | | if (selectedObjs.Contains(obj)) |
| | | { |
| | | obj.Selected = false; |
| | | selectedObjs.Remove(obj); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | else |
| | | { |
| | | obj.Selected = true; |
| | | selectedObjs.Add(obj); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | } |
| | | |
| | | } |
| | | else |
| | | { |
| | | if (obj != null) |
| | | { |
| | | //if (isJunction) |
| | | { |
| | | selectedObjs.ForEach(o => o.Selected = false); |
| | | selectedObjs.Clear(); |
| | | _OperaNode = null; |
| | | obj.Selected = true; |
| | | selectedObjs.Add(obj); |
| | | //Invalidate(); |
| | | //// 显示该点的属性 |
| | | //ShowProperties(obj); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | //else |
| | | //{ |
| | | // ChoosedObjs.ForEach(o => o.Choosed = false); |
| | | // ChoosedObjs.Clear(); |
| | | // obj.Choosed = true; |
| | | // ChoosedObjs.Add(obj); |
| | | // Invalidate(); |
| | | // // 显示该点的属性 |
| | | // ShowProperties(obj); |
| | | //} |
| | | } |
| | | else |
| | | { |
| | | |
| | | selectedObjs.ForEach(o => o.Selected = false); |
| | | selectedObjs.Clear(); |
| | | _OperaNode = null; |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | } |
| | | } |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = _OperaNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | dx = dd.X; //p2.X - p1.X; |
| | | dy = dd.Y;// p2.Y - p1.Y; |
| | | dz = dd.Z;// 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(minNode, _OperaNode); |
| | | j.Length = 0.0001f; |
| | | list.Add(j); |
| | | _OperaNode = null; |
| | | _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); |
| | | _isInsertingObject = false; |
| | | |
| | | //_OperaNode = null; |
| | | //_Network.Nodes.AddRange(net.Nodes); |
| | | //_Network.Links.AddRange(net.Links); |
| | | Invalidate(); |
| | | return; |
| | | } |
| | | if /*多边形选择*/(_isDrawingPolygon && e.Button==MouseButtons.Left && ModifierKeys==Keys.None) |
| | | { |
| | | _isDrawingPolygon = false; |
| | | if (polygonPoints.Count >= 3) |
| | | { |
| | | _Nodes.ForEach(n0 => |
| | | { |
| | | var n = (NodeViewModel)n0; |
| | | if (IsPointInPolygon(WorldPointToMapPoint(n), polygonPoints)) |
| | | { |
| | | selectedObjs.Add(n); |
| | | n.Selected = true; |
| | | } |
| | | }); |
| | | _Links.ForEach(n0 => |
| | | { |
| | | var n = (LinkViewModel)n0; |
| | | if (IsPointInPolygon(WorldPointToMapPoint(n.Position, n.Elev), polygonPoints)) |
| | | { |
| | | selectedObjs.Add(n); |
| | | n.Selected = true; |
| | | } |
| | | }); |
| | | |
| | | } |
| | | Invalidate(); |
| | | // 结束绘制多边形 |
| | | return; |
| | | } |
| | | if /*移动对象*/(_isMovingObject && isMouseMoved && e.Button == MouseButtons.Left) |
| | | { |
| | | List<NodeViewModel> nodes = _Nodes.Select(n => (NodeViewModel)n).ToList(); |
| | | float minDist = 100f; |
| | | NodeViewModel minNode = null; |
| | | foreach (NodeViewModel node in nodes) |
| | | { |
| | | |
| | | |
| | | PointF mapPos = WorldPointToMapPoint(node); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float currentDist = 0; |
| | | if (node != _OperaNode && (currentDist = Get_dist(new PointF(e.X, e.Y), currentPoint)) < 15f) |
| | | { |
| | | if (currentDist < minDist) currentDist = minDist; |
| | | minNode = node; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | |
| | | if (ModifierKeys != Keys.Alt && minNode != null) |
| | | { |
| | | _isMovingObject = false; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = minNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | var dx = p2.X - p1.X; |
| | | var dy = p2.Y - p1.Y; |
| | | var dz = p2.Z - p1.Z; |
| | | selectedNodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | 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); |
| | | _OperaNode = null; |
| | | _NewNet.Clear(); |
| | | } |
| | | else |
| | | { |
| | | _isMovingObject = false; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = _OperaNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | var dx = dd.X; //p2.X - p1.X; |
| | | var dy = dd.Y;// p2.Y - p1.Y; |
| | | var dz = dd.Z;// p2.Z - p1.Z; |
| | | selectedNodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | 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); |
| | | _OperaNode = null; |
| | | _NewNet.Clear(); |
| | | } |
| | | return; |
| | | } |
| | | if /*取消移动对象*/(_isMovingObject && !isMouseMoved && e.Button == MouseButtons.Left) |
| | | { |
| | | _isMovingObject = false; |
| | | var p1 = (PointF3D)_undoOldValue; |
| | | var p2 = _OperaNode.Position3D; |
| | | var dd = _newTemplate.OffSet; |
| | | var dx = dd.X; //p2.X - p1.X; |
| | | var dy = dd.Y;// p2.Y - p1.Y; |
| | | var dz = dd.Z;// p2.Z - p1.Z; |
| | | //selectedNodes.ForEach(n => { n.Position3D = new PointF3D(n.X + dx, n.Y + dy, n.Elev + dz); }); |
| | | //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); |
| | | _OperaNode = null; |
| | | _NewNet.Clear(); |
| | | return; |
| | | } |
| | | if /*特殊功能*/(_mouseState != MouseState.无 && e.Button == MouseButtons.Left) |
| | | { |
| | | PointF p; |
| | | float z; |
| | | NodeViewModel n; |
| | | |
| | | switch (_mouseState) |
| | | { |
| | | case MouseState.新增节点: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddJunction(p, z); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新建水表: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddMeter(p); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新建水库: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddReservoir(p); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新建水池: |
| | | getPointAndHeight(e, out p, out z); |
| | | n = _Network.AddTank(p); |
| | | MapObjectExtensions.AddCommand(_Network, "Add", null, new List<IBaseViewModel>() { n }); |
| | | break; |
| | | case MouseState.新增管线: |
| | | case MouseState.新建水泵: |
| | | case MouseState.新建阀门: |
| | | case MouseState.新建重复器: |
| | | if (_select_junction1 == null) |
| | | { |
| | | getPointAndHeight(e, out p, out z); |
| | | Set_junction1(e); |
| | | } |
| | | else |
| | | { |
| | | getPointAndHeight(e, _select_junction1, out p, out z); |
| | | var l = AddLink(e, isdoubleClick, p, z); |
| | | if (l.Count > 0) MapObjectExtensions.AddCommand(_Network, "Add", null, l); |
| | | } |
| | | break; |
| | | |
| | | |
| | | |
| | | |
| | | //zoom *= (float)Math.Pow(2, e.Delta / 120.0 / 10.0); |
| | | //zoom = Math.Max(0.1f, Math.Min(10.0f, zoom)); |
| | | } |
| | | |
| | | //center.X += e.Location.X / oldZoom - e.Location.X / zoom; |
| | | //center.Y += e.Location.Y / oldZoom - e.Location.Y / zoom; |
| | | label_center.Text = $"center:({MapCenter.X.ToString("0.000")} ,{MapCenter.Y.ToString("0.000")})"; |
| | | label_zoom.Text = $"Zoom:{zoom.ToString("0.000")}"; |
| | | |
| | | Invalidate(); |
| | | } |
| | | else if (e.Button == MouseButtons.Right) |
| | | if /*锁定点选*/(GlobalObject.LockSelect && !isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left ) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | // 遍历所有点,找出最近的点 |
| | | PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); |
| | | var obj = GetObj_by_ScreenPoint(clickedPoint); |
| | | bool isJunction = obj is NodeViewModel; |
| | | |
| | | if (obj != null) |
| | | { |
| | | GlobalObject.PropertyForm.SetObjs(new List<IBaseViewModel>() { obj }); |
| | | if (isJunction) _OperaNode = (NodeViewModel)obj; |
| | | mousePosition = new PointF(0, 0); |
| | | Invalidate(); |
| | | |
| | | } |
| | | else |
| | | { |
| | | GlobalObject.PropertyForm.SetObjs(new List<IBaseViewModel>() { }); |
| | | _OperaNode = null; |
| | | mousePosition = new PointF(0, 0); |
| | | Invalidate(); |
| | | } |
| | | return; |
| | | } |
| | | if /*锁定框选*/(GlobalObject.LockSelect&& isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left ) |
| | | { |
| | | _isDragging = false; |
| | | Cursor = Cursors.Default; |
| | | |
| | | var _lastMousePosition = DragStartPos; |
| | | |
| | | // 绘制矩形 |
| | | var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new SizeF((float)Math.Abs(_lastMousePosition.X - mousePosition.X), (float)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new RectangleF(start, size); |
| | | var selectedObjs = new List<IBaseViewModel>(); |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | |
| | | var node = _Nodes[i] as NodeViewModel; |
| | | if (!node.Visible) continue; |
| | | PointF p = WorldPointToMapPoint(node); |
| | | |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | selectedObjs.Add(node); |
| | | |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | var link = _Links[i] as LinkViewModel; |
| | | if (!link.Visible) continue; |
| | | PointF p = WorldPointToMapPoint(link.Position, link.Elev); |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | selectedObjs.Add(link); |
| | | } |
| | | } |
| | | var findNode = selectedObjs.FindAll(o => o is NodeViewModel); |
| | | if (findNode.Count > 0) _OperaNode = findNode[0] as NodeViewModel; |
| | | |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | return; |
| | | } |
| | | if /*叠加框选*/(isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left && ModifierKeys == Keys.Control) |
| | | { |
| | | |
| | | _isDragging = false; |
| | | Cursor = Cursors.Default; |
| | | |
| | | var _lastMousePosition = DragStartPos; |
| | | |
| | | // 绘制矩形 |
| | | var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new SizeF((float)Math.Abs(_lastMousePosition.X - mousePosition.X), (float)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new RectangleF(start, size); |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | |
| | | var node = _Nodes[i] as NodeViewModel; |
| | | if (!node.Visible) continue; |
| | | PointF p = WorldPointToMapPoint(node); |
| | | |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | if (selectedObjs.Contains(node)) |
| | | { |
| | | node.Selected = false; |
| | | selectedObjs.Remove(node); |
| | | } |
| | | else |
| | | { |
| | | node.Selected = true; |
| | | selectedObjs.Add(node); |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | var link = _Links[i] as LinkViewModel; |
| | | if (!link.Visible) continue; |
| | | PointF p = WorldPointToMapPoint(link.Position, link.Elev); |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | if (selectedObjs.Contains(link)) |
| | | { |
| | | link.Selected = false; |
| | | selectedObjs.Remove(link); |
| | | } |
| | | else |
| | | { |
| | | link.Selected = true; |
| | | selectedObjs.Add(link); |
| | | } |
| | | } |
| | | } |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | return; |
| | | } |
| | | if /*框选*/(isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left && ModifierKeys == Keys.None) |
| | | { |
| | | _isDragging = false; |
| | | Cursor = Cursors.Default; |
| | | |
| | | var _lastMousePosition = DragStartPos; |
| | | |
| | | // 绘制矩形 |
| | | var start = new PointF((float)Math.Min(mousePosition.X, _lastMousePosition.X), (float)Math.Min(mousePosition.Y, _lastMousePosition.Y)); |
| | | var size = new SizeF((float)Math.Abs(_lastMousePosition.X - mousePosition.X), (float)Math.Abs(_lastMousePosition.Y - mousePosition.Y)); |
| | | var rectangle0 = new RectangleF(start, size); |
| | | selectedObjs.ForEach(obj => obj.Selected = false); |
| | | selectedObjs.Clear(); |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | var node = _Nodes[i] as NodeViewModel; |
| | | if (!node.Visible) continue; |
| | | PointF p = WorldPointToMapPoint(node); |
| | | |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | node.Selected = true; |
| | | selectedObjs.Add(node); |
| | | } |
| | | } |
| | | |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | var link = _Links[i] as LinkViewModel; |
| | | |
| | | if (!link.Visible) continue; |
| | | PointF p = WorldPointToMapPoint(link.Position, link.Elev); |
| | | if (RectangContain(rectangle0, p)) |
| | | { |
| | | link.Selected = true; |
| | | selectedObjs.Add(link); |
| | | } |
| | | } |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | return; |
| | | } |
| | | |
| | | if /*点选*/(!isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left && ModifierKeys==Keys.None) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | // 遍历所有点,找出最近的点 |
| | | PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); |
| | | var obj = GetObj_by_ScreenPoint(clickedPoint); |
| | | bool isJunction = obj is NodeViewModel; |
| | | |
| | | if (obj != null) |
| | | { |
| | | selectedObjs.ForEach(o => o.Selected = false); |
| | | selectedObjs.Clear(); |
| | | obj.Selected = true; |
| | | selectedObjs.Add(obj); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | _OperaNode = null; |
| | | |
| | | |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | |
| | | |
| | | } |
| | | else |
| | | { |
| | | //GlobalObject.LockSelect |
| | | |
| | | selectedObjs.ForEach(o => o.Selected = false); |
| | | selectedObjs.Clear(); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | |
| | | _OperaNode = null; |
| | | |
| | | Invalidate(); |
| | | } |
| | | return; |
| | | |
| | | |
| | | } |
| | | |
| | | if (/*叠加点选*/!isMouseMoved && _mouseState == MouseState.无 && e.Button == MouseButtons.Left && ModifierKeys == Keys.Control) |
| | | { |
| | | _isDragging = false; |
| | | |
| | | // 遍历所有点,找出最近的点 |
| | | PointF clickedPoint = new PointF(e.X, e.Y); //ScreenToMap(new PointF(e.X, e.Y)); |
| | | var obj = GetObj_by_ScreenPoint(clickedPoint); |
| | | bool isJunction = obj is NodeViewModel; |
| | | if (obj != null) |
| | | { |
| | | if (selectedObjs.Contains(obj)) |
| | | { |
| | | obj.Selected = false; |
| | | selectedObjs.Remove(obj); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | else |
| | | { |
| | | obj.Selected = true; |
| | | selectedObjs.Add(obj); |
| | | GlobalObject.PropertyForm.SetObjs(selectedObjs); |
| | | Invalidate(); |
| | | mousePosition = new PointF(0, 0); |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | if (e.Button == MouseButtons.Right) |
| | | { |
| | | if (_isRotating) |
| | | { |
| | |
| | | |
| | | for (int i = 0; i < _Nodes.Count; i++) |
| | | { |
| | | if (!_Nodes[i].Visible) continue; |
| | | PointF mapPos = WorldPointToMapPoint(_Nodes[i]); |
| | | var node = _Nodes[i] as NodeViewModel; |
| | | if (!node.Visible) continue; |
| | | PointF mapPos = WorldPointToMapPoint(node); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float dist = Get_dist(clickedPoint, currentPoint); |
| | | if (dist < minDist && dist <= DistLimit) |
| | | { |
| | | minDist = dist; |
| | | minIndex = i; |
| | | obj = _Nodes[i]; |
| | | obj = node; |
| | | } |
| | | } |
| | | for (int i = 0; i < _Links.Count; i++) |
| | | { |
| | | if (!_Links[i].Visible) continue; |
| | | var link= _Links[i] as LinkViewModel; |
| | | if (!link.Visible) continue; |
| | | //float dist = (clickedPoint.X - Pipes[i].X) * (clickedPoint.X - Pipes[i].X) + |
| | | // (clickedPoint.Y - Pipes[i].Y) * (clickedPoint.Y - Pipes[i].Y); |
| | | PointF mapPos = WorldPointToMapPoint(_Links[i].Position, _Links[i].Elev); |
| | | PointF mapPos = WorldPointToMapPoint(link.Position, link.Elev); |
| | | PointF currentPoint = MapToScreen(mapPos); |
| | | float dist = Get_dist(clickedPoint, currentPoint); |
| | | if (dist < minDist && dist <= DistLimit) |
| | |
| | | minDist = dist; |
| | | minIndex = i; |
| | | isJunction = false; |
| | | obj = _Links[i]; |
| | | obj = link; |
| | | } |
| | | } |
| | | return obj; |
| | |
| | | } |
| | | private void 全部显示ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | _Nodes.ForEach(v => |
| | | _Nodes.Select(n=>(NodeViewModel)n).ToList() .ForEach(v => |
| | | { |
| | | if (!v.Visible) |
| | | { |
| | |
| | | v.Visible = true; |
| | | } |
| | | }); |
| | | _Links.ForEach(v => |
| | | _Links.Select(n => (LinkViewModel)n).ToList().ForEach(v0 => |
| | | { |
| | | var v = (LinkViewModel)v0; |
| | | if (!v.Visible) |
| | | { |
| | | MapObjectExtensions.AddCommand(v, "Visible", v.Visible, true); |
| | |
| | | } |
| | | else |
| | | { |
| | | _Nodes.ForEach(o => o.Selected = false); |
| | | _Links.ForEach(o => o.Selected = false); |
| | | _Nodes.ForEach(o => ((NodeViewModel)o).Selected = false); |
| | | _Links.ForEach(o => ((LinkViewModel)o).Selected = false); |
| | | selectedObjs.Clear(); |
| | | Invalidate(); |
| | | |
| | |
| | | if (e.KeyCode == Keys.A && e.Modifiers == Keys.Control) |
| | | { |
| | | selectedObjs.Clear(); |
| | | _Nodes.ForEach(o => { o.Selected = true; selectedObjs.Add(o); }); |
| | | _Links.ForEach(o => { o.Selected = true; selectedObjs.Add(o); }); |
| | | _Nodes.ForEach(o => { ((NodeViewModel)o).Selected = true; selectedObjs.Add((NodeViewModel)o); }); |
| | | _Links.ForEach(o => { ((LinkViewModel)o).Selected = true; selectedObjs.Add((LinkViewModel)o); }); |
| | | Invalidate(); |
| | | } |
| | | |
| | |
| | | if (p.StartNode == obj) |
| | | { |
| | | p.StartNode = junc; |
| | | |
| | | } |
| | | else if (p.EndNode == obj) |
| | | { |
| | |
| | | MessageBox.Show("围绕选中节点进行三维缩放,请在属性列表中选中一个缩放中心对象"); |
| | | return; |
| | | } |
| | | if (!(selectobjs[0] as IBaseViewModel).isNode()) |
| | | //if (!(selectobjs[0] as IBaseViewModel).isNode()) |
| | | var list = objs.FindAll(o => o.ID == selectobjs[0]); |
| | | if (list.Count>=1 && !list[0].isNode()) |
| | | { |
| | | MessageBox.Show("围绕选中节点进行三维缩放,请在属性列表中选中一个[节点类]缩放中心对象"); |
| | | return; |
| | | } |
| | | |
| | | NodeViewModel origin = selectobjs[0] as NodeViewModel; |
| | | NodeViewModel origin = list[0] as NodeViewModel; |
| | | var nodes = objs.FindAll(o => o.isNode()).Select(o => o as NodeViewModel).ToList(); |
| | | |
| | | ToolStripMenuItem item = sender as ToolStripMenuItem; |
| | |
| | | |
| | | private void toolStripButton_刷新_Click(object sender, EventArgs e) |
| | | { |
| | | LoadData(); |
| | | //LoadData(); |
| | | _Network.Calc(_Template.FullPath,"config_calc.wdb"); |
| | | } |
| | | |
| | | public void 关阀搜索ToolStripMenuItem_Click(object sender, EventArgs e) |
| | |
| | | sb.AppendLine(";Node X-Coord Y-Coord"); |
| | | _Nodes.ForEach(n => |
| | | { |
| | | var p = WorldPointToMapPoint(n); |
| | | var p = WorldPointToMapPoint((NodeViewModel)n); |
| | | sb.AppendLine($"{n.ID} {p.X} {p.Y}"); |
| | | |
| | | }); |
| | |
| | | //} |
| | | //net.Nodes.ForEach(o => o.Selected = false); |
| | | //net.Links.ForEach(o => o.Selected = false); |
| | | selectedObjs.AddRange(net.Nodes); |
| | | selectedObjs.AddRange(net.Links); |
| | | selectedObjs.AddRange(net.Nodes.Select(n=>(NodeViewModel)n)); |
| | | selectedObjs.AddRange(net.Links.ViewLinks); |
| | | //net.Nodes.ForEach(o => selectedNodes.); |
| | | //net.Links.ForEach(o => o.Selected = false) ; |
| | | var list = _Network.Add(net); |
| | |
| | | |
| | | } |
| | | |
| | | private void 显示水流ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | _Template.network.MapObjects.ForEach(o => o.Selected = false) ; |
| | | selectedObjs.Clear(); |
| | | _Template.network.Links.ForEach(link => |
| | | { |
| | | if (link.EN_FLOW != 0) |
| | | { |
| | | selectedObjs.Add(link); |
| | | link.Selected = true; |
| | | NodeViewModel node = link.StartNode; |
| | | node.Selected = true; |
| | | if (!selectedObjs.Contains(node)) selectedObjs.Add(node); |
| | | node = link.EndNode; |
| | | node.Selected = true; |
| | | if (!selectedObjs.Contains(node)) selectedObjs.Add(node); |
| | | |
| | | } |
| | | |
| | | }); |
| | | this.Invalidate(); |
| | | |
| | | } |
| | | |
| | | private void 全选ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | selectedObjs.Clear(); |
| | | _Template.network.MapObjects.ForEach(o => |
| | | { |
| | | if (o.Visible) |
| | | { |
| | | o.Selected = true; |
| | | selectedObjs.Add(o); |
| | | } |
| | | |
| | | }); |
| | | this.Invalidate(); |
| | | |
| | | } |
| | | |
| | | private void 反选ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | |
| | | _Template.network.MapObjects.ForEach(o => |
| | | { |
| | | if (o.Visible) |
| | | { |
| | | if (o.Selected) |
| | | { |
| | | o.Selected = false; |
| | | selectedObjs.Remove(o); |
| | | } |
| | | else |
| | | { |
| | | o.Selected = true; |
| | | selectedObjs.Add(o); |
| | | } |
| | | |
| | | } |
| | | |
| | | }); |
| | | this.Invalidate(); |
| | | } |
| | | |
| | | private void 显示状态ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | _Template.mapOption._ShowStatus = true; |
| | | this.Invalidate(); |
| | | } |
| | | private void 隐藏状态ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | _Template.mapOption._ShowStatus = false; |
| | | this.Invalidate(); |
| | | |
| | | } |
| | | private void 显示流向ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | _Template.mapOption._ShowFlowDirection = true; |
| | | this.Invalidate(); |
| | | |
| | | |
| | | |
| | | } |
| | | private void 隐藏流向ToolStripMenuItem_Click(object sender, EventArgs e) |
| | | { |
| | | _Template.mapOption._ShowFlowDirection = false; |
| | | this.Invalidate(); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | public class Prompt : Form |
| | | { |
| | | private static TextBox textBox; |