using HalconDotNet;
|
using LB_VisionProcesses.Alogrithms.Halcon;
|
using LB_VisionControls;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using OpenCvSharp;
|
|
namespace LB_VisionProcesses.Alogrithms
|
{
|
public class CreateVerticalTool : TAlgorithm
|
{
|
public CreateVerticalTool()
|
{
|
strProcessClass = "LB_VisionProcesses.Alogrithms.CreateVerticalTool";
|
strProcessName = "创建垂线工具";
|
|
Params.Inputs.Add("X", 0);
|
Params.Inputs.Add("Y", 0);
|
Params.Inputs.Add("HSegment", new HSegment());
|
Params.Inputs.Add("畸变关系", "");
|
Params.Inputs.Add("是否畸变转换", false);
|
|
Params.Outputs.Add("FeetX", 0.0);
|
Params.Outputs.Add("FeetY", 0.0);
|
|
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();
|
HPoint HPoint_Base = new HPoint(Convert.ToDouble(Params.Inputs["X"]), Convert.ToDouble(Params.Inputs["Y"]));
|
var OSegment_Base = Params.Inputs["HSegment"];
|
if (!(OSegment_Base is HSegment))
|
{
|
Msg = $"HSegment不存在";
|
Result = false;
|
return;
|
}
|
HSegment HSegment_Base = (HSegment)OSegment_Base;
|
Point2f feetPoint2f = TAlgorithm.CalculateFootPoint(new Point2f(Convert.ToSingle(HPoint_Base.X), Convert.ToSingle(HPoint_Base.Y))
|
, new Point2f(Convert.ToSingle(HSegment_Base.StartX), Convert.ToSingle(HSegment_Base.StartY))
|
, new Point2f(Convert.ToSingle(HSegment_Base.EndX), Convert.ToSingle(HSegment_Base.EndY)));
|
|
HPoint HPoint_Feet = new HPoint(feetPoint2f.X, feetPoint2f.Y);
|
|
// XLD用原始坐标
|
HOperatorSet.GenRegionLine(out HObject xld, HPoint_Base.Row, HPoint_Base.Column, HPoint_Feet.Row, HPoint_Feet.Column);
|
Record.AddXld(xld);
|
|
bool isCaltab = Convert.ToBoolean(Params.Inputs["是否畸变转换"]);
|
if (isCaltab)
|
{
|
string CaltabName = Params.Inputs["畸变关系"]?.ToString();
|
if (!dicHCaltabMaps.ContainsKey(CaltabName))
|
{
|
Msg = $"畸变关系{CaltabName}不存在";
|
Result = false;
|
return;
|
}
|
|
var HCaltabMap = dicHCaltabMaps[CaltabName];
|
HCaltabMap.GetCaltbPoint(HPoint_Base, out HPoint_Base);
|
HCaltabMap.GetCaltbPoint(HPoint_Feet, out HPoint_Feet);
|
}
|
HSegment HSegment_Vertical = new HSegment(HPoint_Base, HPoint_Feet);
|
|
#endregion
|
|
#region 结果处理
|
Params.Outputs.Add("FeetX", HPoint_Feet.X);
|
Params.Outputs.Add("FeetY", HPoint_Feet.Y);
|
|
Params.Outputs.Add("CenterX", HSegment_Vertical.X);
|
Params.Outputs.Add("CenterY", HSegment_Vertical.Y);
|
Params.Outputs.Add("Phi", HSegment_Vertical.Phi);
|
Params.Outputs.Add("Length", HSegment_Vertical.Length);
|
Params.Outputs.Add("HSegment", HSegment_Vertical);
|
#endregion
|
|
#region 生成OutputImage给后续处理
|
try
|
{
|
OutputImage = InputImage;
|
}
|
catch (Exception ex)
|
{
|
Msg = "生成OutputImage失败,原因是:" + ex.ToString();
|
Result = false;
|
return;
|
}
|
#endregion
|
|
if (Msg == "运行超时")
|
{
|
Result = false;
|
return;
|
}
|
|
return;
|
}
|
catch (Exception ex)
|
{
|
Msg = "运行失败,原因是:" + ex.ToString().TrimEnd();
|
OutputImage = null;
|
Result = false;
|
return;
|
}
|
finally
|
{
|
bCompleted = true;
|
#region 内存释放
|
if (!Result)
|
{
|
Params.Outputs.Add("FeetX", 0.0);
|
Params.Outputs.Add("FeetY", 0.0);
|
|
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());
|
}
|
#endregion
|
}
|
}
|
}
|
}
|