From 8a3ab64a65da226636743be07c4bee63f50da25d Mon Sep 17 00:00:00 2001
From: patrick.xu <patrick.xu@broconcentric.com>
Date: 星期六, 06 三月 2021 11:35:20 +0800
Subject: [PATCH] 1. 解决软件异常崩溃问题

---
 src/Bro.M071.Process/M071Models.cs |  202 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 181 insertions(+), 21 deletions(-)

diff --git a/src/Bro.M071.Process/M071Models.cs b/src/Bro.M071.Process/M071Models.cs
index be596b7..790745a 100644
--- a/src/Bro.M071.Process/M071Models.cs
+++ b/src/Bro.M071.Process/M071Models.cs
@@ -3,6 +3,7 @@
 using Bro.Common.Helper;
 using Bro.Common.Interface;
 using Bro.Common.Model;
+using HalconDotNet;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
@@ -11,10 +12,46 @@
 using System.Drawing.Design;
 using System.Linq;
 using System.Text;
+using System.Threading;
 using System.Threading.Tasks;
 
 namespace Bro.M071.Process
 {
+    public class KeyLocation : IComplexDisplay
+    {
+        [Category("閿悕閰嶇疆")]
+        [Description("鍗曢敭閿悕")]
+        [TypeConverter(typeof(KeyNameDictConverter))]
+        public string Key { get; set; }
+
+        [Category("榛樿閰嶇疆")]
+        [Description("鏄惁榛樿灏哄閰嶇疆")]
+        public bool IsDefault { get; set; } = false;
+
+        //[Category("浣嶇疆閰嶇疆")]
+        //[Description("鍗曢敭鍦ㄩ敭鐩樺钩闈㈠浘涓婄殑浣嶇疆鏄剧ず")]
+        //public RectangleF KeyRect { get; set; } = new RectangleF(0, 0, 0, 0);
+
+        [Category("浣嶇疆閰嶇疆")]
+        [Description("鍗曢敭宸︿笂瑙掑潗鏍�")]
+        [TypeConverter(typeof(ComplexObjectConvert))]
+        [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
+        public CustomizedPoint KeyPosition { get; set; } = new CustomizedPoint();
+
+        [Category("浣嶇疆閰嶇疆")]
+        [Description("鍗曢敭灏哄")]
+        public SizeF KeySize { get; set; } = new SizeF();
+
+        [Category("浣嶇疆閰嶇疆")]
+        [Description("鍗曢敭涔嬪悗闂撮殭浣嶇疆")]
+        public SizeF IntervalSize { get; set; } = new SizeF();
+
+        public string GetDisplayText()
+        {
+            return $"{(IsDefault ? "Default" : Key)}:{KeyPosition.X},{KeyPosition.Y},{KeySize.Width},{KeySize.Height}";
+        }
+    }
+
     public class KeyAlgorithem : IComplexDisplay
     {
         [Browsable(false)]
@@ -46,6 +83,15 @@
         [Description("妫�娴嬬畻娉曡矾寰�")]
         [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
         public string AlgorithemPath { get; set; }
+
+        [Category("涓婁紶NG浠g爜")]
+        [Description("涓婁紶NG浠g爜")]
+        public string NGCode { get; set; }
+
+        [Category("鏄剧ず閰嶇疆")]
+        [Description("鏄剧ず鍖哄煙澶у皬")]
+        [DisplayName("鏍囩澶у皬")]
+        public Size DisplayRect { get; set; }
     }
 
     public class KeyResult : IComplexDisplay
@@ -73,7 +119,7 @@
     {
         public string GetDisplayText()
         {
-            return (IsEnabled ? "" : "绂佺敤 ") + Name + " " + string.Join(" ", Destination.Select(u => u.GetDisplayText())) + " " + CameraOp.GetDisplayText();
+            return (IsEnabled ? "" : "绂佺敤 ") + Name + " " + MotionOp.GetDisplayText() + " " + CameraOp.GetDisplayText();
         }
 
         public List<string> GetHalconToolPathList()
@@ -99,16 +145,22 @@
         [Description("true锛氬惎鐢� false锛氱鐢�")]
         public bool IsEnabled { get; set; } = true;
 
-        [Category("璁惧閰嶇疆")]
-        [Description("杩愬姩璁惧")]
-        [TypeConverter(typeof(DeviceSelectorConverter<IMotion>))]
-        public string MotionDevice { get; set; }
+        //[Category("璁惧閰嶇疆")]
+        //[Description("杩愬姩璁惧")]
+        //[TypeConverter(typeof(DeviceSelectorConverter<IMotion>))]
+        //public string MotionDevice { get; set; }
 
-        [Category("杩愬姩鐐逛綅")]
-        [Description("杩愬姩鐐逛綅")]
+        //[Category("杩愬姩鐐逛綅")]
+        //[Description("杩愬姩鐐逛綅")]
+        //[TypeConverter(typeof(ComplexObjectConvert))]
+        //[Editor(typeof(ComplexCollectionEditor<AxisInfo>), typeof(UITypeEditor))]
+        //public List<AxisInfo> Destination { get; set; } = new List<AxisInfo>();
+
+        [Category("杩愬姩鏈烘瀯閰嶇疆")]
+        [Description("杩愬姩鏈烘瀯閰嶇疆")]
         [TypeConverter(typeof(ComplexObjectConvert))]
-        [Editor(typeof(ComplexCollectionEditor<AxisInfo>), typeof(UITypeEditor))]
-        public List<AxisInfo> Destination { get; set; } = new List<AxisInfo>();
+        [Editor(typeof(IOperationConfigByDeviceEditor), typeof(UITypeEditor))]
+        public DeviceOpBind MotionOp { get; set; } = new DeviceOpBind();
 
         [Category("鐩告満鍜屾搷浣滈厤缃�")]
         [Description("鐩告満鍜屾搷浣滈厤缃�")]
@@ -129,13 +181,13 @@
             get => key;
             set
             {
-                AlignName = key = value;
+                AliasName = key = value;
             }
         }
 
         [Category("閿悕閰嶇疆")]
         [Description("鍒悕")]
-        public string AlignName { get; set; }
+        public string AliasName { get; set; }
 
         [Category("鍚敤璁剧疆")]
         [Description("true锛氬惎鐢� false锛氱鐢�")]
@@ -170,7 +222,22 @@
 
         public string GetDisplayText()
         {
-            return $"{AlignName}";
+            string snapShot = "鏈寚瀹�";
+
+            using (var scope = GlobalVar.Container.BeginLifetimeScope())
+            {
+                var config = scope.Resolve<IProcessConfig>();
+                if (config != null)
+                {
+                    var snapshotPoint = (config as M071Config).SnapshotPointCollection.FirstOrDefault(u => u.Id == SnapshotPointId);
+                    if (snapshotPoint != null)
+                    {
+                        snapShot = snapshotPoint.Name;
+                    }
+                }
+            }
+
+            return $"{AliasName}-{snapShot}-{ImageSeq}";
         }
 
         public List<string> GetHalconToolPathList()
@@ -195,18 +262,25 @@
 
     public class ProductionMeasurement : INotifyPropertyChanged, IDisposable
     {
-        public string Barcode { get; set; }
+        public string Barcode;
+        public string PResult;
 
-        public List<MeasurementUint> Measurements { get; set; } = new List<MeasurementUint>();
+        public List<MeasurementUnit> Measurements = new List<MeasurementUnit>();
+
+        public List<IShapeElement> ElementList = new List<IShapeElement>();
+
+        public DateTime? StartTime = null;
+
+        public DateTime? EndTime = null;
 
         public event PropertyChangedEventHandler PropertyChanged;
 
         public void Dispose()
         {
-            Barcode = null;
-
             Measurements?.ForEach(m => m?.Dispose());
             Measurements = null;
+            ElementList = null;
+            //Barcode = null;
             GC.Collect();
         }
 
@@ -225,7 +299,7 @@
         }
     }
 
-    public class MeasurementUint : IComplexDisplay, INotifyPropertyChanged, IDisposable
+    public class MeasurementUnit : IComplexDisplay, INotifyPropertyChanged, IDisposable
     {
         public string Id = Guid.NewGuid().ToString();
 
@@ -252,7 +326,7 @@
 
         #region 鏄剧ず
         [Browsable(false)]
-        public Rectangle DisplayLocation { get; set; } = new Rectangle();
+        public Rectangle DisplayLocation { get; set; } = new Rectangle(10, 10, 100, 100);
         #endregion
 
         #region 妫�娴嬬粨鏋�
@@ -273,7 +347,7 @@
         {
             if (string.IsNullOrWhiteSpace(Name))
             {
-                return (IsEnabled ? "" : "绂佺敤 ") + string.Join("-", KeyUnitCollection.Select(u => u.GetDisplayText())) + "-" + MeasureType.ToString();
+                return (IsEnabled ? "" : "绂佺敤 ") + string.Join("-", KeyUnitCollection.Select(u => u.GetDisplayText())) + "-" + MeasureType?.ToString();
             }
             else
             {
@@ -290,6 +364,44 @@
         {
             PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("KeyUnitCollection"));
         }
+
+        public MeasurementUnit Copy()
+        {
+            MeasurementUnit mUnit = new MeasurementUnit();
+
+            mUnit.Id = this.Id;
+            mUnit.Name = this.Name;
+            if (string.IsNullOrWhiteSpace(mUnit.Name))
+            {
+                mUnit.Name = string.Join("-", KeyUnitCollection.Select(u => u.GetDisplayText()));
+            }
+
+            mUnit.IsEnabled = this.IsEnabled;
+            mUnit.MeasureType = this.MeasureType;
+
+            mUnit.DisplayLocation = new Rectangle(this.DisplayLocation.Location, this.DisplayLocation.Size);
+
+            if (this.Spec == null)
+            {
+                mUnit.Spec = null;
+            }
+            else
+            {
+                mUnit.Spec = new MeasureType();
+                mUnit.Spec.Code = this.Spec.Code;
+                mUnit.Spec.AlgorithemPath = this.Spec.AlgorithemPath;
+                mUnit.Spec.StandardValue = this.Spec.StandardValue;
+                mUnit.Spec.Tolrenance_Positive = this.Spec.Tolrenance_Positive;
+                mUnit.Spec.Tolrenance_Negative = this.Spec.Tolrenance_Negative;
+            }
+
+            this.KeyUnitCollection.ForEach(k =>
+            {
+                mUnit.KeyUnitCollection.Add(k.Copy());
+            });
+
+            return mUnit;
+        }
     }
 
     public class KeyUnitBind : IComplexDisplay, INotifyPropertyChanged, IDisposable
@@ -302,8 +414,12 @@
         [Category("鍗曢敭閰嶇疆")]
         [Description("鍗曢敭缁撴灉閰嶇疆")]
         [TypeConverter(typeof(KeyUnitResultConverter))]
-        public string KeyResult { get; set; } = "";
+        public string KeyResultId { get; set; } = "";
 
+
+        public List<HImage> KeyImages = new List<HImage>();
+
+        public volatile int ImageSaveStatus = 0;
         //[Browsable(false)]
         //public NoticedDictionary<string, double?> MeasureValueDict { get; set; } = new NoticedDictionary<string, double?>();
 
@@ -328,13 +444,24 @@
         {
             string msg = Key;
 
-            msg += string.IsNullOrWhiteSpace(KeyResult) ? "" : $"-{KeyResult}";
+            msg += string.IsNullOrWhiteSpace(KeyResultId) ? "" : $"-{KeyResultId}";
 
             return msg;
         }
 
         public void Dispose()
         {
+            while (ImageSaveStatus != 0)
+            {
+                Thread.Sleep(10);
+            }
+
+            KeyImages?.ForEach(i =>
+            {
+                i?.Dispose();
+                i = null;
+            });
+            KeyImages = null;
             MeasureValueDict = null;
         }
 
@@ -346,6 +473,8 @@
                 if (valuePairs == null || valuePairs.Count == 0)
                 {
                     IsDone = false;
+                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("IsDone"));
+                    return;
                 }
 
                 foreach (KeyValuePair<string, double> pair in valuePairs)
@@ -367,6 +496,37 @@
                 }
             }
         }
+
+        public KeyUnitBind Copy()
+        {
+            KeyUnitBind clone = new KeyUnitBind();
+            clone.Key = this.Key;
+            clone.KeyResultId = this.KeyResultId;
+
+            this.MeasureValueDict.Keys.ToList().ForEach(k =>
+            {
+                clone.MeasureValueDict[k] = null;
+            });
+
+            return clone;
+        }
+    }
+
+    public class KeyCodeMap : IComplexDisplay
+    {
+        [Category("閿悕鏄犲皠閰嶇疆")]
+        [Description("閿悕")]
+        [TypeConverter(typeof(KeyNameDictConverter))]
+        public string Key { get; set; }
+
+        [Category("閿悕鏄犲皠閰嶇疆")]
+        [Description("涓婁紶瀵瑰簲閿唬鐮丆ode")]
+        public string KeyCode { get; set; }
+
+        public string GetDisplayText()
+        {
+            return $"{Key}--{KeyCode}";
+        }
     }
 
     //public class NoticedDictionary<T1, T2> : Dictionary<T1, T2>, INotifyPropertyChanged

--
Gitblit v1.8.0