using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using HalconDotNet;
namespace BroCVisionHalcon
{
public class HDevEngineTool
{
#region 常量
// path of external procedures
string ProcedurePath = Environment.CurrentDirectory + "\\Vision\\";
#endregion
#region 成员变量
///
/// 处理过程名
///
public string ProcedureName;
///
/// hdev程序启动引擎
///
private HalconDotNet.HDevEngine MyEngine;
///
/// 程序载入工具 .hdev
///
private HDevProgramCall ProgramCall;
///
/// 过程载入工具 .hdvp
///
private HDevProcedureCall ProcedureCall;
///
/// 控制参数字典
///
public Dictionary TupleDictionary { get; set; }
///
/// 图形参数字典
///
public Dictionary ImageDictionary { get; set; }
#endregion
#region 初始化
///
/// 实例化 默认搜索路径为: 启动路径//Vision//
///
public HDevEngineTool()
{
ProcedureName = "";
MyEngine = new HalconDotNet.HDevEngine();
MyEngine.SetProcedurePath(ProcedurePath);
ImageDictionary = new Dictionary();
TupleDictionary = new Dictionary();
}
///
/// 实例化
///
/// 外部函数搜索路径
public HDevEngineTool(string path)
{
MyEngine = new HalconDotNet.HDevEngine();
MyEngine.SetProcedurePath(path);
ImageDictionary = new Dictionary();
TupleDictionary = new Dictionary();
}
#endregion
///
/// 设置函数运行所需参数
///
/// 控制参数
/// 图形参数
public void SetDictionary(Dictionary _tupleDictionary, Dictionary _imageDictionary)
{
this.TupleDictionary = _tupleDictionary;
this.ImageDictionary = _imageDictionary;
}
///
/// 载入过程 .hdvp
///
/// 过程名
///
//public void LoadProcedure(string procedureName,HDisplayControl.HDisplayControl hwin)
//{
// ProcedureName = procedureName;
// MyEngine.SetHDevOperators(new HDevOpMultiWindowImpl(hwin.HalconWindow));
// try
// {
// HDevProcedure procedure = new HDevProcedure(procedureName);
// ProcedureCall = new HDevProcedureCall(procedure);
// }
// catch (HDevEngineException Ex)
// {
// Trace.TraceInformation("HDevProgram Load fail, ex:" + Ex.Message);
// return;
// }
//}
///
/// 载入过程 .hdvp
///
/// 过程名
public void LoadProcedure(string procedureName)
{
ProcedureName = procedureName;
try
{
HDevProcedure procedure = new HDevProcedure(procedureName);
ProcedureCall = new HDevProcedureCall(procedure);
}
catch (HDevEngineException Ex)
{
Trace.TraceInformation("HDevProgram {0} Run fail ,Error Line : {1}, Line number: {2}, Halcon error number : {3}", Ex.ProcedureName, Ex.LineText, Ex.LineNumber, Ex.HalconError);
return;
}
}
///
/// 执行过程
///
public void RunProcedure()
{
try
{
foreach (KeyValuePair pair in TupleDictionary)
{
if(pair.Key.Contains("INPUT"))
{
ProcedureCall.SetInputCtrlParamTuple(pair.Key, pair.Value);
}
}
foreach(KeyValuePairpair in ImageDictionary)
{
if(pair.Key.Contains("INPUT"))
{
ProcedureCall.SetInputIconicParamObject(pair.Key, pair.Value);
}
}
ProcedureCall.Execute();
string[] tupleKeys= TupleDictionary.Keys.ToArray();
string[] imageKeys = ImageDictionary.Keys.ToArray();
for (int i = 0; i < TupleDictionary.Count;i++ )
{
if (tupleKeys[i].Contains("OUTPUT"))
{
TupleDictionary[tupleKeys[i]] = ProcedureCall.GetOutputCtrlParamTuple(tupleKeys[i]);
}
}
for (int i = 0; i < ImageDictionary.Count;i++ )
{
if (imageKeys[i].Contains("OUTPUTOBJ"))
{
ImageDictionary[imageKeys[i]] = ProcedureCall.GetOutputIconicParamObject(imageKeys[i]);
}
if (imageKeys[i].Contains("OUTPUTIMG"))
{
ImageDictionary[imageKeys[i]] = ProcedureCall.GetOutputIconicParamImage(imageKeys[i]);
}
if (imageKeys[i].Contains("OUTPUTREG"))
{
ImageDictionary[imageKeys[i]] = ProcedureCall.GetOutputIconicParamRegion(imageKeys[i]);
}
}
}
catch (HDevEngineException Ex)
{
Trace.TraceInformation("HDevProgram {0} Run fail ,Error Line : {1}, Line number: {2}, Halcon error number : {3}",Ex.ProcedureName,Ex.LineText,Ex.LineNumber,Ex.HalconError);
return;
}
}
}
}