namespace Yw.EPAnet { /// /// 节点 /// public class Node : Visual { /// /// /// public Node() { } /// /// /// public Node(Node ths) : base(ths) { Quality = ths.Quality; Position = ths.Position; Links = ths.Links; } /// /// 初始水质 /// public double Quality { get; set; } /// /// 位置 /// public Position2d Position { get; set; } /// /// 连接的管段集 /// public List Links { get; set; } /// /// 获取下游管段列表 /// public virtual List GetNextLinks() { if (this.Links == null) { return default; } return this.Links.Where(x => x.StartNode == this).ToList(); } /// /// 获取下游管段列表 /// public virtual List GetNextLinks(List allCalcuLinks) { if (allCalcuLinks == null || allCalcuLinks.Count < 1) { return GetNextLinks(); } if (this.Links == null) { return default; } var nextLinks = new List(); foreach (var link in this.Links) { var calcLink = allCalcuLinks.Find(x => x.Id == link.Id); if (calcLink != null) { if (link.StartNode == this) { if (calcLink.Flow > 0) { nextLinks.Add(link); } } else if (link.EndNode == this) { if (calcLink.Flow < 0) { nextLinks.Add(link); } } } } return nextLinks; } /// /// 获取下游管段列表 /// public virtual List GetNextLinks(Dictionary allCalcuLinks) { if (allCalcuLinks == null || allCalcuLinks.Count < 1) { return GetNextLinks(); } if (this.Links == null) { return default; } var nextLinks = new List(); foreach (var link in this.Links) { var calcLink = allCalcuLinks[link.Id]; if (calcLink != null) { if (link.StartNode == this) { if (calcLink.Flow > 0) { nextLinks.Add(link); } } else if (link.EndNode == this) { if (calcLink.Flow < 0) { nextLinks.Add(link); } } } } return nextLinks; } /// /// 获取上游管段列表 /// public virtual List GetPrevLinks() { if (this.Links == null) { return default; } return this.Links.Where(x => x.EndNode == this).ToList(); } /// /// 获取上游管段列表 /// public virtual List GetPrevLinks(List allCalcuLinks) { if (allCalcuLinks == null || allCalcuLinks.Count < 1) { return GetPrevLinks(); } if (this.Links == null) { return default; } var prevLinks = new List(); foreach (var link in this.Links) { var calcLink = allCalcuLinks.Find(x => x.Id == link.Id); if (calcLink != null) { if (link.StartNode == this) { if (calcLink.Flow < 0) { prevLinks.Add(link); } } else if (link.EndNode == this) { if (calcLink.Flow > 0) { prevLinks.Add(link); } } } } return prevLinks; } /// /// 获取上游管段列表 /// public virtual List GetPrevLinks(Dictionary allCalcuLinks) { if (allCalcuLinks == null || allCalcuLinks.Count < 1) { return GetPrevLinks(); } if (this.Links == null) { return default; } var prevLinks = new List(); foreach (var link in this.Links) { var calcLink = allCalcuLinks[link.Id]; if (calcLink != null) { if (link.StartNode == this) { if (calcLink.Flow < 0) { prevLinks.Add(link); } } else if (link.EndNode == this) { if (calcLink.Flow > 0) { prevLinks.Add(link); } } } } return prevLinks; } } }