patrick
2019-10-18 4e8bf084f8a04617a9f542099183b8d829fa7c4b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
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,
    }
 
    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<double>))]
        public List<double> Matrix { get; set; } = new List<double>();
 
        [Category("视觉配置")]
        [Description("该位置标准点位信息")]
        [TypeConverter(typeof(ComplexObjectConvert))]
        [Editor(typeof(PropertyObjectEditor), typeof(UITypeEditor))]
        public CustomizedPoint StandardPoint { get; set; } = new CustomizedPoint();
 
        [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<string> GetHalconToolPathList()
        {
            return new List<string>() { CameraOpConfig.AlgorithemPath };
        }
    }
 
    public class PositionCodeConverter : ComboBoxItemTypeConvert
    {
        public override void GetConvertHash()
        {
            using (var scope = GlobalVar.Container.BeginLifetimeScope())
            {
                var config = scope.Resolve<ProcessConfig>();
 
                config.PositionCollection.ForEach(p =>
                {
                    _hash[p.PositionCode] = $"{p.PositionCode}-{p.Description.GetEnumDescription()}";
                });
            }
        }
    }
}