天天看點

NETC#調用Visionpro視覺軟體ToolBlock工具檔案

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); 
        }


    }//類
}//命名空間