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