/* * Copyright (c) 2025 LG Electronics Inc. * SPDX-License-Identifier: LicenseRef-LGE-Proprietary */ using Aurora.Api; using Cognex.VisionPro; using Cognex.VisionPro.Display; using CogPattern; using System; using System.Collections; using System.ComponentModel; using System.Windows; using System.Windows.Forms; using VisionCommon; namespace CogUI { public partial class ImageMaskEditWindow : Window { private Logger _Logger = new Logger("ImageMaskEditWindow"); private PatternAgentBase _PatternAgent; private PatternInfo _PatternInfo; private CogDisplay _CogDisplay; public ImageMaskEditWindow( ICogImage inputImage, PatternAgentBase patternAgent, PatternInfo patternInfo) { InitializeComponent(); _PatternAgent = patternAgent; _PatternInfo = patternInfo; SetInputImage(inputImage); SetDisplay(); SetTrainEdge(); } private void SetInputImage(ICogImage inputImage) { var trainParam = _PatternAgent.GetTrainParam(_PatternInfo) as ImageModelFinderTrainParam; cogImageMaskEditV2.Image = inputImage; cogImageMaskEditV2.MaskImage = trainParam.TrainMask as CogImage8Grey; } private void SetDisplay() { if (_CogDisplay == null) { _CogDisplay = GetDisplay(); InitCogDisplay(); } _CogDisplay?.Fit(true); } private void InitCogDisplay() { _CogDisplay.AutoFitWithGraphics = true; _CogDisplay.VerticalScrollBar = false; _CogDisplay.HorizontalScrollBar = false; _CogDisplay.BackColor = System.Drawing.Color.Black; _CogDisplay.AutoFit = true; _CogDisplay.DoubleClick += CogDisplay_DoubleClick; } private void SetTrainEdge() { DisplayDrawer.AddTrainEdge(_CogDisplay, _PatternAgent, _PatternInfo); } private void CogDisplay_DoubleClick(object sender, EventArgs e) { _CogDisplay?.Fit(true); } private CogDisplay GetDisplay() { try { for (int i = 0; i < cogImageMaskEditV2.Controls.Count; i++) { Control[] allControls = GetAllControls(cogImageMaskEditV2.Controls[i]); foreach (Control control in allControls) { if (control.GetType() == typeof(CogDisplay)) return control as CogDisplay; } } } catch (Exception e) { _Logger.FuncE(e.Message); } return null; } public Control[] GetAllControls(Control parentControl) { try { ArrayList allControls = new ArrayList(); Queue queue = new Queue(); queue.Enqueue(parentControl.Controls); while (queue.Count > 0) { Control.ControlCollection controls = (Control.ControlCollection)queue.Dequeue(); if (controls == null || controls.Count == 0) continue; foreach (Control control in controls) { allControls.Add(control); queue.Enqueue(control.Controls); } } return (Control[])allControls.ToArray(typeof(Control)); } catch (Exception e) { _Logger.FuncE(e.Message); } return null; } private void Apply_Button_Click(object sender, RoutedEventArgs e) { this.DialogResult = true; this.Close(); } private void Cancel_Button_Click(object sender, RoutedEventArgs e) { this.DialogResult = false; this.Close(); } public CogImageMaskEditV2 GetMaskEditTool() { return cogImageMaskEditV2; } public void SetMaskImage(ICogImage maskImage) { cogImageMaskEditV2.MaskImage = maskImage as CogImage8Grey; } } }