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;
}
}
}