Files
VisionEdit/HalconTool/FormHalconTool.cs
eggplantlwj 62477b8091 1、修复因加入输入位姿引发的BUG
2、PMA工具完善
3、其他BUG修复
2022-03-21 14:48:26 +08:00

210 lines
7.9 KiB
C#
Raw 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;
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)
{
rdo_readMultImage_CheckedChanged(null, null);
this.imageDispPanel.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)
{
}
myHalconTool.Run(SoftwareRunState.Debug);
ParamsTrans();
}
public void InitTool()
{
tbx_imagePath.Text = myHalconTool.imagePath;
tbx_imageDirectory.Text = myHalconTool.imageDirectoryPath;
ckb_RGBToGray.Checked = myHalconTool.RGBToGray;
ckb_autoSwitch.Checked = myHalconTool.autoSwitch;
}
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;
}
}
/// <summary>
/// 将数据传递给HalconToolInterface
/// </summary>
private void ParamsTrans()
{
myToolInfo.toolOutput.Clear();
myToolInfo.toolOutput.Add(new ToolIO("OutputImage", myHalconTool.outputImage, DataType.Image));
}
}
}