using HalconDotNet; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static LB_VisionProcesses.Alogrithms.Halcon.HFindModelTool; namespace LB_VisionProcesses.Alogrithms.Halcon { public partial class HMulitModelControl : UserControl { public HFindModelTool HFindModelTool = new HFindModelTool(); public string fullPath = string.Empty; public Action DeleteModel; public Action RenameModel; HWindowControl hWindowControl = new HWindowControl(); public HMulitModelControl() { InitializeComponent(); } public HMulitModelControl(string fullPath) { InitializeComponent(); pnlModelImg.Controls.Clear(); pnlModelImg.Controls.Add(hWindowControl); hWindowControl.Dock = DockStyle.Fill; this.fullPath = fullPath; HFindModelTool.Load(fullPath); if (HFindModelTool.ModelID.hvModel != null && HFindModelTool.ModelID.hvModel.Length > 0) { HModel hModel = HFindModelTool.ModelID; HObject ho_ModelContours = new HObject(); switch (HFindModelTool.ModelID.Type) { case ModelType.局部变形模板: HOperatorSet.GetDeformableModelContours(out ho_ModelContours, HFindModelTool.ModelID.hvModel, 1); break; case ModelType.各向异形模板: default: HOperatorSet.GetShapeModelContours(out ho_ModelContours, HFindModelTool.ModelID.hvModel, 1); break; } HOperatorSet.GetImageSize(HFindModelTool.ModelID.hoImage, out HTuple hv_Width, out HTuple hv_Height); HOperatorSet.VectorAngleToRigid(-hv_Height / 2, -hv_Width / 2, 0, 0, 0, 0, out HTuple hv_HomMat2D); HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ModelContours, hv_HomMat2D); if (HFindModelTool.ModelID.hoImage != null) { hWindowControl.Dock = DockStyle.Fill; HOperatorSet.ClearWindow(hWindowControl.HalconWindow); HOperatorSet.GetImageSize(HFindModelTool.ModelID.hoImage, out HTuple hv_imageWidth, out HTuple hv_imageHeight); HOperatorSet.SetPart(hWindowControl.HalconWindow, 0, 0, hv_imageHeight - 1, hv_imageWidth - 1); HOperatorSet.DispObj(HFindModelTool.ModelID.hoImage, hWindowControl.HalconWindow); HOperatorSet.SetColor(hWindowControl.HalconWindow, "red"); HOperatorSet.DispObj(ho_ModelContours, hWindowControl.HalconWindow); txtModelName.Text = HFindModelTool.ModelID.ModelName; } } } public HMulitModelControl(int index, string name) { InitializeComponent(); pnlModelImg.Controls.Clear(); pnlModelImg.Controls.Add(hWindowControl); hWindowControl.Dock = DockStyle.Fill; lblIndex.Text = index.ToString(); txtModelName.Text = name; HFindModelTool = new HFindModelTool(); HFindModelTool.strProcessName = name; HFindModelTool.ModelID.ModelName = name; } private void btnEditModel_Click(object sender, EventArgs e) { if (HFindModelTool != null) { //HFindModelTool的InputImage有值则会显示图片 ProcessEditForm processEditForm = new ProcessEditForm(HFindModelTool, fullPath); processEditForm.ShowDialog(); UpdataModelUI(); } } private void btnDelModel_Click(object sender, EventArgs e) { DeleteModel?.Invoke(lblIndex.Text); } public void UpdataModelUI() { if (HFindModelTool.ModelID.hvModel != null && HFindModelTool.ModelID.hvModel.Length > 0) { HModel hModel = HFindModelTool.ModelID; HObject ho_ModelContours = new HObject(); switch (HFindModelTool.ModelID.Type) { case ModelType.局部变形模板: HOperatorSet.GetDeformableModelContours(out ho_ModelContours, HFindModelTool.ModelID.hvModel, 1); break; case ModelType.各向异形模板: default: HOperatorSet.GetShapeModelContours(out ho_ModelContours, HFindModelTool.ModelID.hvModel, 1); break; } if (HFindModelTool.ModelID.hoImage != null) { HOperatorSet.GetImageSize(HFindModelTool.ModelID.hoImage, out HTuple hv_Width, out HTuple hv_Height); HOperatorSet.VectorAngleToRigid(-hv_Height / 2, -hv_Width / 2, 0, 0, 0, 0, out HTuple hv_HomMat2D); HOperatorSet.AffineTransContourXld(ho_ModelContours, out ho_ModelContours, hv_HomMat2D); HOperatorSet.ClearWindow(hWindowControl.HalconWindow); HOperatorSet.GetImageSize(HFindModelTool.ModelID.hoImage, out HTuple hv_imageWidth, out HTuple hv_imageHeight); HOperatorSet.SetPart(hWindowControl.HalconWindow, 0, 0, hv_imageHeight - 1, hv_imageWidth - 1); HOperatorSet.DispObj(HFindModelTool.ModelID.hoImage, hWindowControl.HalconWindow); HOperatorSet.SetColor(hWindowControl.HalconWindow, "red"); HOperatorSet.DispObj(ho_ModelContours, hWindowControl.HalconWindow); } } } public void Rename(int index, string newName) { this.BeginInvoke(new Action(() => { lblIndex.Text = index.ToString(); txtModelName.Text = newName; HFindModelTool.strProcessName = newName; HFindModelTool.ModelID.ModelName = newName; })); } } }