namespace Yw.WinFrmUI.HydroL2d { /// /// 水池 /// public class Tank : Source { /// /// 图片 /// public Image Image { get; set; } /// /// 宽度 /// public float? Width { get; set; } /// /// 高度 /// public float? Height { get; set; } /// /// 悬停图片 /// public Image HoveredImage { get; set; } /// /// 悬停宽度 /// public float? HoveredWidth { get; set; } /// /// 悬停高度 /// public float? HoveredHeight { get; set; } /// /// 选择图片 /// public Image SelectedImage { get; set; } /// /// 选择宽度 /// public float? SelectedWidth { get; set; } /// /// 选择高度 /// public float? SelectedHeight { get; set; } //获取坐标位置 private Coordinate GetCoordinate(Graphics g) { var ps = this.Position; //原始点 var ws = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Tank.Size.Width;//原始宽度 var hs = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Tank.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); } private Coordinate _coordinate = null;//坐标信息 /// /// 绘制 /// public override void Draw(Graphics g) { _coordinate = GetCoordinate(g); if (this.Hovered) { var hoveredImg = CacheHelper.TankHoveredImage; if (this.HoveredImage != null) { hoveredImg = this.HoveredImage; } var hoveredWidth = this.HoveredWidth.HasValue ? this.HoveredWidth.Value : CacheHelper.HydroL2d.Tank.HoveredSize.Width; var hoveredHeight = this.HoveredHeight.HasValue ? this.HoveredHeight.Value : CacheHelper.HydroL2d.Tank.HoveredSize.Height; var isNewImage = false; if (hoveredImg.Width != (int)hoveredWidth || hoveredImg.Height != (int)hoveredHeight) { hoveredImg = hoveredImg.CloneC(hoveredWidth, hoveredHeight); isNewImage = true; } var dx = hoveredWidth / g.PageScale / 2f; var dy = hoveredHeight / g.PageScale / 2f; var p0 = new PointF(this.Position.X - dx, this.Position.Y - dy); g.DrawImage(hoveredImg, p0); if (isNewImage) { hoveredImg.Dispose(); } } else if (this.Selected) { var selectedImg = CacheHelper.TankSelectedImage; if (this.SelectedImage != null) { selectedImg = this.SelectedImage; } var selectedWidth = this.SelectedWidth.HasValue ? this.SelectedWidth.Value : CacheHelper.HydroL2d.Tank.SelectedSize.Width; var selectedHeight = this.SelectedHeight.HasValue ? this.SelectedHeight.Value : CacheHelper.HydroL2d.Tank.SelectedSize.Height; var isNewImage = false; if (selectedImg.Width != (int)selectedWidth || selectedImg.Height != (int)selectedHeight) { selectedImg = selectedImg.CloneC(selectedWidth, selectedHeight); isNewImage = true; } var dx = selectedWidth / g.PageScale / 2f; var dy = selectedHeight / g.PageScale / 2f; var p0 = new PointF(this.Position.X - dx, this.Position.Y - dy); g.DrawImage(selectedImg, p0); if (isNewImage) { selectedImg.Dispose(); } } else { var img = CacheHelper.TankImage; if (this.Image != null) { img = this.Image; } var width = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Tank.Size.Width; var height = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Tank.Size.Height; var isNewImage = false; if (img.Width != (int)width || img.Height != (int)height) { img = img.CloneC(width, height); isNewImage = true; } var dx = width / g.PageScale / 2f; var dy = height / g.PageScale / 2f; var p0 = new PointF(this.Position.X - dx, this.Position.Y - dy); g.DrawImage(img, p0); if (isNewImage) { img.Dispose(); } } } /// /// 包含 /// public override bool Contains(PointF pt) { if (_coordinate == null) { return false; } return _coordinate.BeforeRectf.Contains(pt); } /// /// 相交 /// public override bool Intersect(RectangleF rectf) { if (rectf.Contains(this.Position)) { return true; } return false; } } }