using HalconDotNet;
|
using LB_SmartVisionCommon;
|
using LB_VisionControls;
|
using LB_VisionProcesses.Alogrithms.Halcon;
|
using OpenCvSharp;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace LB_VisionProcesses.Alogrithms
|
{
|
public class CreateSegmentTool : TAlgorithm
|
{
|
public CreateSegmentTool()
|
{
|
strProcessClass = "LB_VisionProcesses.Alogrithms.CreateSegmentTool";
|
strProcessName = "创建线段工具";
|
|
Params.Inputs.Add("P1X", 0);
|
Params.Inputs.Add("P1Y", 0);
|
Params.Inputs.Add("P2X", 0);
|
Params.Inputs.Add("P2Y", 0);
|
Params.Inputs.Add("畸变关系", "");
|
Params.Inputs.Add("是否畸变转换", false);
|
|
Params.Outputs.Add("CenterX", 0.0);
|
Params.Outputs.Add("CenterY", 0.0);
|
Params.Outputs.Add("Phi", 0.0);
|
Params.Outputs.Add("Length", 0.0);
|
Params.Outputs.Add("HSegment", new HSegment());
|
}
|
|
/// <summary>
|
/// 算子逻辑
|
/// </summary>
|
public override void TAlgorithmMain()
|
{
|
#region 初始化变量
|
|
#endregion
|
|
try
|
{
|
#region 裁剪区域
|
|
#endregion
|
|
#region 算子逻辑
|
Record = new ObjectRecord();
|
var P1 = new HPoint(Convert.ToDouble(Params.Inputs["P1X"]), Convert.ToDouble(Params.Inputs["P1Y"]));
|
var P2 = new HPoint(Convert.ToDouble(Params.Inputs["P2X"]), Convert.ToDouble(Params.Inputs["P2Y"]));
|
|
bool isCaltab = Convert.ToBoolean(Params.Inputs["是否畸变转换"]);
|
if (isCaltab)
|
{
|
string CaltabName = Params.Inputs["畸变关系"]?.ToString();
|
if (!dicHCaltabMaps.ContainsKey(CaltabName))
|
{
|
Msg = $"畸变关系{CaltabName}不存在";
|
Result = false;
|
AsyncLogHelper.Error(Msg);
|
return;
|
}
|
|
var HCaltabMap = dicHCaltabMaps[CaltabName];
|
HCaltabMap.GetCaltbPoint(P1, out P1);
|
HCaltabMap.GetCaltbPoint(P2, out P2);
|
}
|
HSegment HSegment = new HSegment(P1, P2);
|
|
// XLD用原始坐标
|
HOperatorSet.GenRegionLine(out HObject xld, Convert.ToDouble(Params.Inputs["P1Y"]), Convert.ToDouble(Params.Inputs["P1X"])
|
, Convert.ToDouble(Params.Inputs["P2Y"]), Convert.ToDouble(Params.Inputs["P2X"]));
|
Record.AddRecord(xld);
|
#endregion
|
|
#region 结果处理
|
Params.Outputs.Add("CenterX", HSegment.MidX);
|
Params.Outputs.Add("CenterY", HSegment.MidY);
|
Params.Outputs.Add("Phi", HSegment.Phi);
|
Params.Outputs.Add("Length", HSegment.Length);
|
Params.Outputs.Add("HSegment", HSegment);
|
#endregion
|
|
#region 生成OutputImage给后续处理
|
try
|
{
|
OutputImage = InputImage;
|
}
|
catch (Exception ex)
|
{
|
Msg = "生成OutputImage失败,原因是:" + ex.ToString();
|
Result = false;
|
AsyncLogHelper.Error(Msg);
|
return;
|
}
|
#endregion
|
|
if (Msg == "运行超时")
|
{
|
Result = false;
|
return;
|
}
|
|
return;
|
}
|
catch (Exception ex)
|
{
|
Msg = "运行失败,原因是:" + ex.ToString().TrimEnd();
|
OutputImage = null;
|
Result = false;
|
AsyncLogHelper.Error(Msg);
|
return;
|
}
|
finally
|
{
|
bCompleted = true;
|
#region 内存释放
|
if (!Result)
|
{
|
Params.Outputs.Add("CenterX", 0);
|
Params.Outputs.Add("CenterY", 0);
|
Params.Outputs.Add("Phi", 0);
|
Params.Outputs.Add("Length", 0);
|
Params.Outputs.Add("HSegment", new HSegment());
|
}
|
#endregion
|
}
|
}
|
}
|
}
|