namespace Yw.EPAnet
|
{
|
/// <summary>
|
/// 节点
|
/// </summary>
|
public class Node : Visual
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public Node() { }
|
|
/// <summary>
|
///
|
/// </summary>
|
public Node(Node ths) : base(ths)
|
{
|
Quality = ths.Quality;
|
Position = ths.Position;
|
Links = ths.Links;
|
}
|
|
|
/// <summary>
|
/// 初始水质
|
/// </summary>
|
public double Quality { get; set; }
|
|
/// <summary>
|
/// 位置
|
/// </summary>
|
public Position2d Position { get; set; }
|
|
/// <summary>
|
/// 连接的管段集
|
/// <summary>
|
public List<Link> Links { get; set; }
|
|
|
/// <summary>
|
/// 获取下游管段列表
|
/// </summary>
|
public virtual List<Link> GetNextLinks()
|
{
|
if (this.Links == null)
|
{
|
return default;
|
}
|
return this.Links.Where(x => x.StartNode == this).ToList();
|
}
|
|
/// <summary>
|
/// 获取下游管段列表
|
/// </summary>
|
public virtual List<Link> GetNextLinks(List<CalcuLink> allCalcuLinks)
|
{
|
if (allCalcuLinks == null || allCalcuLinks.Count < 1)
|
{
|
return GetNextLinks();
|
}
|
if (this.Links == null)
|
{
|
return default;
|
}
|
var nextLinks = new List<Link>();
|
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;
|
}
|
|
/// <summary>
|
/// 获取上游管段列表
|
/// </summary>
|
public virtual List<Link> GetPrevLinks()
|
{
|
if (this.Links == null)
|
{
|
return default;
|
}
|
return this.Links.Where(x => x.EndNode == this).ToList();
|
}
|
|
/// <summary>
|
/// 获取上游管段列表
|
/// </summary>
|
public virtual List<Link> GetPrevLinks(List<CalcuLink> allCalcuLinks)
|
{
|
if (allCalcuLinks == null || allCalcuLinks.Count < 1)
|
{
|
return GetPrevLinks();
|
}
|
if (this.Links == null)
|
{
|
return default;
|
}
|
var prevLinks = new List<Link>();
|
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;
|
}
|
|
}
|
}
|