using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using HalconDotNet; namespace HalconTools { public partial class frmScrewAssistant : Form { HImage MainImage = new HImage(); ScrewAssistant mScrewAssistant; public ScrewParam mScrewPara = new ScrewParam(); ScrewResult mScrewResult = new ScrewResult(); HXLDCont thresholdXLD = new HXLDCont(); HXLDCont roundnessXLD = new HXLDCont(); HXLDCont selectedXLD = new HXLDCont(); SerializeFileTool sft = new SerializeFileTool(); public frmScrewAssistant() { InitializeComponent(); init(); } public frmScrewAssistant(JobTool tool ,HImage image) { InitializeComponent(); init(); MainImage = image; mScrewAssistant.SetImage(MainImage); mScrewAssistant.UpdateImage(); if (tool.screwParam == null) { mScrewPara.ThresholdSubPix = 200; mScrewPara.RoundnessMin = 0.8; mScrewPara.RoundnessMax = 1; mScrewPara.RadiusMin = 100; mScrewPara.RadiusMax = 200; } else { mScrewPara = tool.screwParam; } } private void frmScrewAssistant_Load(object sender, EventArgs e) { if (mScrewPara.ThresholdSubPix == null) { string path = System.Windows.Forms.Application.StartupPath + "\\ScrewConfige"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } path += "\\ScrewConfige.xml"; if (!File.Exists(path)) { mScrewPara.ThresholdSubPix = 200; mScrewPara.RoundnessMin = 0.8; mScrewPara.RoundnessMax = 1; mScrewPara.RadiusMin = 100; mScrewPara.RadiusMax = 200; sft.SetConfig(path, mScrewPara); } mScrewPara = sft.GetConfig(path); } txtThresholdSubPix.Text = mScrewPara.ThresholdSubPix.ToString(); txtRoundnessMin.Text = mScrewPara.RoundnessMin.ToString(); txtRoundnessMax.Text = mScrewPara.RoundnessMax.ToString(); txtRadiusMin.Text = mScrewPara.RadiusMin.ToString(); txtRadiusMax.Text = mScrewPara.RadiusMax.ToString(); } private void init() { mScrewAssistant = new ScrewAssistant(hWindowControl1); mScrewAssistant.SetPara(mScrewPara); mScrewAssistant.ScrewDone += new ScrewDelegate(mScrewAssistant_ScrewDone); } void mScrewAssistant_ScrewDone(ScrewResult result) { if (result == null) { MessageBox.Show("没找到"); } else { HOperatorSet.DispCircle(hWindowControl1.HalconWindow, result.row, result.col, result.radius); } } private void rbNone_CheckedChanged(object sender, EventArgs e) { mScrewAssistant.viewController.setViewState(HWndCtrl.MODE_VIEW_NONE); } private void rbMove_CheckedChanged(object sender, EventArgs e) { mScrewAssistant.viewController.setViewState(HWndCtrl.MODE_VIEW_MOVE); } private void rbZoom_CheckedChanged(object sender, EventArgs e) { mScrewAssistant.viewController.setViewState(HWndCtrl.MODE_VIEW_ZOOM); } private void btnReset_Click(object sender, EventArgs e) { mScrewAssistant.viewController.resetWindow(); mScrewAssistant.viewController.repaint(); } private void btnThresholdSubPix_Click(object sender, EventArgs e) { mScrewPara.ThresholdSubPix = Convert.ToDouble(txtThresholdSubPix.Text); mScrewAssistant.SetPara(mScrewPara); thresholdXLD = mScrewAssistant.ThresholdSubPix(mScrewAssistant.mImage); mScrewAssistant.UpdateObj((HObject)thresholdXLD, "green"); } private void btnRoundness_Click(object sender, EventArgs e) { mScrewPara.RoundnessMin = Convert.ToDouble(txtRoundnessMin.Text); mScrewPara.RoundnessMax = Convert.ToDouble(txtRoundnessMax.Text); mScrewAssistant.SetPara(mScrewPara); roundnessXLD = mScrewAssistant.RoundnessXLD(thresholdXLD); mScrewAssistant.UpdateObj((HObject)roundnessXLD, "red"); } private void btnRadius_Click(object sender, EventArgs e) { mScrewPara.RadiusMin = Convert.ToDouble(txtRadiusMin.Text); mScrewPara.RadiusMax = Convert.ToDouble(txtRadiusMax.Text); mScrewAssistant.SetPara(mScrewPara); selectedXLD = mScrewAssistant.SelectXLD(roundnessXLD); mScrewAssistant.UpdateObj((HObject)selectedXLD, "black"); } private void btnRun_Click(object sender, EventArgs e) { mScrewAssistant.UpdateImage(); mScrewAssistant.Run(); } private void btnSavePara_Click(object sender, EventArgs e) { mScrewPara.RadiusMax = Convert.ToDouble(txtRadiusMax.Text); mScrewPara.RadiusMin = Convert.ToDouble(txtRadiusMin.Text); mScrewPara.RoundnessMax = Convert.ToDouble(txtRoundnessMax.Text); mScrewPara.RoundnessMin = Convert.ToDouble(txtRoundnessMin.Text); mScrewPara.ThresholdSubPix = Convert.ToDouble(txtThresholdSubPix.Text); mScrewAssistant.SetPara(mScrewPara); string path = System.Windows.Forms.Application.StartupPath + "\\ScrewConfige"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } path += "\\ScrewConfige.xml"; sft.SetConfig(path, mScrewPara); } private void btnLoadImage_Click(object sender, EventArgs e) { OpenFileDialog imagePath = new OpenFileDialog(); imagePath.Filter = "*.jpg,*.jpeg,*.bmp,*.gif,*.ico,*.png,*.tif,*.wmf|*.jpg;*.jpeg;*.bmp;*.gif;*.ico;*.png;*.tif;*.wmf"; if (imagePath.ShowDialog() == DialogResult.OK) { if (!mScrewAssistant.SetImage(imagePath.FileName)) { return; } MainImage = mScrewAssistant.mImage; mScrewAssistant.UpdateImage(); } } } }