2026-01-26 14:51:28 +09:00

134 lines
4.1 KiB
C#

/*
* 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;
}
}
}