在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → halcon HDevEngine功能

halcon HDevEngine功能

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:27.86M
  • 下载次数:149
  • 浏览次数:1960
  • 发布时间:2019-06-21
  • 实例类别:C#语言基础
  • 发 布 人:Robin723
  • 文件格式:.zip
  • 所需积分:4
 相关标签: Halcon Engine

实例介绍

【实例简介】

目的://此示例程序显示如何使用类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程序

【实例截图】

from clipboard

【核心代码】


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

} 


标签: Halcon Engine

实例下载地址

halcon HDevEngine功能

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警