using HalconDotNet; using LB_SmartVisionCommon; using LB_VisionProcesses.Processes; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; namespace LB_VisionProcesses.Alogrithms { public class CreateFixtureTool : TAlgorithm { public CreateFixtureTool() { strProcessClass = "LB_VisionProcesses.Alogrithms.CreateFixtureTool"; strProcessName = "创建固定跟随"; Params.Inputs.Add("X", 0.0); Params.Inputs.Add("Y", 0.0); Params.Inputs.Add("Phi", 0.0); Params.Inputs.Add("Name", "Fixture1"); } public override bool Run() { try { InitRunParams(); Record = new MsgRecord(); double X = 0, Y = 0, Phi = 0; string Name = string.Empty; if (Params.Inputs["X"] is List && (Params.Inputs["X"] as List).Count > 0) { X = (Params.Inputs["X"] as List)[0]; Y = (Params.Inputs["Y"] as List)[0]; Phi = (Params.Inputs["Phi"] as List)[0]; Name = (string)Params.Inputs["Name"]; } else if (Params.Inputs.ContainsKey("X") && Params.Inputs["X"] is double) { X = (double)Params.Inputs["X"]; Y = (double)Params.Inputs["Y"]; Phi = (double)Params.Inputs["Phi"]; Name = (string)Params.Inputs["Name"]; } Params.Fixture = new Fixture(X, Y, Phi, Name); if (!dicFixtures.ContainsKey(Name)) { dicFixtures.TryAdd(Name, Params.Fixture); } else if (dicFixtures.ContainsKey(Name)) { dicFixtures[Name] = Params.Fixture; } if (Params.Fixture == null) { Result = false; Msg = $"生成[{Name}]错误({X},{Y},{Phi})"; AsyncLogHelper.Error(Msg); } else { Result = true; ((MsgRecord)Record).AddRecord("·", Y, X); } return Result; } catch { OutputImage = null; Result = false; Msg = string.Format("运行出现异常"); AsyncLogHelper.Error(Msg); return false; } finally { if (!Result) { OutputImage = null; } bCompleted = true; } } public override bool Save(string filePath = "") { return base.Save(filePath); } public override bool Load(string fullPath = "") { if (base.Load(fullPath)) { double X = 0, Y = 0, Phi = 0; string Name = string.Empty; if (Params.Inputs["X"] is List && (Params.Inputs["X"] as List).Count > 0) { X = (Params.Inputs["X"] as List)[0]; Y = (Params.Inputs["Y"] as List)[0]; Phi = (Params.Inputs["Phi"] as List)[0]; Name = (string)Params.Inputs["Name"]; } else if (Params.Inputs.ContainsKey("X") && Params.Inputs["X"] is double) { X = (double)Params.Inputs["X"]; Y = (double)Params.Inputs["Y"]; Phi = (double)Params.Inputs["Phi"]; Name = (string)Params.Inputs["Name"]; } Params.Fixture = new Fixture(X, Y, Phi, Name); if (!dicFixtures.ContainsKey(Name)) { dicFixtures.TryAdd(Name, Params.Fixture); } else if (dicFixtures.ContainsKey(Name)) { dicFixtures[Name] = Params.Fixture; } return true; } else { return false; } } } }