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<FitLineParam> flp = new List<FitLineParam>();
|
SerializeFileTool<List<FitLineParam>> cfg = new SerializeFileTool<List<FitLineParam>>();
|
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<FitLineParam>();
|
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<FitCircleParam> fcp = new List<FitCircleParam>();
|
SerializeFileTool<List<FitCircleParam>> cfg = new SerializeFileTool<List<FitCircleParam>>();
|
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<FitCircleParam>();
|
fcp.Add(CircleParam);
|
|
cfg.SetConfig(Path, fcp);
|
}
|
|
private void btnFrmMeasure_Click(object sender, EventArgs e)
|
{
|
frmMeasureAssistant frmMeasure = new frmMeasureAssistant(mImage);
|
frmMeasure.ShowDialog();
|
}
|
|
}
|
}
|