/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using Aurora.View; using Newtonsoft.Json; using System; using System.ComponentModel; using System.Drawing; namespace VisionCommon { public enum ePatternType { None, ImageModelFinder, ShapeModelFinder, PatternMatching, LineFinder, MultiLineFinder, MultiOcr, // Multi Ocr EdgeFinder, Caliper, Blob, Code, // Barcode, QRCode, DataMatrix Ocr, // String Read + OCR Read + Tesseract AI Brightness, LineIntersection = 20, LineWidth, MachinePattern_A = 30, MachinePattern_B, MachinePattern_C } public class PatternInfo : NotifyPropertyChangedBase, ICloneable { private bool _IsActivated = true; public bool IsActivated { get => _IsActivated; set => SetProperty(ref _IsActivated, value); } public ePatternType PatternType { get; set; } = ePatternType.None; public string PatternName { get; set; } = string.Empty; public string Description { get; set; } = string.Empty; public LightInfo LightInfo { get; set; } = new LightInfo(); public PreProcessingParam PreProcParam { get; set; } = new PreProcessingParam(); public FixtureSetting FixtureSetting { get; set; } = new FixtureSetting(); [JsonIgnore] public PatternIndex PatternIndex { get; set; } [JsonIgnore] public int MilSystemId { get; set; } [JsonIgnore] public Bitmap Thumbnail { get; set; } = ThumbnailUtil.GetDefaultImage(); public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); public string GetPatternDirectoryPath() { return PatternIndex.GetPatternDirectoryPath(); } public string GetSubPatternDirectoryPath() { return PatternIndex.GetSubPatternDirectoryPath(); } public PatternIndex GetPatternIndex() { return PatternIndex; } public string GetFullId() { return ToString(); } public override string ToString() { return PatternIndex.ToString(); } public string GetPrefix() { return PatternIndex.GetPrefix(); } public string GetPatternIdPrefix() { return PatternIndex.GetPatternIdPrefix(); } public int GetPatternId() { return PatternIndex.PatternId; } public void SetPatternId(int patternId) { PatternIndex.PatternId = patternId; } public int GetPatternSubId() { return PatternIndex.PatternSubId; } public void SetPatternSubId(int patternSubId) { PatternIndex.PatternSubId = patternSubId; } public bool IsMainPattern(string idPrefix) { return GetFullId().StartsWith(idPrefix) && PatternIndex.PatternSubId == PatternConstants.MAIN_PATTERN_INDEX; } public bool IsSubPattern(string idPrefix) { return GetFullId().StartsWith(idPrefix) && PatternIndex.PatternSubId != PatternConstants.MAIN_PATTERN_INDEX; } public bool IsRegistered() { return PatternType != ePatternType.None; } public object Clone() { return new PatternInfo() { IsActivated = IsActivated, PatternType = PatternType, PatternName = PatternName, Description = Description, LightInfo = LightInfo.Clone(), PatternIndex = PatternIndex.Clone() as PatternIndex, MilSystemId = MilSystemId, PreProcParam = PreProcParam.Clone(), FixtureSetting = FixtureSetting.Clone() as FixtureSetting, }; } /// /// ContainsKey 메소드 사용, 객체 비교를 위해 반드시 override 해야 함. /// /// 해쉬코드 public override bool Equals(object obj) { if (this.GetType() != obj.GetType()) { return false; } return PatternIndex.Equals(((PatternInfo)obj).PatternIndex); } /// /// ContainsKey 메소드 사용, 객체 비교를 위해 반드시 override 해야 함. /// /// 해쉬코드 public override int GetHashCode() { return PatternIndex.GetHashCode(); } } }