namespace Yw.WinFrmUI.HydroL2d
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public partial class Network
|
{
|
|
/// <summary>
|
/// 判断是否存在
|
/// </summary>
|
public bool IsExist(string id)
|
{
|
return _parters.Exists(x => x.Id == id);
|
}
|
|
/// <summary>
|
/// 获取边界
|
/// </summary>
|
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;
|
}
|
|
/// <summary>
|
/// 绘制
|
/// </summary>
|
public void Draw(Graphics g)
|
{
|
foreach (var link in this.Links)
|
{
|
link.Draw(g);
|
}
|
foreach (var node in this.Nodes)
|
{
|
node.Draw(g);
|
}
|
}
|
|
/// <summary>
|
/// 绘制
|
/// </summary>
|
/// <param name="g"></param>
|
/// <param name="dispRectf">显示区域</param>
|
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);
|
}
|
|
}
|
}
|
|
/// <summary>
|
/// 选择
|
/// </summary>
|
public List<Parter> 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();
|
}
|
|
/// <summary>
|
/// 悬停
|
/// </summary>
|
public List<Parter> 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();
|
}
|
|
|
}
|
}
|