基本信息
源码名称:halcon HDevEngine功能
源码大小:27.86M
文件格式:.zip
开发语言:C#
更新时间:2019-06-21
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559

本次赞助数额为: 4 元 
   源码介绍

目的://此示例程序显示如何使用类HDevEngine和HDevOpMultiWindowImpl //来实现鳍检测应用程序。 
//几乎所有应用程序的功能都包含在// HDevelop程序fin_detection.hdev中,该程序可以在//目录hdevelop中找到。 
//当您单击按钮Load时,加载HDevelop程序,当您单击//执行它时执行。 
// HDevOpMultiWindowImpl类实现了HDevelop的内部//运算符。


27.2例子
本节介绍如何使用基于C#和Visual Basic .NET的示例应用程序的HDevEngine / .NET,它们位于子目录 %HALCONEXAMPLES%\ hdevengine \ c#和 %HALCONEXAMPLES%\ hdevengine \ vb.net。在下文中,我们仅描述C#示例; 除了两种语言之间的标准差异外,Visual Basic .NET版本是相同的。此外,与C#版本相比,Visual Basic .NET版本不包含对Linux的支持。

执行HDevelop程序(“执行HDevelop程序”部分),
执行HDevelop程序(“执行HDevelop程序”一节)和
显示操作员(“显示”部分),
错误处理(“错误处理”部分),和
多线程(“创建多线程应用程序”一节)。
27.2.1执行HDevelop程序
在本节中,我们将介绍如何使用HDevEngine加载和执行HDevelop程序。代码片段来自示例应用程序 ExecProgram,它检查塑料部件的边界是否有鳍。图27.1显示了该应用程序的屏幕截图; 它包含两个用于加载和执行HDevelop程序的按钮。

 图片/ exec_program_dotnet_h12
图27.1:执行检测边界上的鳍的HDevelop程序。

27.2.1.1第1步:初始化
首先,我们创建主HDevEngine类HDevEngine的全局实例 。

private HDevEngine MyEngine = new HDevEngine();
加载表单后,我们将路径存储到HDevelop程序并使用方法SetProcedurePath设置外部过程路径:

String ProgramPathString;

private void ExecProgramForm_Load(object sender,System.EventArgs e)
{
  string halconExamples = HSystem.GetSystem(“example_dir”);
  string ProcedurePath = halconExamples @“\ hdevengine \ procedures”;

  ProgramPathString = halconExamples
                      @ “\ hdevengine \ hdevelop \ fin_detection.hdev”;
  if(!HalconAPI.isWindows)
  {
    ProcedurePath = ProcedurePath.Replace('\\','/');
    ProgramPathString = ProgramPathString.Replace('\\','/');
  }
  MyEngine.SetProcedurePath(ProcedurePath);
}
请注意,只有在HDevelop程序调用外部过程时才需要后者。

27.2.1.2第2步:加载程序
单击按钮加载HDevelop程序时,将创建HDevProgram类的实例,并将程序路径作为参数。此外,创建HDevProgramCall的实例供以后使用。构造函数中发生的异常(例如,因为未正确指定文件名)是使用标准C#错误处理机制处理的:

private void LoadBtn_Click(object sender,System.EventArgs e)
{
  尝试
  {
    HDevProgram Program = new HDevProgram(ProgramPathString);
    ProgramCall = new HDevProgramCall(Program);
  }
  catch(HDevEngineException Ex)
  {
    MessageBox.Show(Ex.Message,“HDevEngine异常”);
    返回;
  }
  catch(例外)
  {
    返回;
  }

  //启用执行按钮
  ExecuteBtn.Enabled = true;
}
有关错误处理的更多信息,请参见 “错误处理”部分。

27.2.1.3第3步:执行程序
单击按钮执行程序时,将调用方法mHDEExecuteName:

private void ExecuteBtn_Click(object sender,System.EventArgs e)
{
  尝试
  {
    尝试
    {
      ProgramCall.Execute();
    }
    catch(HDevEngineException Ex)
    {
      MessageBox.Show(Ex.Message,“HDevEngine异常”);
      返回;
    }
  }
  catch(例外)
  {
  }
}
27.2.1.4第4步:获得结果
这就是执行HDevelop程序所需要做的一切。您还可以使用方法GetCtrlVarTuple访问其“结果”,即其变量。在示例程序中,查询提取的fin的区域,然后显示:

双FinArea;
FinArea = ProgramCall.GetCtrlVarTuple(“FinArea”);
Window.SetTposition(150,20);
Window.WriteString(“Fin Area:”);
请注意,只有在程序终止时才能访问程序变量。

27.2.1.5概述:显示结果
如何在程序运行时显示结果将在“显示”部分中介绍 。

27.2.2执行HDevelop程序


using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using HalconDotNet;

namespace ExecProgram
{
    /// <summary>
    /// ExecProgramForm 类窗体
    /// </summary>
    public class ExecProgramForm : System.Windows.Forms.Form
	{
		private HalconDotNet.HWindowControl WindowControl;
		internal System.Windows.Forms.Button LoadBtn;
		internal System.Windows.Forms.Button ExecuteBtn;
        /// <summary>
        /// 必需的设计变量-组件
        /// </summary>
        private System.ComponentModel.Container components = null;
        //第1步:初始化创建主 HDevEngine 类 HDevEngine 的全局实例 。
		private HDevEngine MyEngine = new HDevEngine();
        // 程序调用的实例
        private HDevProgramCall ProgramCall;
        // halcon文件的path //1-2加载表单后,我们将路径存储到HDevelop程序并使用方法 SetProcedurePath 设置外部过程路径
        String ProgramPathString;
		// Hw
		private HWindow Hw;
        /// <summary>
        /// A-主窗体加载
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ExecProgramForm_Load(object sender, System.EventArgs e)
        {
            // 外部程序的路径
            //string halconExamples = HSystem.GetSystem("example_dir");   //"C:\\Users\\Public\\Documents\\MVTec\\HALCON-12.0\\examples"
            string halconExamples = ("A:\\5-亿善插针有无检测");
            string ProcedurePath = halconExamples   @"\hdevengine\procedures";

            ProgramPathString = halconExamples   @"\Blob分析出仿真.hdev";

            MyEngine.SetProcedurePath(ProcedurePath);     //使用方法 SetProcedurePath 设置外部过程路径

            // 禁用执行按钮
            ExecuteBtn.Enabled = false;
        }

        /// <summary>
        /// B-Hw 加载初始化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void WindowControl_HInitWindow(object sender, System.EventArgs e)
        {
            Hw = WindowControl.HalconWindow;

            // Warning: Convenience implementation for rerouting display operators is not thread-safe, use it only to execute programs in the main thread.警告:重新路由显示操作符的便捷实现不是线程安全的,仅用于在主线程中执行程序。

            MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(Hw));       //// HDevOpMultiWindowImpl类实现了HDevelop的内部运算符。
        }

        //C-2第2步:加载程序按钮
        private void LoadBtn_Click(object sender, System.EventArgs e)
        {
            try
            {
                //初始化创建主 Program实例 。
                HDevProgram Program = new HDevProgram(ProgramPathString);
                ProgramCall = new HDevProgramCall(Program);
            }
            catch (HDevEngineException Ex)
            {
                MessageBox.Show(Ex.Message, "HDevEngine 异常");
                return;
            }

            //启用执行按钮
            ExecuteBtn.Enabled = true;
        }

        //D-第3步:执行程序按钮
        private void ExecuteBtn_Click(object sender, System.EventArgs e)
        {
            double Length1;
            try
            {
                ProgramCall.Execute();      //执行实例
                Length1 = ProgramCall.GetCtrlVarTuple("Length1");   // 获取控件变量的值(在main中)
            }
            catch (HDevEngineException Ex)
            {
                MessageBox.Show(Ex.Message, "HDevEngine 异常");
                return;
            }
            // 第4步:获得结果display result
            Hw.SetTposition(150, 20);
            Hw.WriteString("Length1: ");
            Hw.WriteString(String.Format("{0:G}", Length1));
        }



        public ExecProgramForm()
		{
			InitializeComponent();

            //
            // TODO: 在InitializeComponent调用后添加任何构造函数代码
            //
        }

        /// <summary>
        /// 清理正在使用的所有资源。
        /// </summary>
        protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

        #region Designer支持所需的方法Windows Form Designer generated code
        /// <summary>
        /// Designer支持所需的方法 - 不要修改
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
		{
            this.WindowControl = new HalconDotNet.HWindowControl();
            this.LoadBtn = new System.Windows.Forms.Button();
            this.ExecuteBtn = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // WindowControl
            // 
            this.WindowControl.BackColor = System.Drawing.Color.Black;
            this.WindowControl.BorderColor = System.Drawing.Color.Black;
            this.WindowControl.ImagePart = new System.Drawing.Rectangle(0, 0, 768, 576);
            this.WindowControl.Location = new System.Drawing.Point(9, 9);
            this.WindowControl.Name = "WindowControl";
            this.WindowControl.Size = new System.Drawing.Size(850, 409);
            this.WindowControl.TabIndex = 0;
            this.WindowControl.WindowSize = new System.Drawing.Size(850, 409);
            this.WindowControl.HInitWindow  = new HalconDotNet.HInitWindowEventHandler(this.WindowControl_HInitWindow);
            // 
            // LoadBtn
            // 
            this.LoadBtn.Location = new System.Drawing.Point(944, 17);
            this.LoadBtn.Name = "LoadBtn";
            this.LoadBtn.Size = new System.Drawing.Size(100, 24);
            this.LoadBtn.TabIndex = 3;
            this.LoadBtn.Text = "加载hdev";
            this.LoadBtn.Click  = new System.EventHandler(this.LoadBtn_Click);
            // 
            // ExecuteBtn
            // 
            this.ExecuteBtn.Location = new System.Drawing.Point(944, 81);
            this.ExecuteBtn.Name = "ExecuteBtn";
            this.ExecuteBtn.Size = new System.Drawing.Size(100, 25);
            this.ExecuteBtn.TabIndex = 6;
            this.ExecuteBtn.Text = "执行hdev ";
            this.ExecuteBtn.Click  = new System.EventHandler(this.ExecuteBtn_Click);
            // 
            // ExecProgramForm
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
            this.ClientSize = new System.Drawing.Size(1079, 443);
            this.Controls.Add(this.ExecuteBtn);
            this.Controls.Add(this.LoadBtn);
            this.Controls.Add(this.WindowControl);
            this.Name = "ExecProgramForm";
            this.Text = "HDevEngine";
            this.Load  = new System.EventHandler(this.ExecProgramForm_Load);
            this.ResumeLayout(false);

		}
		#endregion

		[STAThread]
		static void Main() 
		{
			Application.Run(new ExecProgramForm());
		}

	}
    //#region 来自网络,参考学习用
    //public class Engine
    //{
    //    private HDevEngine engine = new HDevEngine();       //engine类
    //    private HDevProgramCall programCall;
    //    private string programPath;
    //    private string procedurePath;
    //    private HDevOpMultiWindowImpl MyHDevOperatorImpl;       // HDevOpMultiWindowImpl类实现了HDevelop的内部运算符。

    //    public void initialengine(string filename)
    //    {
    //        programPath = System.Environment.CurrentDirectory   @""   filename   ".hdev";
    //        procedurePath = System.Environment.CurrentDirectory   @"";
    //        if (!HalconAPI.isWindows)
    //        {

    //                }
    //        engine.SetProcedurePath(procedurePath);
    //        // viewPort.HalconWindow.SetLineWidth(4);
    //        MyHDevOperatorImpl = new HDevOpMultiWindowImpl( );
    //        engine.SetHDevOperators(MyHDevOperatorImpl);

    //    }

    //    public void loadengine()
    //    {
    //        try
    //        {
    //            HDevProgram program = new HDevProgram(programPath);
    //            programCall = new HDevProgramCall(program);
    //        }
    //        catch { }
    //    }

    //    public void disposeengine()
    //    {
    //        try
    //        {
    //            programCall.Dispose();
    //        }
    //        catch { }
    //    }
    //    public void inspectengine()
    //    {
    //        try
    //        {
    //            programCall.Execute();
    //        }
    //        catch { }

    //    }

    //}
    //
   // #endregion

}