Files
VisionEdit/HalconTool/FormHalconTool.cs
liu.wenjie 7ca84a8720 1、添加手眼标定工具,可选择4点或者9点标定,输出标定矩阵
2、修正Halcon引擎运行工具
3、添加相机SDK工具,但需完善
4、HalconTool取图工具增加选择文件夹功能
5、实现Job窗体可添加多个流程
2022-04-21 14:10:04 +08:00

356 lines
14 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using CommonMethods;
using HalconDotNet;
using ChoiceTech.Halcon.Control;
using ViewROI;
using Sunny.UI;
namespace HalconTool
{
public partial class FormHalconTool : Form
{
public HalconTool myHalconTool = null;
public IToolInfo myToolInfo = null;
public HWindowTool_Smart myHwindow = new HWindowTool_Smart();
public FormHalconTool(ref object halconTool)
{
InitializeComponent();
// 若窗体还未被初始化则此时仍是object类型就无法对类型强转
if (halconTool.GetType().FullName != "System.Object")
{
myToolInfo = (IToolInfo)halconTool;
myHalconTool = (HalconTool)myToolInfo.tool;
}
_instance = this;
}
private static readonly object lockObkect = new object();
private static FormHalconTool _instance;
public static FormHalconTool Instance
{
get
{
if(_instance == null)
{
lock (lockObkect)
{
if (_instance == null)
{
object halconTool = new object();
_instance = new FormHalconTool(ref halconTool);
}
}
}
return _instance;
}
}
//private void rdo_readMultImage_CheckedChanged(object sender, EventArgs e)
//{
// if (rdo_readOneImage.Checked)
// {
// this.ckb_autoSwitch.Visible = false;
// this.panelOneImage.Visible = true;
// this.panelMultImage.Visible = false;
// this.btn_browseImage.Visible = false;
// myHalconTool.workMode = WorkMode.ReadOneImage;
// myHalconTool.outputImageFilePath = myHalconTool.imagePath;
// }
// else
// {
// if(myHalconTool.L_imageFile.Count > 0)
// {
// this.ckb_autoSwitch.Visible = true;
// this.panelMultImage.Visible = true;
// this.panelOneImage.Visible = false;
// this.btn_browseImage.Visible = true;
// myHalconTool.workMode = WorkMode.ReadMultImage;
// myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
// }
// }
// btn_runHalconInterfaceTool_Click(null, null);
//}
private void FormHalconTool_Load(object sender, EventArgs e)
{
gbImageDisp.Controls.Add(myHwindow);
myHwindow.Dock = DockStyle.Fill;
InitTool();
}
//private void btn_readImage_Click(object sender, EventArgs e)
//{
// myHalconTool.ReadImage(out myHalconTool.imagePath);
// this.tbx_imagePath.Text = myHalconTool.imagePath;
// btn_runHalconInterfaceTool_Click(null, null);
//}
//private void btn_runHalconInterfaceTool_Click(object sender, EventArgs e)
//{
// if(myHalconTool.workMode == WorkMode.ReadOneImage)
// {
// }
// if(myHalconTool.workMode == WorkMode.ReadMultImage)
// {
// }
// if (File.Exists(this.tbx_imagePath.Text))
// {
// myHalconTool.Run(SoftwareRunState.Debug);
// myHalconTool.imagePath = tbx_imagePath.Text;
// ParamsTrans();
// }
//}
//private void btn_selectImageDirectory_Click(object sender, EventArgs e)
//{
// myHalconTool.imageDirectoryPath = string.Empty;
// try
// {
// FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
// if (Directory.Exists(myHalconTool.imageDirectoryPath))
// folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath;
// folderBrowseDialog.Description = "请选择图像文件夹路径";
// if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
// {
// myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath;
// this.tbx_imageDirectory.Text = myHalconTool.imageDirectoryPath;
// myHalconTool.L_imageFile.Clear();
// string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath);
// for (int i = 0; i < files.Length; i++)
// {
// FileInfo fileInfo = new FileInfo(files[i]);
// if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif")
// myHalconTool.L_imageFile.Add(files[i]);
// }
// if (myHalconTool.L_imageFile.Count > 0)
// {
// myHalconTool.currentImageIndex = 0;
// myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
// myHalconTool.DispImage();
// myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[0]);
// lbl_imageName.Text = myHalconTool.currentImageName;
// }
// lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
// }
// }
// catch (Exception ex)
// {
// this.lb_RunStatus.Text = ex.Message;
// }
//}
//private void btn_nextImage_Click(object sender, EventArgs e)
//{
// try
// {
// HObject image = new HObject();
// Button btnClick = sender as Button;
// if(btnClick.Name == "btn_nextImage")
// {
// myHalconTool.currentImageIndex = myHalconTool.currentImageIndex + 1;
// }
// else
// {
// myHalconTool.currentImageIndex = myHalconTool.currentImageIndex - 1;
// }
// if (myHalconTool.currentImageIndex > myHalconTool.L_imageFile.Count - 1)
// {
// myHalconTool.currentImageIndex = 0;
// }
// try
// {
// myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
// }
// catch
// {
// lb_RunStatus.Text = "图像文件异常或路径不合法";
// lb_RunStatus.BackColor = Color.Red;
// return;
// }
// myHalconTool.DispImage();
// myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
// Instance.lbl_imageName.Text = myHalconTool.currentImageName;
// Instance.lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
// }
// catch (Exception ex)
// {
// lb_RunStatus.Text = ex.Message;
// lb_RunStatus.BackColor = Color.Red;
// }
//}
// 窗体载入时还原参数
public void InitTool()
{
chbRGB2Gray.Checked = myHalconTool.RGBToGray;
if(myHalconTool.workMode == WorkMode.ReadOneImage)
{
gbSignalImg.Enabled = true;
gbMultImg.Enabled = false;
txbFilePath.Text = myHalconTool.imagePath;
}
else
{
gbSignalImg.Enabled = false;
gbMultImg.Enabled = true;
tbxImageDirectory.Text = myHalconTool.imageDirectoryPath;
lbImageName.Text = myHalconTool.currentImageName;
}
}
/// <summary>
/// 将数据传递给HalconToolInterface
/// </summary>
private void ParamsTrans()
{
myToolInfo.toolOutput[0] = new ToolIO("OutputImage", myHalconTool.outputImage, DataType.Image);
}
private void btnSelectFilePath_Click(object sender, EventArgs e)
{
HTuple channelCount = 0;
OpenFileDialog dig_openImage = new OpenFileDialog();
dig_openImage.Title = "请选择图像文件路径";
dig_openImage.Filter = "图像文件(*.*)|*.*|图像文件(*.png)|*.png|图像文件(*.jpg)|*.jpg|图像文件(*.tif)|*.tif";
if (dig_openImage.ShowDialog() == DialogResult.OK)
{
myHalconTool.imagePath = dig_openImage.FileName;
myHalconTool.outputImageFilePath = dig_openImage.FileName;
txbFilePath.Text = dig_openImage.FileName;
}
}
private void btnRun_Click(object sender, EventArgs e)
{
if (File.Exists(txbFilePath.Text))
{
myHalconTool.outputImageFilePath = txbFilePath.Text;
myHalconTool.imagePath = txbFilePath.Text;
myHalconTool.Run(SoftwareRunState.Debug);
ParamsTrans();
}
else
{
MessageBox.Show("文件不存在,请检查!");
}
}
private void txbFilePath_TextChanged(object sender, EventArgs e)
{
myHalconTool.outputImageFilePath = txbFilePath.Text;
myHalconTool.imagePath = txbFilePath.Text;
}
private void chbRGB2Gray_CheckedChanged(object sender, EventArgs e)
{
myHalconTool.RGBToGray = chbRGB2Gray.Checked;
}
private void ImageSource_Click(object sender, EventArgs e)
{
UIGroupBox myGroupBox = (UIGroupBox)sender;
if (myGroupBox.Text == "单张图像")
{
if(myGroupBox.Enabled == true)
{
gbSignalImg.Enabled = false;
gbMultImg.Enabled = true;
myHalconTool.workMode = WorkMode.ReadMultImage;
}
}
else
{
if (myGroupBox.Enabled == true)
{
gbSignalImg.Enabled = true;
gbMultImg.Enabled = false;
myHalconTool.workMode = WorkMode.ReadOneImage;
}
}
}
private void btnSelectDir_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
if (Directory.Exists(myHalconTool.imageDirectoryPath))
folderBrowseDialog.SelectedPath = myHalconTool.imageDirectoryPath;
folderBrowseDialog.Description = "请选择图像文件夹路径";
if (folderBrowseDialog.ShowDialog() == DialogResult.OK)
{
myHalconTool.imageDirectoryPath = folderBrowseDialog.SelectedPath;
this.tbxImageDirectory.Text = myHalconTool.imageDirectoryPath;
myHalconTool.L_imageFile.Clear();
string[] files = Directory.GetFiles(folderBrowseDialog.SelectedPath);
for (int i = 0; i < files.Length; i++)
{
FileInfo fileInfo = new FileInfo(files[i]);
if (fileInfo.Extension == ".jpg" || fileInfo.Extension == ".bmp" || fileInfo.Extension == ".png" || fileInfo.Extension == ".tif")
myHalconTool.L_imageFile.Add(files[i]);
}
if (myHalconTool.L_imageFile.Count > 0)
{
myHalconTool.currentImageIndex = 0;
myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
myHalconTool.DispImage();
myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
lbImageName.Text = myHalconTool.currentImageName;
}
// lbl_imageNum.Text = "共" + myHalconTool.L_imageFile.Count + "张";
}
}
public void btnNext_Click(object sender, EventArgs e)
{
if (myHalconTool.L_imageFile.Count > 0)
{
int oldIndex = myHalconTool.currentImageIndex;
if(++myHalconTool.currentImageIndex < myHalconTool.L_imageFile.Count)
{
myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
myHalconTool.Run(SoftwareRunState.Debug);
myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
lbImageName.Text = myHalconTool.currentImageName;
}
else
{
myHalconTool.currentImageIndex = oldIndex;
}
}
}
private void btnOld_Click(object sender, EventArgs e)
{
if (myHalconTool.L_imageFile.Count > 0)
{
int oldIndex = myHalconTool.currentImageIndex;
if (--myHalconTool.currentImageIndex >= 0)
{
myHalconTool.outputImageFilePath = myHalconTool.L_imageFile[myHalconTool.currentImageIndex];
myHalconTool.Run(SoftwareRunState.Debug);
myHalconTool.currentImageName = Path.GetFileName(myHalconTool.L_imageFile[myHalconTool.currentImageIndex]);
lbImageName.Text = myHalconTool.currentImageName;
}
else
{
myHalconTool.currentImageIndex = oldIndex;
}
}
}
}
}