领胜LDS 键盘AOI检测项目
patrick.xu
2021-01-24 b5e7fa2db4ac36fdb7bf9fd330d12a72ade9d483
src/Bro.M071.Process/M071Models.cs
@@ -17,6 +17,41 @@
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)]
@@ -48,6 +83,15 @@
        [Description("检测算法路径")]
        [Editor(typeof(FileDialogEditor), typeof(UITypeEditor))]
        public string AlgorithemPath { get; set; }
        [Category("上传NG代码")]
        [Description("上传NG代码")]
        public string NGCode { get; set; }
        [Category("显示配置")]
        [Description("显示区域大小")]
        [DisplayName("标签大小")]
        public Size DisplayRect { get; set; }
    }
    public class KeyResult : IComplexDisplay
@@ -137,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:禁用")]
@@ -178,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()
@@ -204,10 +263,15 @@
    public class ProductionMeasurement : INotifyPropertyChanged, IDisposable
    {
        public string Barcode;
        public string PResult;
        public List<MeasurementUint> Measurements = 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;
@@ -215,8 +279,8 @@
        {
            Measurements?.ForEach(m => m?.Dispose());
            Measurements = null;
            Barcode = null;
            ElementList = null;
            //Barcode = null;
            GC.Collect();
        }
@@ -235,7 +299,7 @@
        }
    }
    public class MeasurementUint : IComplexDisplay, INotifyPropertyChanged, IDisposable
    public class MeasurementUnit : IComplexDisplay, INotifyPropertyChanged, IDisposable
    {
        public string Id = Guid.NewGuid().ToString();
@@ -262,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 检测结果
@@ -299,6 +363,44 @@
        private void K_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            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;
        }
    }
@@ -349,10 +451,9 @@
        public void Dispose()
        {
            SpinWait wait = new SpinWait();
            while (ImageSaveStatus != 0)
            {
                wait.SpinOnce();
                Thread.Sleep(10);
            }
            KeyImages?.ForEach(i =>
@@ -372,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)
@@ -393,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("上传对应键代码Code")]
        public string KeyCode { get; set; }
        public string GetDisplayText()
        {
            return $"{Key}--{KeyCode}";
        }
    }
    //public class NoticedDictionary<T1, T2> : Dictionary<T1, T2>, INotifyPropertyChanged