using Autofac; using Bro.Common.Interface; using Bro.Common.Model; using Bro.UI.Model.Winform; using System.Data; namespace Bro.M135.Common { public partial class FrmDefectRectangleIndicatorEditor : Form { Canvas canvas = new Canvas(); public FrmDefectRectangleIndicatorEditor() { InitializeComponent(); canvas.Dock = DockStyle.Fill; splitContainer1.Panel1.Controls.Clear(); splitContainer1.Panel1.Controls.Add(canvas); this.Load += FrmDefectRectangleIndicatorEditor_Load; } private void FrmDefectRectangleIndicatorEditor_Load(object? sender, EventArgs e) { try { using (var scope = GlobalVar.Container.BeginLifetimeScope()) { var iConfig = scope.Resolve(); if (iConfig is IDefectIndicatorDisplay idi && iConfig is IDefectSwitcher ids && iConfig is ISpecCollector isc) { var defectList = ids.GetDefectSwitch().Select(u => u.DefectName).ToList(); defectList.AddRange(isc.GetSpecList().Select(u => u.Code)); cboDefectName.DataSource = defectList; if (cboDefectName.Items.Count > 0) { cboDefectName.SelectedIndex = 0; } cboDefectName.TextChanged += CboDefectName_TextChanged; if (!string.IsNullOrWhiteSpace(idi.BackgroundImageFilePath)) { Bitmap image = new Bitmap(idi.BackgroundImageFilePath); if (image != null) { canvas.LoadImage(image); } } idi.DefectIndicatorCollection.ForEach(d => { ROI_Rectangle roi = new ROI_Rectangle(); roi.Name = d.DefectName; roi.BaseColor = d.BaseColor; roi.DisplayRect = new RectangleF(d.DisplayRect.X, d.DisplayRect.Y, d.DisplayRect.Width, d.DisplayRect.Height); canvas.Elements.Add(roi); }); } } canvas.OnElementChangedHandle += Canvas_OnElementChangedHandle; canvas.OnNewElementCreateDone = OnNewElementCreateDone; } catch (Exception ex) { } } private void Canvas_OnElementChangedHandle(IShapeElement obj) { var ele = canvas.Elements.FirstOrDefault(u => u.State == Bro.Common.Helper.EnumHelper.ElementState.Selected); if (ele != null) { cboDefectName.Text = ele.Name; colorPickDefectColor.Value = (ele as ElementBase).BaseColor; } } private void CboDefectName_TextChanged(object? sender, EventArgs e) { var ele = canvas.Elements.FirstOrDefault(u => u.State == Bro.Common.Helper.EnumHelper.ElementState.Selected); if (ele != null) { ele.Name = cboDefectName.Text; } } private void colorPickDefectColor_ValueChanged(object sender, Color value) { var ele = canvas.Elements.FirstOrDefault(u => u.State == Bro.Common.Helper.EnumHelper.ElementState.Selected); if (ele != null) { (ele as ElementBase).BaseColor = colorPickDefectColor.Value; } } private void btnNew_Click(object sender, EventArgs e) { ROI_Rectangle roi = new ROI_Rectangle(); roi.IsShowRemark = false; canvas.SetNewROIType(roi); } private bool OnNewElementCreateDone(Bitmap arg1, IShapeElement ele) { if (ele is ElementBase b) { b.Name = cboDefectName.Text; b.BaseColor = colorPickDefectColor.Value; b.IsShowRemark = true; } return true; } private void btnDelete_Click(object sender, EventArgs e) { var ele = canvas.Elements.FirstOrDefault(u => u.State == Bro.Common.Helper.EnumHelper.ElementState.Selected); if (ele != null) { canvas.Elements.Remove(ele); } } private void btnClose_Click(object sender, EventArgs e) { List indicators = new List(); canvas.Elements.ToList().ForEach(u => { if (u is ROI_Rectangle roi) { DefectRectangleIndicator indicator = new DefectRectangleIndicator() { DefectName = u.Name, BaseColor = roi.BaseColor, DisplayRect = new RectangleF(roi.DisplayRect.X, roi.DisplayRect.Y, roi.DisplayRect.Width, roi.DisplayRect.Height) }; indicators.Add(indicator); } }); using (var scope = GlobalVar.Container.BeginLifetimeScope()) { var iConfig = scope.Resolve(); if (iConfig is IDefectIndicatorDisplay config) { config.DefectIndicatorCollection = new List(indicators); } } this.DialogResult = DialogResult.OK; } } }