From 25cd61c5cbab7bd67951530f38adda017e472a3a Mon Sep 17 00:00:00 2001
From: "xhm\\HP" <1173131411@qq.com>
Date: Sun, 16 Mar 2025 17:32:09 +0800
Subject: [PATCH] =?UTF-8?q?=E5=B0=BA=E5=AF=B8=E6=B5=8B=E9=87=8F=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD=E7=95=8C=E9=9D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
CanFly.Canvas/CanFly.Canvas.csproj | 28 +
CanFly.Canvas/Helper/PointHelper.cs | 88 +
CanFly.Canvas/Model/ClickArea.cs | 32 +
CanFly.Canvas/Model/Cursor.cs | 22 +
.../Model/Exception/InvalidShapeException.cs | 12 +
CanFly.Canvas/Shape/BaseShape.cs | 41 +
CanFly.Canvas/Shape/DoubleClickActionEnum.cs | 15 +
CanFly.Canvas/Shape/FlyShape.cs | 938 ++++++++
CanFly.Canvas/Shape/HighlightSetting.cs | 45 +
CanFly.Canvas/Shape/ShapeTypeEnum.cs | 22 +
CanFly.Canvas/UI/FlyCanvas.Designer.cs | 56 +
CanFly.Canvas/UI/FlyCanvas.cs | 2019 +++++++++++++++++
CanFly.Canvas/UI/FlyCanvas.resx | 120 +
CanFly/Helper/HDevEngineTool.cs | 676 ++++++
CanFly/Program.cs | 17 +
CanFly/Properties/Resources.Designer.cs | 73 +
CanFly/Properties/Resources.resx | 124 +
CanFly/Resources/Close.png | Bin 0 -> 836 bytes
CanFly/Resources/circle.png | Bin 0 -> 1027 bytes
CanFly/UI/BaseFrmGuide.Designer.cs | 117 +
CanFly/UI/BaseFrmGuide.cs | 53 +
CanFly/UI/BaseFrmGuide.resx | 120 +
CanFly/UI/FrmMain.Designer.cs | 279 +++
CanFly/UI/FrmMain.cs | 345 +++
CanFly/UI/FrmMain.resx | 148 ++
CanFly/UI/FrmMain3.Designer.cs | 75 +
CanFly/UI/FrmMain3.cs | 435 ++++
CanFly/UI/FrmMain3.resx | 123 +
CanFly/UI/GuidePanel/BaseGuideControl.cs | 158 ++
CanFly/UI/GuidePanel/BaseGuideControl.resx | 120 +
CanFly/UI/GuidePanel/CtrlTitleBar.Designer.cs | 77 +
CanFly/UI/GuidePanel/CtrlTitleBar.cs | 38 +
CanFly/UI/GuidePanel/CtrlTitleBar.resx | 120 +
.../UI/GuidePanel/GuideCircleCtrl.Designer.cs | 364 +++
CanFly/UI/GuidePanel/GuideCircleCtrl.cs | 359 +++
CanFly/UI/GuidePanel/GuideCircleCtrl.resx | 145 ++
.../UI/GuidePanel/GuideHeightCtrl.Designer.cs | 446 ++++
CanFly/UI/GuidePanel/GuideHeightCtrl.cs | 346 +++
CanFly/UI/GuidePanel/GuideHeightCtrl.resx | 145 ++
.../GuideLineCircleCtrl.Designer.cs | 550 +++++
CanFly/UI/GuidePanel/GuideLineCircleCtrl.cs | 449 ++++
CanFly/UI/GuidePanel/GuideLineCircleCtrl.resx | 145 ++
.../UI/GuidePanel/GuideLineCtrl.Designer.cs | 427 ++++
CanFly/UI/GuidePanel/GuideLineCtrl.cs | 387 ++++
CanFly/UI/GuidePanel/GuideLineCtrl.resx | 145 ++
.../GuidePanel/GuideLineLineCtrl.Designer.cs | 570 +++++
CanFly/UI/GuidePanel/GuideLineLineCtrl.cs | 526 +++++
CanFly/UI/GuidePanel/GuideLineLineCtrl.resx | 145 ++
CanFly/Util/FormUtils.cs | 41 +
CanFly/XKRS.CanFly.csproj | 61 +
DH.Commons/DetectionConfig.cs | 120 +
DH.Commons/Helper/EnumHelper.cs | 10 +-
DHSoftware.sln | 24 +
DHSoftware/DHSoftware.csproj | 3 +
DHSoftware/MainWindow.cs | 7 +-
DHSoftware/Views/DetectControl.Designer.cs | 109 +-
DHSoftware/Views/DetectControl.cs | 181 +-
DHSoftware/Views/DetectControl.resx | 10 +-
.../Views/DetectionLableEdit.Designer.cs | 1 +
DHSoftware/Views/DetectionLableEdit.resx | 4 +-
DHSoftware/Views/SizeLabelEdit.Designer.cs | 263 +++
DHSoftware/Views/SizeLabelEdit.cs | 94 +
DHSoftware/Views/SizeLabelEdit.resx | 120 +
63 files changed, 12697 insertions(+), 36 deletions(-)
create mode 100644 CanFly.Canvas/CanFly.Canvas.csproj
create mode 100644 CanFly.Canvas/Helper/PointHelper.cs
create mode 100644 CanFly.Canvas/Model/ClickArea.cs
create mode 100644 CanFly.Canvas/Model/Cursor.cs
create mode 100644 CanFly.Canvas/Model/Exception/InvalidShapeException.cs
create mode 100644 CanFly.Canvas/Shape/BaseShape.cs
create mode 100644 CanFly.Canvas/Shape/DoubleClickActionEnum.cs
create mode 100644 CanFly.Canvas/Shape/FlyShape.cs
create mode 100644 CanFly.Canvas/Shape/HighlightSetting.cs
create mode 100644 CanFly.Canvas/Shape/ShapeTypeEnum.cs
create mode 100644 CanFly.Canvas/UI/FlyCanvas.Designer.cs
create mode 100644 CanFly.Canvas/UI/FlyCanvas.cs
create mode 100644 CanFly.Canvas/UI/FlyCanvas.resx
create mode 100644 CanFly/Helper/HDevEngineTool.cs
create mode 100644 CanFly/Program.cs
create mode 100644 CanFly/Properties/Resources.Designer.cs
create mode 100644 CanFly/Properties/Resources.resx
create mode 100644 CanFly/Resources/Close.png
create mode 100644 CanFly/Resources/circle.png
create mode 100644 CanFly/UI/BaseFrmGuide.Designer.cs
create mode 100644 CanFly/UI/BaseFrmGuide.cs
create mode 100644 CanFly/UI/BaseFrmGuide.resx
create mode 100644 CanFly/UI/FrmMain.Designer.cs
create mode 100644 CanFly/UI/FrmMain.cs
create mode 100644 CanFly/UI/FrmMain.resx
create mode 100644 CanFly/UI/FrmMain3.Designer.cs
create mode 100644 CanFly/UI/FrmMain3.cs
create mode 100644 CanFly/UI/FrmMain3.resx
create mode 100644 CanFly/UI/GuidePanel/BaseGuideControl.cs
create mode 100644 CanFly/UI/GuidePanel/BaseGuideControl.resx
create mode 100644 CanFly/UI/GuidePanel/CtrlTitleBar.Designer.cs
create mode 100644 CanFly/UI/GuidePanel/CtrlTitleBar.cs
create mode 100644 CanFly/UI/GuidePanel/CtrlTitleBar.resx
create mode 100644 CanFly/UI/GuidePanel/GuideCircleCtrl.Designer.cs
create mode 100644 CanFly/UI/GuidePanel/GuideCircleCtrl.cs
create mode 100644 CanFly/UI/GuidePanel/GuideCircleCtrl.resx
create mode 100644 CanFly/UI/GuidePanel/GuideHeightCtrl.Designer.cs
create mode 100644 CanFly/UI/GuidePanel/GuideHeightCtrl.cs
create mode 100644 CanFly/UI/GuidePanel/GuideHeightCtrl.resx
create mode 100644 CanFly/UI/GuidePanel/GuideLineCircleCtrl.Designer.cs
create mode 100644 CanFly/UI/GuidePanel/GuideLineCircleCtrl.cs
create mode 100644 CanFly/UI/GuidePanel/GuideLineCircleCtrl.resx
create mode 100644 CanFly/UI/GuidePanel/GuideLineCtrl.Designer.cs
create mode 100644 CanFly/UI/GuidePanel/GuideLineCtrl.cs
create mode 100644 CanFly/UI/GuidePanel/GuideLineCtrl.resx
create mode 100644 CanFly/UI/GuidePanel/GuideLineLineCtrl.Designer.cs
create mode 100644 CanFly/UI/GuidePanel/GuideLineLineCtrl.cs
create mode 100644 CanFly/UI/GuidePanel/GuideLineLineCtrl.resx
create mode 100644 CanFly/Util/FormUtils.cs
create mode 100644 CanFly/XKRS.CanFly.csproj
create mode 100644 DHSoftware/Views/SizeLabelEdit.Designer.cs
create mode 100644 DHSoftware/Views/SizeLabelEdit.cs
create mode 100644 DHSoftware/Views/SizeLabelEdit.resx
diff --git a/CanFly.Canvas/CanFly.Canvas.csproj b/CanFly.Canvas/CanFly.Canvas.csproj
new file mode 100644
index 0000000..8037f3d
--- /dev/null
+++ b/CanFly.Canvas/CanFly.Canvas.csproj
@@ -0,0 +1,28 @@
+
+
+
+
+ net8.0-windows
+ enable
+ enable
+ ..\
+ output
+ true
+ true
+ AnyCPU;x64
+
+
+
+
+
+
+
+
+
+
+
diff --git a/CanFly.Canvas/Helper/PointHelper.cs b/CanFly.Canvas/Helper/PointHelper.cs
new file mode 100644
index 0000000..e8bb4c9
--- /dev/null
+++ b/CanFly.Canvas/Helper/PointHelper.cs
@@ -0,0 +1,88 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CanFly.Canvas.Helper
+{
+ public static class PointHelper
+ {
+ public static Point ToPoint(this PointF pf)
+ {
+ return new Point((int)pf.X, (int)pf.Y);
+ }
+
+ ///
+ /// 将相对于控件的坐标转换为相对于图像的坐标
+ ///
+ /// 控件中指定点的点位坐标,坐标原点为控件左上角
+ /// 该点以图像坐标系为基准的坐标值,坐标原点为图像左上角
+ public static PointF ToImageCoordinate(this Point p, Matrix m)
+ {
+ PointF pf = new PointF(p.X, p.Y);
+ return ToImageCoordinate(pf, m);
+ }
+
+ ///
+ /// 将相对于控件的坐标转换为相对于图像的坐标
+ ///
+ /// 控件中指定点的点位坐标,坐标原点为控件左上角
+ /// 该点以图像坐标系为基准的坐标值,坐标原点为图像左上角
+ public static PointF ToImageCoordinate(this PointF p, Matrix m)
+ {
+ PointF[] ps = new PointF[] { p };
+ Matrix invertMatrix = m.Clone();
+ //想要从旧空间到新空间的逆变换,所以我们需要对这个矩阵求逆
+ invertMatrix.Invert();
+ invertMatrix.TransformPoints(ps);
+ return ps[0];
+ }
+
+ ///
+ /// 将相对于图像的坐标转换为相对于控件坐标系
+ ///
+ /// 图像中指定点的点位坐标,坐标原点为图像左上角
+ /// 该点以空间坐标系为基准的坐标值,坐标原点为空间坐左上角
+ public static PointF ToControlCoordinate(this PointF p, Matrix m)
+ {
+ PointF[] ps = new PointF[] { p };
+ m.TransformPoints(ps);
+ return ps[0];
+ }
+
+
+
+
+ public static float Distance(PointF p1, PointF p2)
+ {
+ return (float)Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
+ }
+
+ public static float DistanceToLine(PointF point, PointF start, PointF end)
+ {
+ float lineLengthSquared = DistanceSquared(start, end);
+ if (lineLengthSquared == 0)
+ {
+ return Distance(point, start); // 线段的两个端点重合
+ }
+
+ float t = ((point.X - start.X) * (end.X - start.X) + (point.Y - start.Y) * (end.Y - start.Y)) / lineLengthSquared;
+ t = Math.Clamp(t, 0, 1); // 限制 t 在 [0, 1] 范围内
+
+ PointF projection = new PointF(
+ start.X + t * (end.X - start.X),
+ start.Y + t * (end.Y - start.Y));
+
+ return Distance(point, projection);
+ }
+
+
+ public static float DistanceSquared(PointF p1, PointF p2)
+ {
+ return (float)(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2));
+ }
+
+ }
+}
diff --git a/CanFly.Canvas/Model/ClickArea.cs b/CanFly.Canvas/Model/ClickArea.cs
new file mode 100644
index 0000000..802973c
--- /dev/null
+++ b/CanFly.Canvas/Model/ClickArea.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CanFly.Canvas.Model
+{
+ ///
+ /// 点击的区域
+ ///
+ internal enum ClickArea
+ {
+
+ ///
+ /// 未知区域
+ ///
+ AREA_UNKNOW,
+
+
+ ///
+ /// 图片区域
+ ///
+ AREA_IMG,
+
+
+ ///
+ /// 缺陷元素区域
+ ///
+ AREA_DEFECT,
+ }
+}
diff --git a/CanFly.Canvas/Model/Cursor.cs b/CanFly.Canvas/Model/Cursor.cs
new file mode 100644
index 0000000..dd838aa
--- /dev/null
+++ b/CanFly.Canvas/Model/Cursor.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace LabelSharp.Config
+{
+ public static class CustomCursors
+ {
+
+ public static Cursor CURSOR_DEFAULT = Cursors.Arrow;
+ public static Cursor CURSOR_POINT = Cursors.Hand;
+ public static Cursor CURSOR_DRAW = Cursors.Cross;
+ public static Cursor CURSOR_MOVE = Cursors.Hand;
+ public static Cursor CURSOR_GRAB = Cursors.Hand;
+
+
+
+
+ }
+}
diff --git a/CanFly.Canvas/Model/Exception/InvalidShapeException.cs b/CanFly.Canvas/Model/Exception/InvalidShapeException.cs
new file mode 100644
index 0000000..6b1ba58
--- /dev/null
+++ b/CanFly.Canvas/Model/Exception/InvalidShapeException.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CanFly.Canvas.Model.Exception
+{
+ internal class InvalidShapeException : System.Exception
+ {
+ }
+}
diff --git a/CanFly.Canvas/Shape/BaseShape.cs b/CanFly.Canvas/Shape/BaseShape.cs
new file mode 100644
index 0000000..b5acaa8
--- /dev/null
+++ b/CanFly.Canvas/Shape/BaseShape.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CanFly.Canvas.Shape
+{
+ public abstract class BaseShape
+ {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ }
+}
diff --git a/CanFly.Canvas/Shape/DoubleClickActionEnum.cs b/CanFly.Canvas/Shape/DoubleClickActionEnum.cs
new file mode 100644
index 0000000..944c28d
--- /dev/null
+++ b/CanFly.Canvas/Shape/DoubleClickActionEnum.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CanFly.Canvas.Shape
+{
+ internal enum DoubleClickActionEnum
+ {
+ None,
+ Close,
+
+ }
+}
diff --git a/CanFly.Canvas/Shape/FlyShape.cs b/CanFly.Canvas/Shape/FlyShape.cs
new file mode 100644
index 0000000..4d96583
--- /dev/null
+++ b/CanFly.Canvas/Shape/FlyShape.cs
@@ -0,0 +1,938 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing.Drawing2D;
+using System.Linq;
+using System.Runtime.Serialization.Formatters.Binary;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+using CanFly.Canvas.Helper;
+using Newtonsoft.Json;
+using System.Diagnostics;
+using System.Net.NetworkInformation;
+using System.Drawing;
+
+
+namespace CanFly.Canvas.Shape
+{
+ [Serializable]
+ public class FlyShape
+ {
+ private const float DFT_VTX_EPSILON = 4f;
+ private float _epsilon = DFT_VTX_EPSILON;
+
+ public float LineWidth { get; set; } = 2f;
+
+
+ #region Shape颜色
+
+ #region drawing
+ public Color line_color = Color.FromArgb(128, 0, 255, 0);
+ public Color fill_color = Color.FromArgb(64, 0, 0, 0);
+ public Color vertex_fill_color = Color.FromArgb(255, 0, 255, 0);
+ #endregion
+
+ #region selecting / hovering
+ public Color select_line_color = Color.FromArgb(255, 255, 255, 255);
+ public Color select_fill_color = Color.FromArgb(64, 0, 255, 0);
+ public Color hvertex_fill_color = Color.FromArgb(255, 255, 255, 255);
+ #endregion
+
+ #endregion
+
+
+ private PointTypeEnum point_type = PointTypeEnum.ROUND;
+ private float point_size = 8.0f;
+
+ private float _scale = 1.0f;
+ private float scale
+ {
+ get
+ {
+ return _scale;
+ }
+ set
+ {
+ _scale = value;
+ }
+ }
+
+
+
+
+ private ShapeTypeEnum _shape_type;
+ private Matrix _matrix = new Matrix();
+
+
+
+
+ public ShapeTypeEnum ShapeType
+ {
+ get => _shape_type;
+ set { _shape_type = value; }
+ }
+
+
+ public string label = "";
+ public int? group_id = null;
+ private List _points
+ {
+ get;
+ set;
+ } = new List();
+
+ public List Points
+ {
+ get { return _points; }
+ set
+ {
+ this._points = value;
+ }
+ }
+
+
+ private List _pointsRaw = new List();
+
+
+ ///
+ /// 辅助节点
+ ///
+ public List GuidePoints = new List();
+
+ public float _currentRotateAngle;
+ private bool _isRotating = false;
+
+
+ public List point_labels = new List();
+
+
+ private ShapeTypeEnum _shape_type_raw;
+
+
+ ///
+ /// 是否填充多边形。使用:select_fill_color 或 fill_color 填充。
+ ///
+ public bool fill = false;
+
+
+ public bool Selected { get; set; } = false;
+ public object? flags;
+ public string description = "";
+ private List