using Autofac; using Bro.Common.Helper; using Bro.Common.Model; using Bro.Common.Model.Interface; using Bro.Device.HikCamera; using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing.Design; using System.Linq; using System.Text; using System.Threading.Tasks; namespace A032.Process { public enum PathPositionDefinition { [Description("无地点")] None = 0, [Description("上空Tray地点")] LoadEmptyTray = 1, [Description("卸载空Tray地点")] UnloadEmptyTray = 2, [Description("上满Tray地点")] LoadFullTray = 3, [Description("卸载满Tray地点")] UnloadFullTray = 4, [Description("充电地点")] Charge = 5, } public class PathPosition : IComplexDisplay { [Category("导航路径")] [Description("AGV路径节点代码")] public string PositionCode { get; set; } [Category("导航路径")] [Description("Robot路径节点数字")] public int PositionNo { get; set; } [Category("导航路径")] [Description("路径节点描述")] public PathPositionDefinition Description { get; set; } = PathPositionDefinition.None; [Category("归属设备")] [Description("归属设备编号")] [TypeConverter(typeof(PLCDeviceConverter))] public string DeviceOwner { get; set; } public string GetDisplayText() { return $"{PositionCode}-{Description}"; } } public class PositionVisionConfig : IComplexDisplay, IHalconToolPath { [Category("关联配置")] [Description("位置代码")] [TypeConverter(typeof(PositionCodeConverter))] public string PositionCode { get; set; } [Category("关联配置")] [Description("适用相机编号")] [TypeConverter(typeof(CameraDeviceConverter))] public string CameraId { get; set; } [Category("视觉配置")] [Description("该位置标定矩阵,用于从相机像素坐标转换到机器人的运动二维坐标系,只计算偏移")] [TypeConverter(typeof(SimpleCollectionConvert))] public List Matrix { get; set; } = new List(); [Category("视觉配置")] [Description("该位置标准点位信息")] [TypeConverter(typeof(ComplexObjectConvert))] [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] public CustomizedPointWithAngle StandardPoint { get; set; } = new CustomizedPointWithAngle(); [Category("视觉配置")] [Description("该位置拍摄配置")] [TypeConverter(typeof(ComplexObjectConvert))] [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))] public HikCameraOperationConfig CameraOpConfig { get; set; } = new HikCameraOperationConfig(); public string GetDisplayText() { return $"{PositionCode}:曝光:{CameraOpConfig.Exposure};标定矩阵:{string.Join(",", Matrix)}"; } public List GetHalconToolPathList() { return new List() { CameraOpConfig.AlgorithemPath }; } } public class PositionCodeConverter : ComboBoxItemTypeConvert { public override void GetConvertHash() { using (var scope = GlobalVar.Container.BeginLifetimeScope()) { var config = scope.Resolve(); config.PositionCollection.ForEach(p => { _hash[p.PositionCode] = $"{p.PositionCode}-{p.PositionNo}-{p.Description.GetEnumDescription()}"; }); } } } public class PositionNoConverter : ComboBoxItemTypeConvert { public override void GetConvertHash() { using (var scope = GlobalVar.Container.BeginLifetimeScope()) { var config = scope.Resolve(); config.PositionCollection.ForEach(p => { _hash[p.PositionNo] = $"{p.PositionNo}-{p.PositionCode}-{p.Description.GetEnumDescription()}"; }); } } } }