From 8f677b1741b78e4de4c95373fc02587a05d7b5ca Mon Sep 17 00:00:00 2001 From: lixiaojun <1287241240@qq.com> Date: 星期五, 16 八月 2024 17:52:08 +0800 Subject: [PATCH] 2d尝试,功能基本实现,还差绘制特定区域 --- WinFrmUI/Yw.WinFrmUI.Hydro.L2d.Core/01-network/04-link/Pump.cs | 68 ++++++++++++++++++++++++++++++++- 1 files changed, 65 insertions(+), 3 deletions(-) diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.L2d.Core/01-network/04-link/Pump.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.L2d.Core/01-network/04-link/Pump.cs index 4737971..de7eead 100644 --- a/WinFrmUI/Yw.WinFrmUI.Hydro.L2d.Core/01-network/04-link/Pump.cs +++ b/WinFrmUI/Yw.WinFrmUI.Hydro.L2d.Core/01-network/04-link/Pump.cs @@ -30,11 +30,29 @@ /// </summary> public float? Height { get; set; } + private Coordinate _coordinate { get; set; }//鍧愭爣淇℃伅 + + //鑾峰彇鍧愭爣浣嶇疆 + private Coordinate GetCoordinate(Graphics g) + { + var ws = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Pump.Size.Width; + var hs = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Pump.Size.Height; + var wz = ws / g.PageScale; + var hz = hs / g.PageScale; + var angle = (float)this.StartPosition.AngleClockWise(this.EndPosition); + var xp = this.StartPosition.GetXPoint(this.EndPosition); + var size = new SizeF(xp.X - this.StartPosition.X, 2 * hz); + return Coordinate.GetCoordinate(this.StartPosition, angle, size, StringAlignment.Near, StringAlignment.Center); + } + /// <summary> /// 缁樺埗 /// </summary> public override void Draw(Graphics g) { + _coordinate = GetCoordinate(g); + #region 鐢荤嚎 + var fromCachePen = true; var pen = CacheHelper.PumpLinePen; if (this.LineColor.HasValue && this.LineWidth.HasValue) @@ -42,19 +60,26 @@ pen = new Pen(this.LineColor.Value, this.LineWidth.Value); fromCachePen = false; } + var penWidth = pen.Width; + pen.Width = pen.Width / g.PageScale; g.DrawLine(pen, this.StartPosition, this.EndPosition); + pen.Width = penWidth; if (!fromCachePen) { pen.Dispose(); } + + #endregion + + #region 鐢诲浘鐗� var img = CacheHelper.PumpImage; if (this.Image != null) { img = this.Image; } - var width = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Pump.Width; - var height = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Pump.Height; + var width = this.Width.HasValue ? this.Width.Value : CacheHelper.HydroL2d.Pump.Size.Width; + var height = this.Height.HasValue ? this.Height.Value : CacheHelper.HydroL2d.Pump.Size.Height; var isNewImage = false; if (img.Width != (int)width || img.Height != (int)height) { @@ -62,13 +87,50 @@ isNewImage = true; } - g.DrawImage(img, this.StartPosition.GetCenter(this.EndPosition)); + var pt = this.StartPosition.GetCenter(this.EndPosition); + var dx = width / g.PageScale / 2f; + var dy = height / g.PageScale / 2f; + var p0 = new PointF(pt.X - dx, pt.Y - dy); + + g.DrawImage(img, p0); if (isNewImage) { img.Dispose(); } + #endregion + + } + + /// <summary> + /// 鍖呭惈 + /// </summary> + public override bool Contains(PointF pt) + { + if (_coordinate == null) + { + return false; + } + var pa = _coordinate.Origin.RotatePointF(pt, _coordinate.Angle, false); + return _coordinate.BeforeRectf.Contains(pa); + } + + /// <summary> + /// 鐩镐氦 + /// </summary> + public override bool Intersect(RectangleF rectf) + { + var positions = this.Positions; + foreach (var position in positions) + { + if (rectf.Contains(position)) + { + return true; + } + } + return false; + } -- Gitblit v1.9.3