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