namespace Yw.WinFrmUI.HydroL2d { /// /// /// public partial class Network { /// /// 判断是否存在 /// public bool IsExist(string id) { return _parters.Exists(x => x.Id == id); } /// /// 获取边界 /// public RectangleF GetBounds() { var result = RectangleF.Empty; bool firstPass = true; foreach (var node in this.Nodes) { var rectf = new RectangleF(node.Position, SizeF.Empty); if (firstPass) { result = rectf; firstPass = false; } else { result = RectangleF.Union(result, rectf); } } foreach (var link in this.Links) { foreach (var position in link.Positions) { var rectf = new RectangleF(link.StartPosition, SizeF.Empty); if (firstPass) { result = rectf; firstPass = false; } else { result = RectangleF.Union(result, rectf); } } } return result; } /// /// 绘制 /// public void Draw(Graphics g) { foreach (var link in this.Links) { link.Draw(g); } foreach (var node in this.Nodes) { node.Draw(g); } } /// /// 绘制 /// /// /// 显示区域 public void Draw(Graphics g, RectangleF dispRectf) { foreach (var link in this.Links) { if (link.Intersect(dispRectf)) { link.Draw(g); } } foreach (var node in this.Nodes) { if (node.Intersect(dispRectf)) { node.Draw(g); } } } /// /// 选择 /// public List Select(PointF pt) { int i = 0; foreach (var node in this.Nodes) { node.Selected = node.Contains(pt); if (node.Selected) { i++; } } if (i > 0) { this.Links.ForEach(x => x.Selected = false); return this.Nodes.Where(x => x.Selected).Select(x => x as Parter).ToList(); } foreach (var link in this.Links) { link.Selected = link.Contains(pt); } return this.Links.Where(x => x.Selected).Select(x => x as Parter).ToList(); } /// /// 悬停 /// public List Hover(PointF pt) { int i = 0; foreach (var node in this.Nodes) { node.Hovered = node.Contains(pt); if (node.Hovered) { i++; } } if (i > 0) { this.Links.ForEach(x => x.Hovered = false); return this.Nodes.Where(x => x.Hovered).Select(x => x as Parter).ToList(); } foreach (var link in this.Links) { link.Hovered = link.Contains(pt); } return this.Links.Where(x => x.Hovered).Select(x => x as Parter).ToList(); } } }