From 007782bf44e49b4e3d5166ef361ac9fd03cad9c2 Mon Sep 17 00:00:00 2001
From: kingno <30263@KINGNO>
Date: 星期二, 17 六月 2025 13:07:43 +0800
Subject: [PATCH] 合并

---
 src/Bro.M141.Process/M141Process_ImageCheck.cs |  110 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 110 insertions(+), 0 deletions(-)

diff --git a/src/Bro.M141.Process/M141Process_ImageCheck.cs b/src/Bro.M141.Process/M141Process_ImageCheck.cs
index 3b69ea8..fc4dc13 100644
--- a/src/Bro.M141.Process/M141Process_ImageCheck.cs
+++ b/src/Bro.M141.Process/M141Process_ImageCheck.cs
@@ -8,7 +8,9 @@
 using Microsoft.VisualBasic;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Linq;
+using NPOI.SS.UserModel;
 using NPOI.Util;
+using NPOI.XSSF.UserModel;
 using Sunny.UI;
 using System.Data;
 using System.Data.SqlTypes;
@@ -439,6 +441,8 @@
 
             return msg;
         }
+        
+
 
 
         [ProcessMethod("", "ProductDataUpload", "浜у搧鏁版嵁姹囨��", InvokeType.TestInvoke)]
@@ -503,6 +507,109 @@
         }
 
 
+        private bool _isDemoStarted = false;
+        [ProcessMethod("OfflineDemo", "OfflineDemo", "绂荤嚎娴嬭瘯", InvokeType.CalibInvoke)]
+        public ResponseMessage OfflineDemo(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
+        {
+            if (config is OfflineDemoOperationConfig opConfig)
+            {
+                if (_isDemoStarted)
+                {
+                    _isDemoStarted = false;
+                }
+                else
+                {
+                    _isDemoStarted = true;
+                    OfflineDemoAsync(opConfig.ImageFolder);
+                }
+            }
+
+            return new ResponseMessage();
+        }
+
+        private async void OfflineDemoAsync(string imageFolder)
+        {
+            await Task.Run(() =>
+            {
+                var imageFileNames = new DirectoryInfo(imageFolder).GetFiles().Select(u => u.FullName).ToList();
+
+                for (int i = 0; i < imageFileNames.Count; i++)
+                {
+                    if (!_isDemoStarted)
+                    {
+                        return;
+                    }
+
+                    var imageFile = Path.GetFileNameWithoutExtension(imageFileNames[i]);
+                    if (imageFile.EndsWith("Fit"))
+                    {
+                        continue;
+                    }
+
+                    var nameDatas = imageFile.Split(new char[] { '_'}, StringSplitOptions.RemoveEmptyEntries).ToList();
+                    if (nameDatas.Count != 5)
+                    {
+                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Error, $"鏂囦欢{imageFile}鍛藉悕涓嶇鍚堣鑼冿紝涓嶆墽琛岀绾挎祴璇�");
+                        continue;
+                    }
+
+                    var sn = nameDatas[0];
+                    var imageSeq = nameDatas[1];
+
+                    var measureBind = M141Config.MeasureBindCollection.FirstOrDefault(u => u.ImageSaveSeq == imageSeq);
+                    if (measureBind == null || !measureBind.IsFixed)
+                    {
+                        LogAsync(DateTime.Now, EnumHelper.LogLevel.Assist, $"绂荤嚎娴嬭瘯锛屽伐浣峽(measureBind == null ? "鏈尮閰�" : $"{measureBind.WorkPosition}鏈紑鍚�")}");
+                        continue;
+                    }
+
+                    LogAsync(DateTime.Now, EnumHelper.LogLevel.Action, $"绂荤嚎娴嬭瘯锛屼骇鍝亄sn}寮�濮嬪伐浣峽measureBind.WorkPosition}绂荤嚎妫�娴�");
+                    MLImageSet imgSet = new MLImageSet();
+                    imgSet.HImage = new HalconDotNet.HImage(imageFileNames[i]);
+                    imgSet.PID = sn;
+
+                    var detectResults = ML.RunMLDetectionSync(imgSet, null, measureBind.DetectionId);
+
+                    imgSet.HImage?.Dispose();
+                    imgSet.HImage = null;
+
+
+
+                    //var defectFields = M141Config.DefectLocationSettings.FirstOrDefault(u => u.PositionCode == measureBind.WorkPosition);
+
+
+                    //var list = detectResults.SelectMany(u => u.NetResults.SelectMany(m => m.DetectDetails)).ToList();
+                    ////if (list.Count > 0)
+                    ////{
+                    ////    //list.ForEach(d =>
+                    ////    //{
+                    ////    //    //if (defectFields == null)
+                    ////    //    //{
+                    ////    //    //    d.Tag = "";
+                    ////    //    //}
+                    ////    //    //else
+                    ////    //    //{
+                    ////    //    //    RectangleF rect = new RectangleF(d.Rect.Point_LU.X, d.Rect.Point_LU.Y, d.Rect.Width, d.Rect.Height);
+                    ////    //    //    //var rectList = defectFields.Display.RectDict.Where(u => rect.IntersectsWith(u.Value)).ToList();
+                    ////    //    //    //if (rectList.Count > 0)
+                    ////    //    //    //{
+                    ////    //    //    //    d.Tag = string.Join(" ", rectList.Select(u => u.Key).OrderBy(u => u));
+                    ////    //    //    //}
+                    ////    //    //    //else
+                    ////    //    //    //{
+                    ////    //    //    //    d.Tag = "";
+                    ////    //    //    //}
+                    ////    //    //}
+                    ////    //});
+                    ////}
+
+                    //Bitmap originImage = new Bitmap(imageFileNames[i]);
+                    //DetectResultSaveExcelAsync(detectResults, sn, originImage, DateTime.Now);
+                }
+            });
+        }
+    
+
 
         [ProcessMethod("printer", "printer", "鎵撳嵃鏈烘墦鍗�", InvokeType.TestInvoke)]
         public ResponseMessage Printer(IOperationConfig config, IDevice invokeDevice, IDevice sourceDevice)
@@ -560,6 +667,9 @@
             return specList;
         }
 
+
+
+
         protected void FillSpecResults(string pid, List<ISpec> detectSpec, List<double> results, string SEQUENCE)
         {
             detectSpec.ForEach(s =>

--
Gitblit v1.8.0