using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.IO;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.ImageFile;
namespace FXD_ScanLine
{
public partial class Form1 : Form
{
private CogImageFileTool m_ImageFileTool1;
private Thread AcquisionImageThreadObject1; //圖像采集線程1
private bool AcquisionImageThread1_Stop = true; //圖像采集線程1停止标記
public Form1()
{
InitializeComponent();
//圖像處理線程執行個體化1
AcquisionImageThreadObject1 = new Thread(new ThreadStart(AcquisionImageThread1_Function));
//允許跨線程通路界面控件
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
//加載算法檔案
string AlgorithmModalPath = Directory.GetCurrentDirectory() + "/Scanline1.vpp";
cogToolBlockEdit1.Subject = CogSerializer.LoadObjectFromFile(AlgorithmModalPath) as CogToolBlock;
//綁定ToolBlock事件
cogToolBlockEdit1.Subject.Ran += new EventHandler(GetResult1_VisionPro);
//加載圖像
m_ImageFileTool1 = new CogImageFileTool();
m_ImageFileTool1.Operator.Open(Directory.GetCurrentDirectory() + "/離線圖像/1.bmp", CogImageFileModeConstants.Read);
m_ImageFileTool1.Run();
}
//cogToolBlockEdit1綁定事件
public void GetResult1_VisionPro(object sender, EventArgs e)
{
//擷取ToolBlock中輸出參數内容
int OutPutElementsCount=cogToolBlockEdit1.Subject.Outputs.Count;
string[] OutPutElements = cogToolBlockEdit1.Subject.Outputs.GetFormattedTerminalStrings();
for (int i = 0; i < cogToolBlockEdit1.Subject.Outputs.Count; i++)
{
int StartPosition = OutPutElements[i].IndexOf('|');
int EndPosition = OutPutElements[i].LastIndexOf('|');
string OutPutElementsName = OutPutElements[i].Substring(StartPosition + 1, EndPosition - StartPosition - 1);
double OutPutElementsValue = (double)cogToolBlockEdit1.Subject.Outputs[OutPutElementsName].Value;
this.Result_label.Text = OutPutElementsName.ToString() + ":" + OutPutElementsValue + "\n";
}
}
//圖像測試線程函數1
public void AcquisionImageThread1_Function()
{
while (AcquisionImageThread1_Stop)
{
//等待按下測試按鈕
}
while (!AcquisionImageThread1_Stop)
{
cogToolBlockEdit1.Subject.Inputs["Image"].Value = m_ImageFileTool1.OutputImage as CogImage8Grey;
cogToolBlockEdit1.Subject.Run();
DisplayInteractiveImage(cogToolBlockEdit1);
}//while
}
//顯示圖像
public void DisplayInteractiveImage(CogToolBlockEditV2 CogToolBlockEdit)
{
cogRecordDisplay.Image = CogToolBlockEdit.Subject.Inputs["Image"].Value as CogImage8Grey;
cogRecordDisplay.Record = CogToolBlockEdit.Subject.CreateLastRunRecord();
cogRecordDisplay.Fit(true);
}
//開始測試
private void StartTestFunction(object sender, EventArgs e)
{
AcquisionImageThread1_Stop = false; //圖像采集線程1停止标記
}
//開始播放
private void StartPlayFunction(object sender, EventArgs e)
{
//開啟圖像測試線程1
if (AcquisionImageThreadObject1.ThreadState == System.Threading.ThreadState.Unstarted)
{
AcquisionImageThreadObject1.Start();
}
if ((AcquisionImageThreadObject1.ThreadState == System.Threading.ThreadState.Stopped) || (AcquisionImageThreadObject1.ThreadState == System.Threading.ThreadState.Aborted))
{
AcquisionImageThreadObject1 = new Thread(new ThreadStart(AcquisionImageThread1_Function));
AcquisionImageThreadObject1.Start();
}
}
//停止測試
private void StopTestFunction(object sender, EventArgs e)
{
AcquisionImageThread1_Stop = true;
}
//釋放資源
private void Release(object sender, FormClosingEventArgs e)
{
AcquisionImageThread1_Stop = true;
//Application.Exit();
//this.Close();
System.Environment.Exit(0);
}
}//類
}//命名空間