namespace Yw.WinFrmUI.HydroL2d
|
{
|
/// <summary>
|
/// 连接节点
|
/// </summary>
|
public class Junction : Node
|
{
|
|
/// <summary>
|
/// 宽度
|
/// </summary>
|
public float? Width { get; set; }
|
|
/// <summary>
|
/// 高度
|
/// </summary>
|
public float? Height { get; set; }
|
|
/// <summary>
|
/// 填充颜色
|
/// </summary>
|
public Color? FillColor { get; set; }
|
|
/// <summary>
|
/// 悬停宽度
|
/// </summary>
|
public float? HoveredWidth { get; set; }
|
|
/// <summary>
|
/// 悬停高度
|
/// </summary>
|
public float? HoveredHeight { get; set; }
|
|
/// <summary>
|
/// 悬停填充颜色
|
/// </summary>
|
public Color? HoveredFillColor { get; set; }
|
|
/// <summary>
|
/// 选择宽度
|
/// </summary>
|
public float? SelectedWidth { get; set; }
|
|
/// <summary>
|
/// 选择高度
|
/// </summary>
|
public float? SelectedHeight { get; set; }
|
|
/// <summary>
|
/// 选择填充颜色
|
/// </summary>
|
public Color? SelectedFillColor { get; set; }
|
|
|
private Coordinate _coordinate { get; set; }//坐标信息
|
|
//获取坐标位置
|
private Coordinate GetCoordinate(Graphics g)
|
{
|
var ps = this.Position;//原始点
|
var ws = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Junction.Size.Width;//原始宽度
|
var hs = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Junction.Size.Height;//原始高度
|
var wz = ws / g.PageScale; //缩放宽度
|
var hz = hs / g.PageScale;//缩放高度
|
return Coordinate.GetCoordinate(ps, 0, new SizeF(wz, hz), StringAlignment.Center, StringAlignment.Center);
|
}
|
|
/// <summary>
|
/// 绘制
|
/// </summary>
|
public override void Draw(Graphics g)
|
{
|
_coordinate = GetCoordinate(g);
|
|
if (this.Hovered)
|
{
|
var fromCacheBrush = true;
|
var brush = CacheHelper.JunctionHoveredFillBrush;
|
if (this.HoveredFillColor.HasValue)
|
{
|
brush = new SolidBrush(this.HoveredFillColor.Value);
|
fromCacheBrush = false;
|
}
|
|
var width = this.HoveredWidth.HasValue ? this.HoveredWidth.Value : CacheHelper.HydroL2d.Junction.HoveredSize.Width;
|
var height = this.HoveredHeight.HasValue ? this.HoveredHeight.Value : CacheHelper.HydroL2d.Junction.HoveredSize.Height;
|
var x = this.Position.X - width / g.PageScale / 2f;
|
var y = this.Position.Y - height / g.PageScale / 2f;
|
var rect = new RectangleF(x, y, width / g.PageScale, height / g.PageScale);
|
g.FillEllipse(brush, rect);
|
|
if (!fromCacheBrush)
|
{
|
brush.Dispose();
|
}
|
}
|
else if (this.Selected)
|
{
|
var fromCacheBrush = true;
|
var brush = CacheHelper.JunctionSelectedFillBrush;
|
if (this.SelectedFillColor.HasValue)
|
{
|
brush = new SolidBrush(this.SelectedFillColor.Value);
|
fromCacheBrush = false;
|
}
|
|
var width = this.SelectedWidth.HasValue ? this.SelectedWidth.Value : CacheHelper.HydroL2d.Junction.SelectedSize.Width;
|
var height = this.SelectedHeight.HasValue ? this.SelectedHeight.Value : CacheHelper.HydroL2d.Junction.SelectedSize.Height;
|
var x = this.Position.X - width / g.PageScale / 2f;
|
var y = this.Position.Y - height / g.PageScale / 2f;
|
var rect = new RectangleF(x, y, width / g.PageScale, height / g.PageScale);
|
g.FillEllipse(brush, rect);
|
|
if (!fromCacheBrush)
|
{
|
brush.Dispose();
|
}
|
}
|
else
|
{
|
var fromCacheBrush = true;
|
var brush = CacheHelper.JunctionFillBrush;
|
if (this.FillColor.HasValue)
|
{
|
brush = new SolidBrush(this.FillColor.Value);
|
fromCacheBrush = false;
|
}
|
|
var width = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Junction.Size.Width;
|
var height = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Junction.Size.Height;
|
var x = this.Position.X - width / g.PageScale / 2f;
|
var y = this.Position.Y - height / g.PageScale / 2f;
|
var rect = new RectangleF(x, y, width / g.PageScale, height / g.PageScale);
|
g.FillEllipse(brush, rect);
|
|
if (!fromCacheBrush)
|
{
|
brush.Dispose();
|
}
|
}
|
}
|
|
/// <summary>
|
/// 包含
|
/// </summary>
|
public override bool Contains(PointF pt)
|
{
|
if (_coordinate == null)
|
{
|
return false;
|
}
|
return _coordinate.BeforeRectf.Contains(pt);
|
}
|
|
/// <summary>
|
/// 相交
|
/// </summary>
|
public override bool Intersect(RectangleF rectf)
|
{
|
if (rectf.Contains(this.Position))
|
{
|
return true;
|
}
|
return false;
|
|
}
|
|
|
|
}
|
}
|