using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.IO; using System.Text; using System.Windows.Forms; using HalconDotNet; namespace HalconTools { public partial class frmFitCircleAndLine : Form { public frmFitCircleAndLine() { InitializeComponent(); Init(); } ROICircle roi = new ROICircle(); ROILine roi2 = new ROILine(); private HImage mImage; public frmFitCircleAndLine(JobTool tool,HImage image) { InitializeComponent(); Init(); //国际化 ResourceCulture.SetCurrentCulture("zh-CN"); ResourceCulture.SetLanguage((Control)this); mImage = image; mFitAssistant.SetImage(image); mFitAssistant.UpdateImage(); switch (tool.type) { case ToolType.FindCircle: if (tool.fitCircleParam == null) { fitCircleParamSet = new HalconTools.MeasureParamSave(); fitCircleParamSet = fitCircleParamSet.Load(System.Windows.Forms.Application.StartupPath + "\\MeasureConfige\\MeasureConfige.xml"); showFitCircleParam(fitCircleParamSet); } else { CircleParam = tool.fitCircleParam; fitCircleParamSet = new MeasureParamSave(); fitCircleParamSet.hv_measure_Length1 = tool.fitCircleParam.hv_measure_Length1; fitCircleParamSet.hv_measure_Length2 = tool.fitCircleParam.hv_measure_Length2; fitCircleParamSet.hv_measure_sigma = tool.fitCircleParam.hv_measure_sigma; fitCircleParamSet.hv_measure_position = tool.fitCircleParam.hv_measure_position; fitCircleParamSet.hv_measure_transition = tool.fitCircleParam.hv_measure_transition; fitCircleParamSet.hv_measure_number = (int)tool.fitCircleParam.hv_measure_number; fitCircleParamSet.hv_measure_threshold = tool.fitCircleParam.hv_measure_threshold; fitCircleParamSet.hv_measure_interpolation = tool.fitCircleParam.hv_measure_interpolation; showFitCircleParam(fitCircleParamSet); mFitAssistant.viewController.resetAll(); mFitAssistant.viewController.repaint(); mFitAssistant.roiController.setROIShape(roi); roi.hradius = tool.fitCircleParam.hv_Radius; roi.midR = tool.fitCircleParam.hv_RowCenter; roi.midC = tool.fitCircleParam.hv_ColumnCenter; try { mFitAssistant.roiController.mouseDownAction(roi.midC, roi.midR); } catch (Exception ex) { } } break; case ToolType.FindLine: if (tool.fitLineParam == null) { fitLineParamSet = new HalconTools.MeasureParamSave(); fitLineParamSet = fitLineParamSet.Load(System.Windows.Forms.Application.StartupPath + "\\MeasureConfige\\MeasureConfige.xml"); showFitLineParam(fitLineParamSet); } else { LineParam = tool.fitLineParam; fitLineParamSet = new MeasureParamSave(); fitLineParamSet.hv_measure_Length1 = tool.fitLineParam.hv_measure_Length1; fitLineParamSet.hv_measure_Length2 = tool.fitLineParam.hv_measure_Length2; fitLineParamSet.hv_measure_sigma = tool.fitLineParam.hv_measure_sigma; fitLineParamSet.hv_measure_position = tool.fitLineParam.hv_measure_position; fitLineParamSet.hv_measure_transition = tool.fitLineParam.hv_measure_transition; fitLineParamSet.hv_measure_number = (int)tool.fitLineParam.hv_measure_number; fitLineParamSet.hv_measure_threshold = tool.fitLineParam.hv_measure_threshold; fitLineParamSet.hv_measure_interpolation = tool.fitLineParam.hv_measure_interpolation; showFitLineParam(fitLineParamSet); mFitAssistant.viewController.resetAll(); mFitAssistant.viewController.repaint(); mFitAssistant.roiController.setROIShape(roi2); roi2.hcol = (tool.fitLineParam.hv_ColumnEnd - tool.fitLineParam.hv_ColumnBegin) / 2; roi2.hrow = (tool.fitLineParam.hv_RowEnd - tool.fitLineParam.hv_RowBegin) / 2; roi2.midR = (tool.fitLineParam.hv_RowBegin + tool.fitLineParam.hv_RowEnd) / 2; roi2.midC = (tool.fitLineParam.hv_ColumnBegin + tool.fitLineParam.hv_ColumnEnd) / 2; try { mFitAssistant.roiController.mouseDownAction(roi2.midC, roi2.midR); } catch (Exception ex) { } } break; } } public frmFitCircleAndLine(string name) { InitializeComponent(); ResourceCulture.SetCurrentCulture(name); ResourceCulture.SetLanguage((Control)this); Init(); } /* base variables */ //public HWndCtrl viewController; //public ROIController roiController; private HalconTools.FitAssistant mFitAssistant; private void frmFitCircleAndLine_Load(object sender, EventArgs e) { } 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 (!mFitAssistant.SetImage(imagePath.FileName)) { return; } mFitAssistant.UpdateImage(); } } private void Init() { mFitAssistant = new FitAssistant(viewPort); mFitAssistant.FitLineDone += new FitLineDelegate(mFitAssistant_FitLineDone); mFitAssistant.FitCircleDone += new FitCircleDelegate(mFitAssistant_FitCircleDone); } void mFitAssistant_FitCircleDone(object sender, HImage image, FitCircleResult result) { mFitAssistant.FitCircleGraphics(mFitAssistant.viewController, image, result); } void mFitAssistant_FitLineDone(object sender, HImage image, FitLineResult result) { //throw new NotImplementedException(); mFitAssistant.FitLineGraphics(mFitAssistant.viewController, image, result); } private void RbNone_CheckedChanged(object sender, EventArgs e) { mFitAssistant.viewController.setViewState(HWndCtrl.MODE_VIEW_NONE); } private void RbMove_CheckedChanged(object sender, EventArgs e) { mFitAssistant.viewController.setViewState(HWndCtrl.MODE_VIEW_MOVE); } private void RbZoom_CheckedChanged(object sender, EventArgs e) { mFitAssistant.viewController.setViewState(HWndCtrl.MODE_VIEW_ZOOM); } private void btnFitZoom_Click(object sender, EventArgs e) { mFitAssistant.viewController.resetWindow(); mFitAssistant.viewController.repaint(); } private void BtnResetView_Click(object sender, EventArgs e) { mFitAssistant.viewController.resetAll(); mFitAssistant.viewController.repaint(); } private void BtnLineRoi_Click(object sender, EventArgs e) { //先清除所有ROI mFitAssistant.viewController.resetAll(); mFitAssistant.viewController.repaint(); mFitAssistant.roiController.setROIShape(roi2); } private void btnCircleRoi_Click(object sender, EventArgs e) { //先清除所有ROI mFitAssistant.viewController.resetAll(); mFitAssistant.viewController.repaint(); mFitAssistant.roiController.setROIShape(roi); } public FitLineParam LineParam = new FitLineParam(); private void btnFitLine_Click(object sender, EventArgs e) { LinePosition linePosition = mFitAssistant.GetLinePosition(); if (linePosition == null) { linePosition = new LinePosition(); linePosition.hv_ColumnBegin = roi2.col1; linePosition.hv_ColumnEnd = roi2.col2; linePosition.hv_RowBegin = roi2.row1; linePosition.hv_RowEnd = roi2.row2; } labRowBeginSet.Text = linePosition.hv_RowBegin.ToString(); labColumnBeginSet.Text = linePosition.hv_ColumnBegin.ToString(); labRowEndSet.Text = linePosition.hv_RowEnd.ToString(); labColumnEndSet.Text = linePosition.hv_ColumnEnd.ToString(); LineParam.hv_RowBegin = linePosition.hv_RowBegin; LineParam.hv_ColumnBegin = linePosition.hv_ColumnBegin; LineParam.hv_RowEnd = linePosition.hv_RowEnd; LineParam.hv_ColumnEnd = linePosition.hv_ColumnEnd; //LineParam.hv_measure_Length1 = fitLineParamSet.hv_measure_Length1; //LineParam.hv_measure_Length2 = fitLineParamSet.hv_measure_Length2; //LineParam.hv_measure_sigma = fitLineParamSet.hv_measure_sigma; //LineParam.hv_measure_position = fitLineParamSet.hv_measure_position; //LineParam.hv_measure_transition = fitLineParamSet.hv_measure_transition; //LineParam.hv_measure_number = fitLineParamSet.hv_measure_number; //LineParam.hv_measure_threshold = fitLineParamSet.hv_measure_threshold; //LineParam.hv_measure_interpolation = fitLineParamSet.hv_measure_interpolation; LineParam.hv_measure_Length1 = fitLineParamSet.hv_measure_Length1; LineParam.hv_measure_Length2 = Convert.ToDouble(txtROIWidthSet.Text); LineParam.hv_measure_sigma = Convert.ToDouble(txtSmoothingSet.Text); LineParam.hv_measure_position = txtPositionSet.Text; LineParam.hv_measure_transition = txtTransitionSet.Text; LineParam.hv_measure_number = Convert.ToDouble(txtNumberSet.Text); LineParam.hv_measure_threshold = Convert.ToDouble(txtMinEdgeAmplSet.Text); LineParam.hv_measure_interpolation = txtInterpolationSet.Text; //FitLineResult result; mFitAssistant.FitLine(LineParam); } public FitCircleParam CircleParam = new FitCircleParam(); private void btnFitCircle_Click(object sender, EventArgs e) { CirclePosition circlePosition = mFitAssistant.GetCirClePosition(); if (circlePosition == null) { circlePosition = new CirclePosition(); circlePosition.hv_Column = roi.col1; circlePosition.hv_Row = roi.row1; circlePosition.hv_Radius = roi.radius; } labRowSet_Circle.Text = circlePosition.hv_Row.ToString(); labColumnSet_Circle.Text = circlePosition.hv_Column.ToString(); labRadiusSet_Circle.Text = circlePosition.hv_Radius.ToString(); CircleParam.hv_ColumnCenter = circlePosition.hv_Column; CircleParam.hv_RowCenter = circlePosition.hv_Row; CircleParam.hv_Radius = circlePosition.hv_Radius; CircleParam.hv_measure_Length1 = fitCircleParamSet.hv_measure_Length1; CircleParam.hv_measure_Length2 = fitCircleParamSet.hv_measure_Length2; CircleParam.hv_measure_sigma = fitCircleParamSet.hv_measure_sigma; CircleParam.hv_measure_position = fitCircleParamSet.hv_measure_position; CircleParam.hv_measure_transition = fitCircleParamSet.hv_measure_transition; CircleParam.hv_measure_number = fitCircleParamSet.hv_measure_number; CircleParam.hv_measure_threshold = fitCircleParamSet.hv_measure_threshold; CircleParam.hv_measure_interpolation = fitCircleParamSet.hv_measure_interpolation; mFitAssistant.FitCircle(CircleParam); } HalconTools.MeasureParamSave fitLineParamSet; private void btnLoadConfige_Line_Click(object sender, EventArgs e) { fitLineParamSet = new HalconTools.MeasureParamSave(); OpenFileDialog imagePath = new OpenFileDialog(); imagePath.Filter = "*.xml|*.xml"; if (imagePath.ShowDialog() == DialogResult.OK) { fitLineParamSet = fitLineParamSet.Load(imagePath.FileName); showFitLineParam(fitLineParamSet); } } private void showFitLineParam(HalconTools.MeasureParamSave param) { this.labMinEdgeAmplSet.Text = param.hv_measure_threshold.ToString(); this.labSmoothingSet.Text = param.hv_measure_sigma.ToString(); this.labInterpolationSet.Text = param.hv_measure_interpolation; this.labTransitionSet.Text = param.hv_measure_transition; this.labPositionSet.Text = param.hv_measure_position; this.labNumberSet.Text = param.hv_measure_number.ToString(); this.labROIWidthSet.Text = param.hv_measure_Length2.ToString(); this.numUDRoiHeight.Value = Convert.ToDecimal( param.hv_measure_Length1); this.txtMinEdgeAmplSet.Text = param.hv_measure_threshold.ToString(); this.txtSmoothingSet.Text = param.hv_measure_sigma.ToString(); this.txtInterpolationSet.Text = param.hv_measure_interpolation; this.txtTransitionSet.Text = param.hv_measure_transition; this.txtPositionSet.Text = param.hv_measure_position; this.txtNumberSet.Text = param.hv_measure_number.ToString(); this.txtROIWidthSet.Text = param.hv_measure_Length2.ToString(); } private void viewPort_HMouseDown(object sender, HMouseEventArgs e) { LinePosition linePosition = mFitAssistant.GetLinePosition(); CirclePosition circlePosition = mFitAssistant.GetCirClePosition(); if (linePosition != null && tabControl1.SelectedIndex == 0) { labRowBeginSet.Text = linePosition.hv_RowBegin.ToString(); labColumnBeginSet.Text = linePosition.hv_ColumnBegin.ToString(); labRowEndSet.Text = linePosition.hv_RowEnd.ToString(); labColumnEndSet.Text = linePosition.hv_ColumnEnd.ToString(); } else { labRowBeginSet.Text = "-"; labColumnBeginSet.Text = "-"; labRowEndSet.Text = "-"; labColumnEndSet.Text = "-"; } if (circlePosition != null && tabControl1.SelectedIndex == 1) { //labRowBeginSet.Text = linePosition.hv_RowBegin.ToString(); //labColumnBeginSet.Text = linePosition.hv_ColumnBegin.ToString(); //labRowEndSet.Text = linePosition.hv_RowEnd.ToString(); //labColumnEndSet.Text = linePosition.hv_ColumnEnd.ToString(); } else { labRowBeginSet.Text = "-"; labColumnBeginSet.Text = "-"; labRowEndSet.Text = "-"; labColumnEndSet.Text = "-"; } } HalconTools.MeasureParamSave fitCircleParamSet; private void btnLoadConfige_Circle_Click(object sender, EventArgs e) { fitCircleParamSet = new HalconTools.MeasureParamSave(); OpenFileDialog imagePath = new OpenFileDialog(); imagePath.Filter = "*.xml|*.xml"; if (imagePath.ShowDialog() == DialogResult.OK) { fitCircleParamSet = fitCircleParamSet.Load(imagePath.FileName); showFitCircleParam(fitCircleParamSet); } } private void showFitCircleParam(HalconTools.MeasureParamSave param) { this.labMinEdgeAmplSet_Circle.Text = param.hv_measure_threshold.ToString(); this.labSmoothingSet_Circle.Text = param.hv_measure_sigma.ToString(); this.labInterpolationSet_Circle.Text = param.hv_measure_interpolation; this.labTransitionSet_Circle.Text = param.hv_measure_transition; this.labPositionSet_Circle.Text = param.hv_measure_position; this.labNumberSet_Circle.Text = param.hv_measure_number.ToString(); this.labROIWidthSet_Circle.Text = param.hv_measure_Length2.ToString(); this.numUDRoiHeight_Circle.Value = Convert.ToDecimal(param.hv_measure_Length1); } private void numUDRoiHeight_ValueChanged(object sender, EventArgs e) { } private void btnParaAdd_Click(object sender, EventArgs e) { string Path = Application.StartupPath + "\\FitConfig"; if (!Directory.Exists(Path)) { Directory.CreateDirectory(Path); } Path += "\\fitLineConfig.xml"; List flp = new List(); SerializeFileTool> cfg = new SerializeFileTool>(); flp = cfg.GetConfig(Path); #region 获取参数 FitLineParam LineParam = new FitLineParam(); LineParam.hv_RowBegin = Convert.ToDouble(labRowBeginSet.Text); LineParam.hv_ColumnBegin = Convert.ToDouble(labColumnBeginSet.Text); LineParam.hv_RowEnd = Convert.ToDouble(labRowEndSet.Text); LineParam.hv_ColumnEnd = Convert.ToDouble(labColumnEndSet.Text); LineParam.hv_measure_Length1 = fitLineParamSet.hv_measure_Length1; LineParam.hv_measure_Length2 = fitLineParamSet.hv_measure_Length2; LineParam.hv_measure_sigma = fitLineParamSet.hv_measure_sigma; LineParam.hv_measure_position = fitLineParamSet.hv_measure_position; LineParam.hv_measure_transition = fitLineParamSet.hv_measure_transition; LineParam.hv_measure_number = fitLineParamSet.hv_measure_number; LineParam.hv_measure_threshold = fitLineParamSet.hv_measure_threshold; LineParam.hv_measure_interpolation = fitLineParamSet.hv_measure_interpolation; #endregion if (flp == null) flp = new List(); flp.Add(LineParam); cfg.SetConfig(Path, flp); } private void btnParaAdd_Circle_Click(object sender, EventArgs e) { string Path = Application.StartupPath + "\\FitConfig"; if (!Directory.Exists(Path)) { Directory.CreateDirectory(Path); } Path += "\\fitCircleConfig.xml"; List fcp = new List(); SerializeFileTool> cfg = new SerializeFileTool>(); fcp = cfg.GetConfig(Path); #region 获取参数 CirclePosition circlePosition = mFitAssistant.GetCirClePosition(); FitCircleParam CircleParam = new FitCircleParam(); CircleParam.hv_ColumnCenter = Convert.ToDouble(labColumnSet_Circle.Text); CircleParam.hv_RowCenter = Convert.ToDouble(labRowSet_Circle.Text); CircleParam.hv_Radius = Convert.ToDouble(labRadiusSet_Circle.Text); CircleParam.hv_measure_Length1 = fitCircleParamSet.hv_measure_Length1; CircleParam.hv_measure_Length2 = fitCircleParamSet.hv_measure_Length2; CircleParam.hv_measure_sigma = fitCircleParamSet.hv_measure_sigma; CircleParam.hv_measure_position = fitCircleParamSet.hv_measure_position; CircleParam.hv_measure_transition = fitCircleParamSet.hv_measure_transition; CircleParam.hv_measure_number = fitCircleParamSet.hv_measure_number; CircleParam.hv_measure_threshold = fitCircleParamSet.hv_measure_threshold; CircleParam.hv_measure_interpolation = fitCircleParamSet.hv_measure_interpolation; #endregion if (fcp == null) fcp = new List(); fcp.Add(CircleParam); cfg.SetConfig(Path, fcp); } private void btnFrmMeasure_Click(object sender, EventArgs e) { frmMeasureAssistant frmMeasure = new frmMeasureAssistant(mImage); frmMeasure.ShowDialog(); } } }