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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
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<double>))]
        public List<double> Matrix { get; set; } = new List<double>();
 
        [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<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.PositionNo}-{p.Description.GetEnumDescription()}";
                });
            }
        }
    }
 
    public class PositionNoConverter : ComboBoxItemTypeConvert
    {
        public override void GetConvertHash()
        {
            using (var scope = GlobalVar.Container.BeginLifetimeScope())
            {
                var config = scope.Resolve<ProcessConfig>();
 
                config.PositionCollection.ForEach(p =>
                {
                    _hash[p.PositionNo] = $"{p.PositionNo}-{p.PositionCode}-{p.Description.GetEnumDescription()}";
                });
            }
        }
    }
}