Halcon12 使用Halcon的Engine直接执行程序无需写外部代码

先丢Wpf页面出来
Halcon12 使用Halcon的Engine直接执行程序无需写外部代码_第1张图片

照例丢代码 反正注释写的清楚

namespace HalconWpf_Engine
{
    /// 
    /// MainWindow.xaml 的交互逻辑
    /// 
    public partial class MainWindow : Window
    {
        #region
        private HDevEngine MyEngine = new HDevEngine();
        // 实例化程序触发
        private HDevProgramCall ProgramCall;
        // HALCON 窗口句柄
        private HWindow Window;


        #endregion
        public MainWindow()
        {
            InitializeComponent();

        }
    /// 
    /// 获取 外部函数存放路径
    /// 
    /// 
    /// 
    private void ProcedurePath_Click(object sender, RoutedEventArgs e)
    {
        //获取 外部函数存放路径
        FolderBrowserDialog ProcedurePath = new FolderBrowserDialog();
        //如果未成功获取
        if (ProcedurePath.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
        {
            return;
        }
        else //绑定并显示 开放读取程序路径控件
        {
            //设定外部函数路径
            MyEngine.SetProcedurePath(ProcedurePath.SelectedPath.Trim());
            //显示路径
            Procedure_Path_TextBox.Text = "外部函数库目录:" + ProcedurePath.SelectedPath.Trim();
            //开放读取程序路径控件
            Program_load_button.IsEnabled = true;
        }
    }

    /// 
    /// 获取程序路径
    /// 
    /// 
    /// 
    private void Program_load_button_Click(object sender, RoutedEventArgs e)
    {
        //获取程序路径
        OpenFileDialog Program_path = new OpenFileDialog();
        //设定允许单选
        Program_path.Multiselect = false;
        //选择框限定文件类型
        Program_path.Filter = "hdev files(*.hdev)|*.hdev|All files(*.*)|*.*";
        //限定成功读取路径
        if (Program_path.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            //通过路径实例化程序
            HDevProgram Program = new HDevProgram(Program_path.FileName);
            /************************************************************
             * 在载入Halcon外部程序之前 需要检查程序里使用的外部函数是否
             * 在函数目录里面已经定义好否者会报错 缺少哪些函数的名称
             ************************************************************/
            //绑定程序到程序触发器
            ProgramCall = new HDevProgramCall(Program);
            //显示路径
            Program_path_TextBox.Text = "程序路径:" + Program_path.FileName;
            //开放执行控件
            DoWork_button.IsEnabled = true;

        }
    }

    /// 
    /// 执行程序 输出到窗口
    /// 
    /// 
    /// 
    private void DoWork_button_Click(object sender, RoutedEventArgs e)
    {
        //获取Halcon窗口控件
        Window = WindowControl.HalconWindow;
        //将引擎绑定到窗口
        MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(Window));
        //定义变量用于获取数据
        double FinArea;
        try
        {
            //执行程序
            //Task.Factory.StartNew(()=> ProgramCall.Execute());
            ProgramCall.Execute();
            //获取数据 只有执行后才能获取
            System.Windows.MessageBox.Show("代码结束");
            FinArea = ProgramCall.GetCtrlVarTuple("FinArea");
        }
        catch (HDevEngineException Ex)
        {
            System.Windows.MessageBox.Show(Ex.Message, "HDevEngine Exception");
            return;
        }
        // 展示结果
        Window.SetTposition(150, 20);
        Window.WriteString("Fin Area: ");
        Window.WriteString(String.Format("{0:G}", FinArea));
    }

    /// 
    /// 主窗口初始化数据和控制变量
    /// 
    /// 
    /// 
    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        Program_load_button.IsEnabled = false;
        DoWork_button.IsEnabled = false;

    }

    /// 
    /// 单独执行一个简单无需外部函数的程序
    /// 
    /// 
    /// 
    private void One_Program_Click(object sender, RoutedEventArgs e)
    {
        //获取程序路径
        OpenFileDialog Program_path = new OpenFileDialog();
        //设定允许单选
        Program_path.Multiselect = false;
        //选择框限定文件类型
        Program_path.Filter = "hdev files(*.hdev)|*.hdev|All files(*.*)|*.*";
        //限定成功读取路径
        if (Program_path.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            //通过路径实例化程序
            HDevProgram Program = new HDevProgram(Program_path.FileName);
            /************************************************************
             * 在载入Halcon外部程序之前 需要检查程序里使用的外部函数是否
             * 在函数目录里面已经定义好否者会报错 缺少哪些函数的名称
             ************************************************************/
            //绑定程序到程序触发器
            ProgramCall = new HDevProgramCall(Program);
            //显示路径
            Program_path_TextBox.Text = "程序路径:" + Program_path.FileName;
        }

        Window = WindowControl.HalconWindow;
        //将引擎绑定到窗口
        MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(Window));
        ProgramCall.Execute();

    }
}

}

你可能感兴趣的:(C#,Halcon)