DefectPreviewAreaUtil.cs
7.53 KB
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using OS.Spin.ViewModle.Models;
using OS.Spin.View.DefectPreviewArea;
using System.Windows.Controls;
namespace OS.Spin.View.Utils
{
/// <summary>
/// 瑕疵预览区域管理工具类
/// </summary>
public class DefectPreviewAreaUtil
{
private static List<OS.Spin.ViewModle.Models.DefectPreviewArea> _defectPreviewAreas = null; //保存瑕疵预览区域数据用于动态刷新界面
private static object _object = new object(); //锁对象
private static DefectPreviewAreaUtil _defectPreviewAreaUtil = null; //管理其它对象的单例对象
private static List<DefectSpanPreview> _defectSpanPreview = null; //已经添加的瑕疵点控件
private static DefectPreviewDelegateUtil _defectPreviewDelegateUtil = null; //委托实例
/// <summary>
/// 无参构造函数初始化数据
/// </summary>
public DefectPreviewAreaUtil()
{
_defectPreviewAreas = new List<OS.Spin.ViewModle.Models.DefectPreviewArea>(); //创建瑕疵预览区域缓存区
_defectSpanPreview = new List<DefectSpanPreview>();
_defectPreviewDelegateUtil = new DefectPreviewDelegateUtil(); //获取该委托实例
}
/// <summary>
/// 返回瑕疵控件对象集合
/// </summary>
/// <returns></returns>
public List<DefectSpanPreview> getDefectSpanPreviews()
{
return _defectSpanPreview;
}
/// <summary>
/// 添加该瑕疵控件到集合中管理
/// </summary>
/// <param name="defectSpanPreview"></param>
public void addDefectSpanPreview(DefectSpanPreview defectSpanPreview)
{
if (!_defectSpanPreview.Contains(defectSpanPreview)) //只有不存在该对象的时候才添加该对象
{
_defectSpanPreview.Add(defectSpanPreview);
}
}
public void removeDefectSpanPreview()
{
if (null != _defectSpanPreview && _defectSpanPreview.Count > 0)
{
_defectSpanPreview.Clear();
//for(int j = 0; j < _defectSpanPreview.Count; j++)
//{
// _defectSpanPreview.Remove(_defectSpanPreview[j]);
//}
}
}
/// <summary>
/// 单例类实例化
/// </summary>
/// <returns></returns>
public static DefectPreviewAreaUtil getInstance()
{
if (null == _defectPreviewAreaUtil)
{
lock (_object)
{
if (null == _defectPreviewAreaUtil)
{
_defectPreviewAreaUtil = new DefectPreviewAreaUtil();
}
}
}
return _defectPreviewAreaUtil;
}
/// <summary>
/// 获取该委托实例
/// </summary>
/// <returns></returns>
public DefectPreviewDelegateUtil getDefectPreviewDelegateUtil()
{
return _defectPreviewDelegateUtil;
}
/// <summary>
/// 获取瑕疵预览区集合对象
/// </summary>
/// <returns></returns>
public List<OS.Spin.ViewModle.Models.DefectPreviewArea> getDefectPreviewAreas()
{
return _defectPreviewAreas;
}
/// <summary>
/// 向瑕疵集合中添加数据
/// </summary>
/// <param name="defectPreviewArea"></param>
public void addDefectPreviewArea(OS.Spin.ViewModle.Models.DefectPreviewArea defectPreviewArea)
{
_defectPreviewAreas.Add(defectPreviewArea);
}
/// <summary>
/// 从集合中删除某个瑕疵点
/// </summary>
/// <param name="defectDataImage"></param>
public void removeDefectDataImage(DefectDataImage defectDataImage)
{
//保证非空
if(null != _defectSpanPreview && _defectSpanPreview.Count > 0)
{
//找到该控件是否存在
for(int i = 0; i < _defectSpanPreview.Count; i++)
{
DefectSpanPreview defectSpanPreview = _defectSpanPreview[i];
StackPanel stack = defectSpanPreview.StackPanel;
Canvas canvas = (Canvas)stack.Children[4]; //瑕疵点显示区域数据
//List<DefectDataImage> defectDataImages = (DefectDataImage)canvas.Children.OfType<DefectDataImage>();
//最多四个
int len = canvas.Children.Count;
DefectDataImage defectDataImageOne = null;
for (int c = 0; c < len; c++) {
defectDataImageOne = (DefectDataImage)canvas.Children[c];
if (defectDataImageOne != null && defectDataImageOne.Equals(defectDataImage)) //找到了
{
canvas.Children.Remove(defectDataImageOne); //找到了就删除掉
StackPanel stackPanelOne = (StackPanel)defectDataImage.stackPanelFather;
TextBlock textBlockOne = (TextBlock)stackPanelOne.Children[0];
TextBlock textBlockTwo = (TextBlock)stackPanelOne.Children[1];
TextBlock textBlockThree = (TextBlock)stackPanelOne.Children[2];
string type = textBlockOne.Text; //类型
string length = textBlockTwo.Text; //长度
string score = textBlockThree.Text; //分数
//获取布匹编号
Border border = (Border)stack.Children[0];
TextBlock textBlock = (TextBlock)border.Child;
//TextBlock textBlock = (TextBlock)stack.Children[0];
string text = textBlock.Text;
//根据布匹编号找到该数据
for (int j = 0; j < _defectPreviewAreas.Count; j++)
{
OS.Spin.ViewModle.Models.DefectPreviewArea defectPreviewArea = _defectPreviewAreas[j];
String number = defectPreviewArea.DefectNumber;
if (text == number) //找到相同的编号了
{
List<DefectSpot> defectSpots = defectPreviewArea.DefectSpots;
for (int a = 0; a < defectSpots.Count; a++)
{
if (defectSpots[a].DefectType == type && defectSpots[a].DefectLength == length && defectSpots[a].DefectDeduct == score)
{
//到这一步终于让我给找到了,哈哈,找到了就直接删除了吧,这过程确实比较麻烦像爬虫一样
defectSpots.Remove(defectSpots[a]); //删除相同的元素
return; //我已经找到了,我还找毛线,直接return避免重复查找
}
}
}
}
}
}
}
}
}
}
}