diff --git a/LeatherProject/.vs/LeatherApp/FileContentIndex/425e1d16-584a-46bb-81d8-38a827e21e23.vsidx b/LeatherProject/.vs/LeatherApp/FileContentIndex/425e1d16-584a-46bb-81d8-38a827e21e23.vsidx new file mode 100644 index 0000000..32792b6 Binary files /dev/null and b/LeatherProject/.vs/LeatherApp/FileContentIndex/425e1d16-584a-46bb-81d8-38a827e21e23.vsidx differ diff --git a/LeatherProject/.vs/LeatherApp/FileContentIndex/6b0d4daa-4cdd-497d-b720-53918bd7c3b6.vsidx b/LeatherProject/.vs/LeatherApp/FileContentIndex/6b0d4daa-4cdd-497d-b720-53918bd7c3b6.vsidx deleted file mode 100644 index ad9c12f..0000000 Binary files a/LeatherProject/.vs/LeatherApp/FileContentIndex/6b0d4daa-4cdd-497d-b720-53918bd7c3b6.vsidx and /dev/null differ diff --git a/LeatherProject/.vs/LeatherApp/FileContentIndex/51b1d98f-624a-4632-86a3-0e1aed712bd5.vsidx b/LeatherProject/.vs/LeatherApp/FileContentIndex/f0d0f273-31f1-4084-afd3-476f526cefd9.vsidx similarity index 74% rename from LeatherProject/.vs/LeatherApp/FileContentIndex/51b1d98f-624a-4632-86a3-0e1aed712bd5.vsidx rename to LeatherProject/.vs/LeatherApp/FileContentIndex/f0d0f273-31f1-4084-afd3-476f526cefd9.vsidx index 062673f..fdc0a33 100644 Binary files a/LeatherProject/.vs/LeatherApp/FileContentIndex/51b1d98f-624a-4632-86a3-0e1aed712bd5.vsidx and b/LeatherProject/.vs/LeatherApp/FileContentIndex/f0d0f273-31f1-4084-afd3-476f526cefd9.vsidx differ diff --git a/LeatherProject/GeBoShi/SysCtrl/SysMgr.cs b/LeatherProject/GeBoShi/SysCtrl/SysMgr.cs index 2c7a5e2..c015d20 100644 --- a/LeatherProject/GeBoShi/SysCtrl/SysMgr.cs +++ b/LeatherProject/GeBoShi/SysCtrl/SysMgr.cs @@ -471,7 +471,7 @@ namespace GeBoShi.SysCtrl #region 实时采图 #if Online //采集图片 - Acquisition acq = _LinecamDev1.GetFrames(1, 10); + Acquisition acq = _LinecamDev1.GetFrames(10); if (acq.GrabStatus == "GrabPass") { //显示 @@ -568,7 +568,7 @@ namespace GeBoShi.SysCtrl #region 实时采图 #if Online //采集图片 - Acquisition acq = _LinecamDev2.GetFrames(1, 10); + AcquisitionMat acq = _LinecamDev2.GetFrames(10); if (acq.GrabStatus == "GrabPass") { //显示 diff --git a/LeatherProject/LeatherApp/Config.cs b/LeatherProject/LeatherApp/Config.cs index a58b350..7765ba6 100644 --- a/LeatherProject/LeatherApp/Config.cs +++ b/LeatherProject/LeatherApp/Config.cs @@ -20,7 +20,9 @@ namespace LeatherApp public static JArray defectItemList; // public static JArray colorNameList;//, materialNameList; - + // + public static JArray materialNameList;//, materialNameList; + //CMDProcess目录下的命令JSON文件 public static Dictionary CMDProcess; @@ -68,8 +70,21 @@ namespace LeatherApp public static string ImagePath; public static bool IsSaveAllImage, IsSaveDefectSourceImage, IsSaveDefectCutImage; - //材质Material - public static string[] SuedeList = new string[0]; + //材质Material 1 + public static string[] SuedeList1 = new string[0]; + //材质Material 2 + public static string[] SuedeList2 = new string[0]; + //材质Material 3 + public static string[] SuedeList3 = new string[0]; + //材质Material 4 + public static string[] SuedeList4 = new string[0]; + //材质Material 5 + public static string[] SuedeList5 = new string[0]; + //材质Material 6 + public static string[] SuedeList6 = new string[0]; + + //忽略的等级判断项目 + public static string[] SkipLabelGrade = new string[0]; //云端 public static string cloud_ip, cloud_username, cloud_password, CloudThisName; @@ -96,7 +111,7 @@ namespace LeatherApp LoadDefectItemList(); LoadColorNameList(); - //LoadMaterialNameList(); + LoadMaterialNameList(); //---- string lsCmdPath = appBasePath + "\\CMDProcess\\"; if (!Directory.Exists(lsCmdPath)) @@ -162,7 +177,41 @@ namespace LeatherApp // string lsTmp = ini.ReadString("Material", "SuedeList", "").Trim(); if(!string.IsNullOrWhiteSpace(lsTmp)) - SuedeList=lsTmp.Split(new char[] { ',',';'}); + SuedeList1=lsTmp.Split(new char[] { ',',';'}); + else + SuedeList1 = new string[1] { ""}; + + lsTmp = ini.ReadString("Material", "SuedeList2", "").Trim(); + if (!string.IsNullOrWhiteSpace(lsTmp)) + SuedeList2 = lsTmp.Split(new char[] { ',', ';' }); + else + SuedeList2 = new string[1] { "" }; + lsTmp = ini.ReadString("Material", "SuedeList3", "").Trim(); + if (!string.IsNullOrWhiteSpace(lsTmp)) + SuedeList3= lsTmp.Split(new char[] { ',', ';' }); + else + SuedeList3 = new string[1] { "" }; + lsTmp = ini.ReadString("Material", "SuedeList4", "").Trim(); + if (!string.IsNullOrWhiteSpace(lsTmp)) + SuedeList4= lsTmp.Split(new char[] { ',', ';' }); + else + SuedeList4 = new string[1] { "" }; + lsTmp = ini.ReadString("Material", "SuedeList5", "").Trim(); + if (!string.IsNullOrWhiteSpace(lsTmp)) + SuedeList5 = lsTmp.Split(new char[] { ',', ';' }); + else + SuedeList5 = new string[1] { "" }; + lsTmp = ini.ReadString("Material", "SuedeList6", "").Trim(); + if (!string.IsNullOrWhiteSpace(lsTmp)) + SuedeList6 = lsTmp.Split(new char[] { ',', ';' }); + else + SuedeList6 = new string[1] { "" }; + + lsTmp = ini.ReadString("SkipLabelGrade", "LabelGradeList", "").Trim(); + if (!string.IsNullOrWhiteSpace(lsTmp)) + SkipLabelGrade = lsTmp.Split(new char[] { ',', ';' }); + else + SkipLabelGrade = new string[1] { "" }; } #region defectItemList <=> DefectItemList.json @@ -209,6 +258,13 @@ namespace LeatherApp return ""; return ((JObject)item).Value("name"); } + public static string getDefectCode(string name) + { + var item = Config.defectItemList.FirstOrDefault(m => m.Value("name") == name); + if (item == null) + return ""; + return ((JObject)item).Value("code"); + } #endregion #region colorNameList <=> ColorNameList.json @@ -227,14 +283,14 @@ namespace LeatherApp return null; return (JObject)item; } - //public static void LoadMaterialNameList() - //{ - // if (string.IsNullOrWhiteSpace(appBasePath)) - // appBasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - // string configPath = appBasePath + "\\MaterialName.json"; - // string lsTmp = File.ReadAllText(configPath); - // materialNameList = JArray.Parse(lsTmp); - //} + public static void LoadMaterialNameList() + { + if (string.IsNullOrWhiteSpace(appBasePath)) + appBasePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + string configPath = appBasePath + "\\MaterialName.json"; + string lsTmp = File.ReadAllText(configPath); + materialNameList = JArray.Parse(lsTmp); + } //public static JObject getMaterialItem(string code) //{ // var item = Config.materialNameList.FirstOrDefault(m => m.Value("code") == code); diff --git a/LeatherProject/LeatherApp/DevContainer.cs b/LeatherProject/LeatherApp/DevContainer.cs index 9529328..d917151 100644 --- a/LeatherProject/LeatherApp/DevContainer.cs +++ b/LeatherProject/LeatherApp/DevContainer.cs @@ -107,6 +107,12 @@ namespace LeatherApp if (!Config.StopLight && !devLight.start(int.Parse(Config.Light_PortName.Substring(3)))) throw new Exception("光源设备初始化失败!"); if (!libPhoto.start()) throw new Exception("图像库初始化失败!"); WarningEvent?.Invoke(DateTime.Now,WarningEnum.Normal, "2"); + if(libDefect == null) + { + WarningEvent?.Invoke(DateTime.Now, WarningEnum.Normal, "算法库为空,重新初始化"); + libDefect = new DefectLib(); + libDefect.WarningEvent = WarningEvent; + } if (!libDefect.start()) throw new Exception("缺陷库初始化失败!"); WarningEvent?.Invoke(DateTime.Now,WarningEnum.Normal, "3"); if (!File.Exists(appBasePath+ "\\DevCfg\\" + Config.Carmer1ConfigFilePath) || !File.Exists(appBasePath + "\\DevCfg\\" + Config.Carmer2ConfigFilePath)) diff --git a/LeatherProject/LeatherApp/Device/DefectLib.cs b/LeatherProject/LeatherApp/Device/DefectLib.cs index aa00ad4..d1faf64 100644 --- a/LeatherProject/LeatherApp/Device/DefectLib.cs +++ b/LeatherProject/LeatherApp/Device/DefectLib.cs @@ -98,17 +98,17 @@ namespace LeatherApp.Device } public bool start() { - List DefectLabelInfoList = new List(); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 1953, y = 429, w = 200, h = 200, classId = 1, confidence = 0.8, contrast = 0.9, i = 0, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() {x = 1953,y = 929,w=900,h = 400,classId = 11,confidence = 0.8, contrast = 0.9, i = 0,j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 3169, y = 1029, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 1, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 4721, y = 919, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 2, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 6145, y = 829, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 3, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 8073, y = 929, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 4, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 9407, y = 929, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 5, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 10801, y = 999, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 6, j = 0 }); - DefectLabelInfoList.Add(new DefectLabelInfo() { x = 12465, y = 629, w = 900, h = 800, classId = 11, confidence = 0.8, contrast = 0.9, i = 7, j = 0 }); - DefectLabelInfoList = HeBingDefect(16384, DefectLabelInfoList); + //List DefectLabelInfoList = new List(); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 1953, y = 429, w = 200, h = 200, classId = 1, confidence = 0.8, contrast = 0.9, i = 0, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() {x = 1953,y = 929,w=900,h = 400,classId = 11,confidence = 0.8, contrast = 0.9, i = 0,j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 3169, y = 1029, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 1, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 4721, y = 919, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 2, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 6145, y = 829, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 3, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 8073, y = 929, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 4, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 9407, y = 929, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 5, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 10801, y = 999, w = 900, h = 400, classId = 11, confidence = 0.8, contrast = 0.9, i = 6, j = 0 }); + //DefectLabelInfoList.Add(new DefectLabelInfo() { x = 12465, y = 629, w = 900, h = 800, classId = 11, confidence = 0.8, contrast = 0.9, i = 7, j = 0 }); + //DefectLabelInfoList = HeBingDefect(16384, DefectLabelInfoList); try { //detector = CreateDetector(Config.model_path, Config.labels_path, true, 6); @@ -244,7 +244,7 @@ namespace LeatherApp.Device { if (taskList.Count < 1) { - Thread.Sleep(0); + Thread.Sleep(20); continue; } @@ -325,7 +325,7 @@ namespace LeatherApp.Device { if (taskOperationList.Count < 1) { - Thread.Sleep(0); + Thread.Sleep(20); continue; } @@ -454,6 +454,16 @@ namespace LeatherApp.Device List xPos2 = new List(); List ZXD2 = new List(); + List HeBingList3 = new List(); + List XcHeBingList3 = new List(); + List xPos3 = new List(); + List ZXD3 = new List(); + + List HeBingList4 = new List(); + List XcHeBingList4 = new List(); + List xPos4 = new List(); + List ZXD4 = new List(); + DefectLabelInfo stpoint = DefectLabelInfoList[0]; int colNum = Width / image_width; @@ -467,7 +477,7 @@ namespace LeatherApp.Device if (DefectLabelInfoList[q].y >= min && DefectLabelInfoList[q].y <= max) { HeBingList.Add(DefectLabelInfoList[q]); - xPos.Add(DefectLabelInfoList[q].x); + xPos.Add((DefectLabelInfoList[q].i % colNum) * image_width + DefectLabelInfoList[q].x); ZXD.Add(DefectLabelInfoList[q].confidence); } else @@ -480,29 +490,61 @@ namespace LeatherApp.Device if (DefectLabelInfoList[q].y >= min && DefectLabelInfoList[q].y <= max) { HeBingList2.Add(DefectLabelInfoList[q]); - xPos2.Add(DefectLabelInfoList[q].x); + xPos2.Add((DefectLabelInfoList[q].i % colNum) * image_width + DefectLabelInfoList[q].x); ZXD2.Add(DefectLabelInfoList[q].confidence); } else XcHeBingList2.Add(DefectLabelInfoList[q]); } + else if (Config.getDefectCode(DefectLabelInfoList[q].classId) == "jt") + { + int max = stpoint.y + 500; + int min = stpoint.y - 500 > 0 ? stpoint.y - 500 : 0; + if (DefectLabelInfoList[q].y >= min && DefectLabelInfoList[q].y <= max) + { + HeBingList3.Add(DefectLabelInfoList[q]); + xPos3.Add((DefectLabelInfoList[q].i % colNum) * image_width + DefectLabelInfoList[q].x); + ZXD3.Add(DefectLabelInfoList[q].confidence); + } + else + XcHeBingList3.Add(DefectLabelInfoList[q]); + } + else if (Config.getDefectCode(DefectLabelInfoList[q].classId) == "tcy") + { + int max = stpoint.y + 500; + int min = stpoint.y - 500 > 0 ? stpoint.y - 500 : 0; + if (DefectLabelInfoList[q].y >= min && DefectLabelInfoList[q].y <= max) + { + HeBingList4.Add(DefectLabelInfoList[q]); + xPos4.Add((DefectLabelInfoList[q].i % colNum) * image_width + DefectLabelInfoList[q].x); + ZXD4.Add(DefectLabelInfoList[q].confidence); + } + else + XcHeBingList4.Add(DefectLabelInfoList[q]); + } else outList.Add(DefectLabelInfoList[q]); } //递归下次合并数据 List dg1 = new List(); List dg2 = new List(); + List dg3 = new List(); + List dg4 = new List(); if (XcHeBingList.Count >0) dg1 = HeBingDefect(Width, XcHeBingList); if (XcHeBingList2.Count > 0) dg2 = HeBingDefect(Width, XcHeBingList2); + if (XcHeBingList3.Count > 0) + dg3 = HeBingDefect(Width, XcHeBingList3); + if (XcHeBingList4.Count > 0) + dg4 = HeBingDefect(Width, XcHeBingList4); //多个jietou合并 if (HeBingList.Count>0) { - var stIt = HeBingList.Find(x => x.x == xPos.Min()); - var edIt = HeBingList.Find(x => x.x == xPos.Max()); + var stIt = HeBingList.Find(x => (x.i % colNum) * image_width + x.x == xPos.Min()); + var edIt = HeBingList.Find(x => (x.i % colNum) * image_width + x.x == xPos.Max()); var eZXD = HeBingList.Find(x => x.confidence == ZXD.Max()); int newW = Math.Abs(((edIt.i % colNum) * image_width + edIt.x) - ((stIt.i % colNum) * image_width + stIt.x)) + edIt.w; outList.Add(new DefectLabelInfo() { @@ -522,8 +564,8 @@ namespace LeatherApp.Device //多个hengdang合并 if (HeBingList2.Count > 0) { - var stIt = HeBingList2.Find(x => x.x == xPos2.Min()); - var edIt = HeBingList2.Find(x => x.x == xPos2.Max()); + var stIt = HeBingList2.Find(x => (x.i % colNum) * image_width + x.x == xPos2.Min()); + var edIt = HeBingList2.Find(x => (x.i % colNum) * image_width + x.x == xPos2.Max()); var eZXD = HeBingList2.Find(x => x.confidence == ZXD2.Max()); int newW = Math.Abs(((edIt.i % colNum) * image_width + edIt.x) - ((stIt.i % colNum) * image_width + stIt.x)) + edIt.w; outList.Add(new DefectLabelInfo() @@ -541,9 +583,54 @@ namespace LeatherApp.Device j = stIt.j, }); } - + //多个jt合并 + if (HeBingList3.Count > 0) + { + var stIt = HeBingList3.Find(x => (x.i % colNum) * image_width + x.x == xPos3.Min()); + var edIt = HeBingList3.Find(x => (x.i % colNum) * image_width + x.x == xPos3.Max()); + var eZXD = HeBingList3.Find(x => x.confidence == ZXD3.Max()); + int newW = Math.Abs(((edIt.i % colNum) * image_width + edIt.x) - ((stIt.i % colNum) * image_width + stIt.x)) + edIt.w; + outList.Add(new DefectLabelInfo() + { + x = stIt.x, + y = edIt.y, + w = newW, //多图叠加 + h = edIt.h, + classId = eZXD.classId, + confidence = eZXD.confidence, + contrast = eZXD.contrast, + cmH = Math.Round(edIt.h * 1.0 / Config.cm2px_y, 2), + cmW = Math.Round(newW * 1.0 / Config.cm2px_x, 2), + i = stIt.i, + j = stIt.j, + }); + } + //多个tcy合并 + if (HeBingList4.Count > 0) + { + var stIt = HeBingList4.Find(x => (x.i % colNum) * image_width + x.x == xPos4.Min()); + var edIt = HeBingList4.Find(x => (x.i % colNum) * image_width + x.x == xPos4.Max()); + var eZXD = HeBingList4.Find(x => x.confidence == ZXD4.Max()); + int newW = Math.Abs(((edIt.i % colNum) * image_width + edIt.x) - ((stIt.i % colNum) * image_width + stIt.x)) + edIt.w; + outList.Add(new DefectLabelInfo() + { + x = stIt.x, + y = edIt.y, + w = newW, //多图叠加 + h = edIt.h, + classId = eZXD.classId, + confidence = eZXD.confidence, + contrast = eZXD.contrast, + cmH = Math.Round(edIt.h * 1.0 / Config.cm2px_y, 2), + cmW = Math.Round(newW * 1.0 / Config.cm2px_x, 2), + i = stIt.i, + j = stIt.j, + }); + } outList = outList.Concat(dg1).ToList();//保留重复项 outList = outList.Concat(dg2).ToList();//保留重复项 + outList = outList.Concat(dg3).ToList();//保留重复项 + outList = outList.Concat(dg4).ToList();//保留重复项 return outList; } //打标 @@ -554,7 +641,7 @@ namespace LeatherApp.Device { if (taskMakeTagList.Count < 1) { - Thread.Sleep(0); + Thread.Sleep(20); continue; } @@ -806,16 +893,34 @@ namespace LeatherApp.Device task.resultInfo += $" 判断为接头处横档,跳过! \n"; continue; } + + if (Config.getDefectCode(DefectLabelInfoListByClassID[q].classId) == "na") + { + task.resultInfo += $" 判断为正向标签na,跳过! \n"; + continue; + } //WarningEvent?.Invoke(DateTime.Now,WarningEnum.Low, $"判断是瑕疵:类别ID:{classId}; 置信度({confidence},[{qualifiedLimit.ZXD}]); isOr({qualifiedLimit.IsOR}); 面积({cmW * cmH},[{ qualifiedLimit.Area}]); 对比度({contrast},[{qualifiedLimit.ContrastLower}-{qualifiedLimit.ContrastTop}])"); } } liStep++;//1 //打标 + + //计算打标框大小,进行调整 + //int dw = 0; + //int dh = 0; + //if (DefectLabelInfoListByClassID[q].w / DefectLabelInfoListByClassID[q].h > 4) + //{ + // dh = DefectLabelInfoListByClassID[q].w / 4; + //} + //if (DefectLabelInfoListByClassID[q].h / DefectLabelInfoListByClassID[q].w > 4) + //{ + // dw = DefectLabelInfoListByClassID[q].h / 4; + //} var point1 = new OpenCvSharp.Point((DefectLabelInfoListByClassID[q].i % colNum) * image_width + DefectLabelInfoListByClassID[q].x, (DefectLabelInfoListByClassID[q].i / colNum) * image_hight + DefectLabelInfoListByClassID[q].y); var point2 = new OpenCvSharp.Point(point1.X + DefectLabelInfoListByClassID[q].w, point1.Y + DefectLabelInfoListByClassID[q].h); liStep++;//2 //task.resultInfo += $" 转换到大图坐标(px):p1={point1.X},{point1.Y}; p2={point2.X},{point2.Y}\n"; - Cv2.Rectangle(task.bmpTag, point1, point2, new Scalar(0.0, 0.0, 255.0), 1);//画打标点 + Cv2.Rectangle(task.bmpTag, point1, point2, new Scalar(0.0, 0.0, 255.0), 5);//画打标点 //WarningEvent?.Invoke(DateTime.Now,WarningEnum.Low, $"保存第 {count} 行缺陷信息;"); int px = (point1.X - task.xw) > 0 ? (point1.X - task.xw) : 0; diff --git a/LeatherProject/LeatherApp/FrmVerList.resx b/LeatherProject/LeatherApp/FrmVerList.resx index 1ce7492..9d88d2f 100644 --- a/LeatherProject/LeatherApp/FrmVerList.resx +++ b/LeatherProject/LeatherApp/FrmVerList.resx @@ -118,7 +118,12 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - v1.0.2.9(2024-05-09) + v1.0.2.10(2024-06-25) +1、更新等比例缩放算法,提速降内存 +2、等级缺陷判断,可以设置忽略项 +v1.0.2.10(2024-06-18) +1、加入总和缺陷判定等级 +v1.0.2.9(2024-05-09) 1、加入实时幅宽 2、加入jietou,hengdang标签合并 v1.0.2.8(2024-05-06) diff --git a/LeatherProject/LeatherApp/LeatherApp.csproj b/LeatherProject/LeatherApp/LeatherApp.csproj index 1a42c98..72ca3e0 100644 --- a/LeatherProject/LeatherApp/LeatherApp.csproj +++ b/LeatherProject/LeatherApp/LeatherApp.csproj @@ -171,6 +171,7 @@ + diff --git a/LeatherProject/LeatherApp/Page/FHome.Designer.cs b/LeatherProject/LeatherApp/Page/FHome.Designer.cs index 7586b65..72409d4 100644 --- a/LeatherProject/LeatherApp/Page/FHome.Designer.cs +++ b/LeatherProject/LeatherApp/Page/FHome.Designer.cs @@ -28,14 +28,14 @@ /// private void InitializeComponent() { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); this.uiPanel1 = new Sunny.UI.UIPanel(); this.lblLen = new Sunny.UI.UILabel(); this.lblSpeed = new Sunny.UI.UISymbolLabel(); @@ -58,7 +58,6 @@ this.btnEnd = new Sunny.UI.UISymbolButton(); this.btnStart = new Sunny.UI.UISymbolButton(); this.uiTitlePanel2 = new Sunny.UI.UITitlePanel(); - this.ucColorListDefect = new LeatherApp.UIExtend.UCColorList(); this.lineChartDefect = new Sunny.UI.UILineChart(); this.uiTitlePanel3 = new Sunny.UI.UITitlePanel(); this.uiDataGridView1 = new Sunny.UI.UIDataGridView(); @@ -81,7 +80,6 @@ this.lstboxLog = new Sunny.UI.UIListBox(); this.uiTitlePanel6 = new Sunny.UI.UITitlePanel(); this.uiPanel3 = new Sunny.UI.UIPanel(); - this.picDefectImage = new LeatherApp.UIExtend.UCImageView(); this.pnlScannerImg = new Sunny.UI.UITitlePanel(); this.picScanner2 = new System.Windows.Forms.PictureBox(); this.picScanner1 = new System.Windows.Forms.PictureBox(); @@ -100,6 +98,8 @@ this.uiLabel8 = new Sunny.UI.UILabel(); this.uiLabel7 = new Sunny.UI.UILabel(); this.uiLabel6 = new Sunny.UI.UILabel(); + this.picDefectImage = new LeatherApp.UIExtend.UCImageView(); + this.ucColorListDefect = new LeatherApp.UIExtend.UCColorList(); this.uiPanel1.SuspendLayout(); this.uiTitlePanel1.SuspendLayout(); this.uiPanel2.SuspendLayout(); @@ -633,29 +633,6 @@ this.uiTitlePanel2.TitleColor = System.Drawing.Color.White; this.uiTitlePanel2.TitleForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(29)))), ((int)(((byte)(138))))); // - // ucColorListDefect - // - this.ucColorListDefect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.ucColorListDefect.ColorChanged = null; - this.ucColorListDefect.FillColor = System.Drawing.Color.White; - this.ucColorListDefect.FillColor2 = System.Drawing.Color.White; - this.ucColorListDefect.FillDisableColor = System.Drawing.Color.White; - this.ucColorListDefect.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.ucColorListDefect.Location = new System.Drawing.Point(1, 38); - this.ucColorListDefect.MinimumSize = new System.Drawing.Size(1, 1); - this.ucColorListDefect.Name = "ucColorListDefect"; - this.ucColorListDefect.RadiusSides = Sunny.UI.UICornerRadiusSides.None; - this.ucColorListDefect.RectColor = System.Drawing.Color.White; - this.ucColorListDefect.RectDisableColor = System.Drawing.Color.White; - this.ucColorListDefect.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom; - this.ucColorListDefect.Size = new System.Drawing.Size(121, 42); - this.ucColorListDefect.Style = Sunny.UI.UIStyle.Custom; - this.ucColorListDefect.StyleCustomMode = true; - this.ucColorListDefect.TabIndex = 1; - this.ucColorListDefect.Text = "ucColorList1"; - this.ucColorListDefect.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; - // // lineChartDefect // this.lineChartDefect.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -705,21 +682,21 @@ // // uiDataGridView1 // - dataGridViewCellStyle9.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); - this.uiDataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle9; + dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); + this.uiDataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; this.uiDataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.uiDataGridView1.BackgroundColor = System.Drawing.Color.White; this.uiDataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle10.BackColor = System.Drawing.Color.Blue; - dataGridViewCellStyle10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle10.ForeColor = System.Drawing.Color.White; - dataGridViewCellStyle10.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(29)))), ((int)(((byte)(138))))); - dataGridViewCellStyle10.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle10; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle2.BackColor = System.Drawing.Color.Blue; + dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(29)))), ((int)(((byte)(138))))); + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; this.uiDataGridView1.ColumnHeadersHeight = 32; this.uiDataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; this.uiDataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { @@ -734,14 +711,14 @@ this.colArea, this.colZXD, this.colTarget}); - dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle14.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle14.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle14.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle14.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(242)))), ((int)(((byte)(238))))); - dataGridViewCellStyle14.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle14.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.uiDataGridView1.DefaultCellStyle = dataGridViewCellStyle14; + dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle6.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle6.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(242)))), ((int)(((byte)(238))))); + dataGridViewCellStyle6.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.uiDataGridView1.DefaultCellStyle = dataGridViewCellStyle6; this.uiDataGridView1.EnableHeadersVisualStyles = false; this.uiDataGridView1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiDataGridView1.GridColor = System.Drawing.Color.CornflowerBlue; @@ -749,21 +726,21 @@ this.uiDataGridView1.MultiSelect = false; this.uiDataGridView1.Name = "uiDataGridView1"; this.uiDataGridView1.RectColor = System.Drawing.Color.DodgerBlue; - dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle15.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); - dataGridViewCellStyle15.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle15.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle15.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(29)))), ((int)(((byte)(138))))); - dataGridViewCellStyle15.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.uiDataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle15; + dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); + dataGridViewCellStyle7.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle7.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle7.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(29)))), ((int)(((byte)(138))))); + dataGridViewCellStyle7.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle7; this.uiDataGridView1.RowHeadersWidth = 62; - dataGridViewCellStyle16.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle16.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle16.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle16.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(242)))), ((int)(((byte)(238))))); - dataGridViewCellStyle16.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle16; + dataGridViewCellStyle8.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle8.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle8.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(204)))), ((int)(((byte)(242)))), ((int)(((byte)(238))))); + dataGridViewCellStyle8.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle8; this.uiDataGridView1.RowTemplate.Height = 30; this.uiDataGridView1.ScrollBarBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); this.uiDataGridView1.ScrollBarColor = System.Drawing.Color.DodgerBlue; @@ -814,9 +791,9 @@ // colX // this.colX.DataPropertyName = "X"; - dataGridViewCellStyle11.Format = "N1"; - dataGridViewCellStyle11.NullValue = null; - this.colX.DefaultCellStyle = dataGridViewCellStyle11; + dataGridViewCellStyle3.Format = "N1"; + dataGridViewCellStyle3.NullValue = null; + this.colX.DefaultCellStyle = dataGridViewCellStyle3; this.colX.HeaderText = "X(cm)"; this.colX.MinimumWidth = 8; this.colX.Name = "colX"; @@ -826,9 +803,9 @@ // colY // this.colY.DataPropertyName = "Y"; - dataGridViewCellStyle12.Format = "N2"; - dataGridViewCellStyle12.NullValue = null; - this.colY.DefaultCellStyle = dataGridViewCellStyle12; + dataGridViewCellStyle4.Format = "N2"; + dataGridViewCellStyle4.NullValue = null; + this.colY.DefaultCellStyle = dataGridViewCellStyle4; this.colY.HeaderText = "Y(米)"; this.colY.MinimumWidth = 8; this.colY.Name = "colY"; @@ -851,9 +828,9 @@ // // colArea // - dataGridViewCellStyle13.Format = "N2"; - dataGridViewCellStyle13.NullValue = null; - this.colArea.DefaultCellStyle = dataGridViewCellStyle13; + dataGridViewCellStyle5.Format = "N2"; + dataGridViewCellStyle5.NullValue = null; + this.colArea.DefaultCellStyle = dataGridViewCellStyle5; this.colArea.HeaderText = "面积(mm²)"; this.colArea.MinimumWidth = 8; this.colArea.Name = "colArea"; @@ -1062,15 +1039,6 @@ this.uiPanel3.Text = null; this.uiPanel3.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; // - // picDefectImage - // - this.picDefectImage.Dock = System.Windows.Forms.DockStyle.Fill; - this.picDefectImage.Location = new System.Drawing.Point(0, 0); - this.picDefectImage.Margin = new System.Windows.Forms.Padding(0); - this.picDefectImage.Name = "picDefectImage"; - this.picDefectImage.Size = new System.Drawing.Size(350, 226); - this.picDefectImage.TabIndex = 1; - // // pnlScannerImg // this.pnlScannerImg.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) @@ -1359,6 +1327,38 @@ this.uiLabel6.Text = "光源"; this.uiLabel6.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // + // picDefectImage + // + this.picDefectImage.Dock = System.Windows.Forms.DockStyle.Fill; + this.picDefectImage.Location = new System.Drawing.Point(0, 0); + this.picDefectImage.Margin = new System.Windows.Forms.Padding(0); + this.picDefectImage.Name = "picDefectImage"; + this.picDefectImage.Size = new System.Drawing.Size(350, 226); + this.picDefectImage.TabIndex = 1; + // + // ucColorListDefect + // + this.ucColorListDefect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.ucColorListDefect.ColorChanged = null; + this.ucColorListDefect.FillColor = System.Drawing.Color.White; + this.ucColorListDefect.FillColor2 = System.Drawing.Color.White; + this.ucColorListDefect.FillDisableColor = System.Drawing.Color.White; + this.ucColorListDefect.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ucColorListDefect.Location = new System.Drawing.Point(1, 38); + this.ucColorListDefect.MinimumSize = new System.Drawing.Size(1, 1); + this.ucColorListDefect.Name = "ucColorListDefect"; + this.ucColorListDefect.RadiusSides = Sunny.UI.UICornerRadiusSides.None; + this.ucColorListDefect.RectColor = System.Drawing.Color.White; + this.ucColorListDefect.RectDisableColor = System.Drawing.Color.White; + this.ucColorListDefect.RectSides = System.Windows.Forms.ToolStripStatusLabelBorderSides.Bottom; + this.ucColorListDefect.Size = new System.Drawing.Size(121, 42); + this.ucColorListDefect.Style = Sunny.UI.UIStyle.Custom; + this.ucColorListDefect.StyleCustomMode = true; + this.ucColorListDefect.TabIndex = 1; + this.ucColorListDefect.Text = "ucColorList1"; + this.ucColorListDefect.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; + // // FHome // this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; @@ -1382,6 +1382,8 @@ this.StyleCustomMode = true; this.Load += new System.EventHandler(this.FHome_Load); this.Shown += new System.EventHandler(this.FHome_Shown); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.FHome_Paint); + this.Resize += new System.EventHandler(this.FHome_Resize); this.uiPanel1.ResumeLayout(false); this.uiTitlePanel1.ResumeLayout(false); this.uiTitlePanel1.PerformLayout(); diff --git a/LeatherProject/LeatherApp/Page/FHome.cs b/LeatherProject/LeatherApp/Page/FHome.cs index 20c141a..2d98205 100644 --- a/LeatherProject/LeatherApp/Page/FHome.cs +++ b/LeatherProject/LeatherApp/Page/FHome.cs @@ -1,5 +1,4 @@ - -using IKapC.NET; +using IKapC.NET; using LeatherApp.Device; using LeatherApp.Device.CamerUtil; using LeatherApp.Interface; @@ -27,6 +26,8 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using System.Windows.Forms.DataVisualization.Charting; +using static System.Windows.Forms.AxHost; namespace LeatherApp.Page { @@ -54,9 +55,15 @@ namespace LeatherApp.Page //无产品编码时加载 FProductInfo frmProduct; + private double ThnDieLen = 0; + + private Dictionary defectTag = new Dictionary (); //云端 private CloudMgr cloudMgr = new CloudMgr(); private bool init_Cloud; + + //裁切偏移 + private double OffsetCut = 0.2; public FHome(FProductInfo frm) { InitializeComponent(); @@ -262,7 +269,7 @@ namespace LeatherApp.Page /// Records.DefectInfoList /// 幅宽 /// 卷长度 - private void reDrawDefectPoints(List lstDefectInfo, double[] XSizeRange=null, double[] YSizeRange=null,bool addSelRect=true) + private void reDrawDefectPoints(List lstDefectInfo, List listGrade, double[] XSizeRange=null, double[] YSizeRange=null,bool addSelRect=true) { UILineOption option; //AddTextEvent(DateTime.Now,$"绘图", $"缺陷分布, W={string.Join(", ", XSizeRange)},H={string.Join(", ", YSizeRange)}, LastData={JsonConvert.SerializeObject(lstDefectInfo[lstDefectInfo.Count - 1])}"); @@ -352,7 +359,19 @@ namespace LeatherApp.Page series.YAxisDecimalPlaces = 2; //series.Add(1, 1); } - + + if (listGrade != null) + { + + //option = lineChartDefect.Option; + foreach (var item in listGrade) + { + // 设置裁切提示线 + option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.DarkRed, Name = $"{item.GradeCode}-裁切起点-{item.StartY}", Value = item.StartY }); + option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.DarkRed, Name = $"{item.GradeCode}-裁切终点-{item.EndY}", Value = item.EndY }); + } + + } //==== //option.GreaterWarningArea = new UILineWarningArea(3.5); //option.LessWarningArea = new UILineWarningArea(2.2, Color.Gold); @@ -363,6 +382,31 @@ namespace LeatherApp.Page })); } + /// + /// 重新生成缺陷分布(cm2M在内部转换) 加入裁切位置 + /// + /// + /// + /// + /// + private void reDrawDefectPointsAndCut(double startY, double endY, string code) + { + if (lineChartDefect.Option != null ) + { + UILineOption option; + option = lineChartDefect.Option; + + // 设置裁切提示线 + option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.DarkRed, Name = $"{code}-裁切起点-{startY}", Value = startY }); + option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.DarkRed, Name = $"{code}-裁切终点-{endY}", Value = endY }); + + this.BeginInvoke(new System.Action(() => + { + this.lineChartDefect.SetOption(option); + //series.UpdateYData();//按序号更新Y轴值(可设置值超出范围用于闪烁) + })); + } + } /// /// 重新门幅宽度 /// @@ -439,8 +483,8 @@ namespace LeatherApp.Page })); } - private delegate void AddTextDelegate(DateTime time,string tag, string msg, WarningEnum level); - private void AddTextEvent(DateTime now, string tag, string msg, WarningEnum level = WarningEnum.Normal) + private delegate void AddTextDelegate(DateTime time,string tag, string msg, WarningEnum level, bool Show); + private void AddTextEvent(DateTime now, string tag, string msg, WarningEnum level = WarningEnum.Normal, bool Show = true) { try { @@ -451,7 +495,8 @@ namespace LeatherApp.Page now, tag, msg, - level + level, + Show }); } else @@ -471,12 +516,15 @@ namespace LeatherApp.Page // cont = $"{cont}"; //msg = (level == WarningEnum.Normal ? "B" : level == WarningEnum.Low ? "Y" : "R") + msg; - msg = (level == WarningEnum.Normal ? "" : level == WarningEnum.Low ? "Y" : "R") + msg; - //this.Invoke(new System.Action(() => - //{ + if (Show) + { + msg = (level == WarningEnum.Normal ? "" : level == WarningEnum.Low ? "Y" : "R") + msg; + //this.Invoke(new System.Action(() => + //{ if (this.lstboxLog.Items.Count > 1000) this.lstboxLog.Items.Clear(); lstboxLog.Items.Insert(0, msg); + } //})); //日志滚动 //lstLog.SelectedIndex = lstLog.Items.Count - 1; @@ -538,6 +586,31 @@ namespace LeatherApp.Page else AddTextEvent(DateTime.Now, "云端数据", "云端连接失败!", WarningEnum.Low); } + + + ////标记裁切位置 + //this.BeginInvoke(new System.Action(() => + //{ + // List list = new List(); + // list.Add(new DefectInfo() + // { + // X = 1, + // Y = 100, + // Width = 1, + // Height = 1, + // Code = "jiangbban" + // }); + // list.Add(new DefectInfo() + // { + // X = 10, + // Y = 10000, + // Width = 1, + // Height = 1, + // Code = "jiangbban" + // }); + // reDrawDefectPoints(list, new double[2] { 0, 160 }); + // reDrawDefectPointsAndCut(10, 20); + //})); } private void FHome_Shown(object sender, EventArgs e) { @@ -675,12 +748,26 @@ namespace LeatherApp.Page errCode = 2; //加载新产品 string pcode = "1-" + codes[2]; - if (codes[1] == "0" || Config.SuedeList.Contains(codes[1])) + if (codes[1] == "0" || Config.SuedeList1.Contains(codes[1])) pcode = "0-" + codes[2]; +#if false else -#if false pcode = codes[1] + "-" + codes[2]; +#elif HX_LOD + else + pcode = "1-" + codes[2]; #else + else if (codes[1] == "1" || Config.SuedeList2.Contains(codes[1])) + pcode = "1-" + codes[2]; + else if (codes[1] == "2" || Config.SuedeList3.Contains(codes[1])) + pcode = "2-" + codes[2]; + else if (codes[1] == "3" || Config.SuedeList4.Contains(codes[1])) + pcode = "3-" + codes[2]; + else if (codes[1] == "4" || Config.SuedeList5.Contains(codes[1])) + pcode = "4-" + codes[2]; + else if (codes[1] == "5" || Config.SuedeList6.Contains(codes[1])) + pcode = "5-" + codes[2]; + else pcode = "1-" + codes[2]; #endif @@ -834,7 +921,7 @@ namespace LeatherApp.Page }; devContainer.WarningEvent = (now,level, msg) => { - AddTextEvent(DateTime.Now,$"设备事件{Thread.CurrentThread.ManagedThreadId}", msg, level); + AddTextEvent(DateTime.Now,$"设备事件{Thread.CurrentThread.ManagedThreadId}", msg, level, false); if (level == WarningEnum.High) Task.Run(() => warning(level, true)); }; @@ -936,7 +1023,7 @@ namespace LeatherApp.Page { if (Config.Camer_Name == CamerDevNameEnum.埃科) { - AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"采集卡({devIndex}),图像({num})"); + AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"采集卡({devIndex}),图像({num})", WarningEnum.Low, false); Cv2.Flip(matone, matone, FlipMode.XY);//翻转 Bitmap bitmap = BitmapConverter.ToBitmap(matone); this.BeginInvoke(new Action(() => @@ -980,7 +1067,7 @@ namespace LeatherApp.Page Records curRecord = Hashtable.Synchronized(htTask)[currKey] as Records; Device.PhotoLib.PhotoTask task; Mat myMat = matone;//.Clone(); - AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"(图像{num})-采集卡({devIndex}),size:({myMat.Width}*{myMat.Height})({(myMat == null ? "A" : "B")})"); + AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"(图像{num})-采集卡({devIndex}),size:({myMat.Width}*{myMat.Height})({(myMat == null ? "A" : "B")})", WarningEnum.Low, false); //AddTextEvent(DateTime.Now,"拍照", $"Dev={devIndex},图像{num}-2"); lock (lockScanPhoto)//多线程操作 { @@ -1056,19 +1143,43 @@ namespace LeatherApp.Page //warning(WarningEnum.Low, true);//暂停 } errStep = 6; + //厚度检测提示 + if (curRecord.ProductInfo.OpenThicknessDetection) + { + if ((curRecord.Len - ThnDieLen) > curRecord.ProductInfo.ThicknessDetectionStopDis) + { + ThnDieLen = curRecord.Len; + AddTextEvent(DateTime.Now, $"厚度检测{Thread.CurrentThread.ManagedThreadId}", $"位置:{curRecord.Len}; 上次位置:{ThnDieLen}"); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + //devContainer.io_output(CMDName.绿灯输出, false, true, 0); + //devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } + } + } // - AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"待处理图像队列:{curRecord.ScannerPhotoCount - curRecord.ScannerPhotoFinishCount}张"); + AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"待处理图像队列:{curRecord.ScannerPhotoCount - curRecord.ScannerPhotoFinishCount}张", WarningEnum.Low, false); if (task.scanPhotos0 != null && task.scanPhotos1 != null) { var scanPhoto = task.scanPhotos0 as ScanPhotoInfo; curRecord.dicPhoto_Defect.TryAdd(scanPhoto.photoIndex, false);//加入索引,默认无瑕疵 - AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"图像索引:{scanPhoto.photoIndex},标识数:{curRecord.dicPhoto_Defect.Count}"); + AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"图像索引:{scanPhoto.photoIndex},标识数:{curRecord.dicPhoto_Defect.Count}", WarningEnum.Low, false); errStep = 7; + //暂停:瑕疵二次判断 if (this.defectPauseForUser) { int liPhotoIndex = scanPhoto.photoIndex - Config.defectPauseSkipPhotoCount; - AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"Dev={devIndex},图像{scanPhoto.photoIndex} {liPhotoIndex}={scanPhoto.photoIndex}-{Config.defectPauseSkipPhotoCount};{JsonConvert.SerializeObject(curRecord.dicPhoto_Defect)}"); + AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"Dev={devIndex},图像{scanPhoto.photoIndex} {liPhotoIndex}={scanPhoto.photoIndex}-{Config.defectPauseSkipPhotoCount};{JsonConvert.SerializeObject(curRecord.dicPhoto_Defect)}", WarningEnum.Low, false); if (liPhotoIndex >= 0 && curRecord.dicPhoto_Defect[liPhotoIndex]) { List lstEditDefect = curRecord.DefectInfoList.Where(m => m.PhotoIndex == liPhotoIndex).ToList(); @@ -1096,9 +1207,10 @@ namespace LeatherApp.Page this.BeginInvoke(new System.Action(() => { int liDefectCount = lstEditDefect.Count; - FHome_Defect frmDefect = new FHome_Defect(lstEditDefect); + FHome_Defect frmDefect = new FHome_Defect(lstEditDefect, defectTag[liPhotoIndex]); if (frmDefect.ShowDialog() == DialogResult.OK) { + defectTag.Remove(liPhotoIndex); string oldCode; for (int i = 0; i < this.uiDataGridView1.Rows.Count; i++) { @@ -1108,7 +1220,7 @@ namespace LeatherApp.Page long uid = (long)this.uiDataGridView1.Rows[i].Cells["colUid"].Value; foreach (var row in lstEditDefect) { - AddTextEvent(DateTime.Now, $"暂停{Thread.CurrentThread.ManagedThreadId}", $"修改第({i + 1})行瑕疵名称,{uid} {row.uid}"); + AddTextEvent(DateTime.Now, $"暂停{Thread.CurrentThread.ManagedThreadId}", $"修改第({i + 1})行瑕疵名称,{uid} {row.uid}", WarningEnum.Low, false); if (row.uid == uid) { oldCode = this.uiDataGridView1.Rows[i].Cells["colCode"].Value.ToString(); @@ -1146,7 +1258,7 @@ namespace LeatherApp.Page this.uiMiniPagination1.TotalCount = curRecord.DefectTotalCount = curRecord.DefectInfoList.Count; // //double len = Math.Round((res.photoIndex + 1) * bmpHeight * 1.0d / Config.cm2px_y + 0.005f, 2); - this.reDrawDefectPoints(curRecord.DefectInfoList); + this.reDrawDefectPoints(curRecord.DefectInfoList, curRecord.GradeDifferentiateInfoList); errStep = 9; //自动继续运行设备(这里临时暂停后不能再急停,否则无法继续) if (!Config.StopPLC) @@ -1170,11 +1282,186 @@ namespace LeatherApp.Page } } errStep = 10; + + //以下判定放置于二次判定之后,因为二次判定可能会忽略部分检测项!! + + //暂停:缺陷超标 + //每百米告警判断???在此还是在收到新照片时触发??? + if (curRecord.ProductInfo.DefectCountLimit > 0 && curRecord.DefectTotalCount >= curRecord.ProductInfo.DefectCountLimit && curRecord.DefectInfoList != null) + { + int liPhotoIndex = scanPhoto.photoIndex - Config.defectPauseSkipPhotoCount; //二次判定完的图片index + int compLen = 100 * 100;//每百米 to cm + int compCount = compLen * Config.cm2px_y / scanPhoto.mat.Height; //100m图像张数 + //从上次告警后重新开始计算长度及数量 + int defectCount = curRecord.DefectInfoList.Where(m => m.PhotoIndex >= curRecord.preWarningPhotoIndex && m.PhotoIndex >= (liPhotoIndex + 1 - compCount) && m.PhotoIndex <= liPhotoIndex).Count(); + if (defectCount >= curRecord.ProductInfo.DefectCountLimit) + { + curRecord.preWarningPhotoIndex = liPhotoIndex + 1; + AddTextEvent(DateTime.Now, $"告警{Thread.CurrentThread.ManagedThreadId}", $"每百米瑕疵数量达到阈值!({defectCount}>={curRecord.ProductInfo.DefectCountLimit})", WarningEnum.High); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + devContainer.io_output(CMDName.绿灯输出, false, true, 0); + devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } + } + errStep = 11; + + } + //暂停:每个缺陷项不同长度检测数量报警 + if (curRecord.DefectTotalCount > 0 && curRecord.DefectInfoList != null) + { +#if true + //按缺陷计算没X米多少缺陷报警 + for (int i = 0; i < curRecord.ProductInfo.QualifiedLimitList.Count; i++) + { + var defectWarn = curRecord.ProductInfo.QualifiedLimitList[i]; + if (defectWarn.DefectWarnLength > 0 || defectWarn.DefectWarnCnt > 0) + { + errStep = 12; + int liPhotoIndex = scanPhoto.photoIndex - Config.defectPauseSkipPhotoCount; //二次判定完的图片index + int warnLen = defectWarn.DefectWarnLength * 100;//每米 to cm + int warnCount = warnLen * Config.cm2px_y / scanPhoto.mat.Height; //计算图像张数 + //从上次告警后重新开始计算长度及数量 + int warnDefectCount = curRecord.DefectInfoList.Where(m => m.PhotoIndex >= curRecord.preWarningPhotoIndexByLabel[i] && m.PhotoIndex >= (liPhotoIndex + 1 - warnCount) && m.PhotoIndex <= liPhotoIndex).Count(); + if (warnDefectCount >= defectWarn.DefectWarnCnt) + { + curRecord.preWarningPhotoIndexByLabel[i] = liPhotoIndex + 1; + AddTextEvent(DateTime.Now, $"告警{Thread.CurrentThread.ManagedThreadId}", $"每{defectWarn.DefectWarnLength}米{Config.getDefectName(defectWarn.Code)}瑕疵数量达到阈值!({warnDefectCount}>={defectWarn.DefectWarnCnt})", WarningEnum.High); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + devContainer.io_output(CMDName.绿灯输出, false, true, 0); + devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } + } + } + } +#endif + } + + //暂停:按等级分卷 + if (curRecord.DefectTotalCount > 0 && curRecord.ProductInfo.GradeLimitList != null && curRecord.ProductInfo.GradeLimitList.Count > 0 && curRecord.DefectInfoList != null) + { + errStep = 13; + //按缺陷计算每X米多少缺陷分等级 + for (int i = 0; i < curRecord.ProductInfo.GradeLimitList.Count; i++) + { + if (curRecord.ProductInfo.GradeLimitList[i].JudgeLength > 0 ) + { + errStep = 14; + int liPhotoIndex = scanPhoto.photoIndex - Config.defectPauseSkipPhotoCount; //二次判定完的图片index + double GrageLen = curRecord.ProductInfo.GradeLimitList[i].JudgeLength * 100;//每米 to cm + int warnCount =(int)(GrageLen * Config.cm2px_y) / scanPhoto.mat.Height; //计算图像张数 + + if (curRecord.GradeDifferentiateInfoList == null) + { + curRecord.GradeDifferentiateInfoList = new List(); + } + GradeLimit item = curRecord.ProductInfo.GradeLimitList[i]; + + GradeDifferentiateInfo differentiateInfo = new GradeDifferentiateInfo(); + //从上次告警后重新开始计算长度及数量 + var allFind = curRecord.DefectInfoList.Where(m => m.PhotoIndex >= curRecord.preGradePhotoIndexByGradeIndex && m.PhotoIndex >= (liPhotoIndex + 1 - warnCount) && m.PhotoIndex <= liPhotoIndex).ToList(); + int warnDefectCount = 0; + if(item.Code == "All") + warnDefectCount = allFind.Count(); + else + { + warnDefectCount = allFind.Where(m => m.Code == item.Code).Count(); + } + int GradeCount = 0; + if(item.E >0 && warnDefectCount > item.E) + { + GradeCount = item.E; + differentiateInfo.GradeCode = "E"; + } + else if (item.D > 0 && warnDefectCount > item.D) + { + GradeCount = item.D; + differentiateInfo.GradeCode = "D"; + } + else if (item.C > 0 && warnDefectCount > item.C) + { + GradeCount = item.C; + differentiateInfo.GradeCode = "C"; + } + else if (item.B > 0 && warnDefectCount > item.B) + { + GradeCount = item.B; + differentiateInfo.GradeCode = "B"; + } + else if (item.A > 0 && warnDefectCount > item.A) + { + GradeCount = item.A; + differentiateInfo.GradeCode = "A"; + } + else + { + //不需要分级,下一条 + continue; + } + + differentiateInfo.UseGradeLimit = item; + differentiateInfo.DefectCnt = warnDefectCount; + differentiateInfo.StartPhotoIndex = allFind.Min(x=>x.PhotoIndex); + differentiateInfo.EndPhotoIndex = allFind.Max(x => x.PhotoIndex); + differentiateInfo.StartY = allFind.Min(x=>x.CentreY) / 100 - OffsetCut; + differentiateInfo.EndY = allFind.Max(x => x.CentreY) / 100 + OffsetCut; + differentiateInfo.CutLen = differentiateInfo.EndY - differentiateInfo.StartY; + //记录新的判定开始位置 + curRecord.preGradePhotoIndexByGradeIndex = liPhotoIndex + 1; + AddTextEvent(DateTime.Now, $"提示{Thread.CurrentThread.ManagedThreadId}", $"每{curRecord.ProductInfo.GradeLimitList[i].JudgeLength}米,瑕疵数量达到分级阈值!({warnDefectCount}>={GradeCount})", WarningEnum.Low); + curRecord.GradeDifferentiateInfoList.Add(differentiateInfo); + //标记裁切位置 + this.BeginInvoke(new System.Action(() => + { + reDrawDefectPointsAndCut(differentiateInfo.StartY, differentiateInfo.EndY, differentiateInfo.GradeCode); + })); + //裁切暂停提示 + if (curRecord.ProductInfo.IsHintCutting) + { + AddTextEvent(DateTime.Now, $"提示", $"裁切 起始{differentiateInfo.StartY}-终点{differentiateInfo.EndY}", WarningEnum.Low); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + devContainer.io_output(CMDName.绿灯输出, false, true, 0); + devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } + } + + } + } + } task.record = curRecord; task.finishEvent = callBackPhotoEvent; devContainer.libPhoto.add(task); - AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"Dev={devIndex},图像{scanPhoto.photoIndex},已加入图像处理队列"); - errStep = 11; + AddTextEvent(DateTime.Now, $"拍照{Thread.CurrentThread.ManagedThreadId}", $"Dev={devIndex},图像{scanPhoto.photoIndex},已加入图像处理队列", WarningEnum.Low, false); + errStep = 21; Application.DoEvents(); } } @@ -1191,7 +1478,7 @@ namespace LeatherApp.Page ScanPhotoInfo scanPhotos1 = task.scanPhotos1 as ScanPhotoInfo; Stopwatch stopWatch = new Stopwatch(); - AddTextEvent(DateTime.Now,$"图像处理{Thread.CurrentThread.ManagedThreadId}", $"图像{scanPhotos0.photoIndex},ThreadId={Thread.CurrentThread.ManagedThreadId}"); + AddTextEvent(DateTime.Now,$"图像处理{Thread.CurrentThread.ManagedThreadId}", $"图像{scanPhotos0.photoIndex},ThreadId={Thread.CurrentThread.ManagedThreadId}", WarningEnum.Low, false); string time = ""; stopWatch.Start(); try @@ -1245,7 +1532,7 @@ namespace LeatherApp.Page } AddTextEvent(DateTime.Now,$"裁边{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-左图去重后:{mat0.Width}*{mat0.Height},右图:{mat1.Width}*{mat1.Height}," + - $"重复值:{Config.MiddleSuperposition},孔洞:{Config.MarginHoleWidth},cm2px:{Config.cm2px_x},resizeWidth:{resizeWidth}"); + $"重复值:{Config.MiddleSuperposition},孔洞:{Config.MarginHoleWidth},cm2px:{Config.cm2px_x},resizeWidth:{resizeWidth}", WarningEnum.Low, false); errStep = 4; //mat0 = OpenCVUtil.getMaxInsetRect(mat0); int marginWidth0, marginWidth1; @@ -1260,7 +1547,7 @@ namespace LeatherApp.Page time += $"->图2裁边({stopWatch.ElapsedMilliseconds})"; //水平合并l Mat mat = OpenCVUtil.mergeImage_sameSize(new Mat[] { mat0, mat1 });//这里相机反装,左右反转下 - AddTextEvent(DateTime.Now,$"裁边{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-边缘宽度:(左图)={marginWidth0},(右图)={marginWidth1}; 裁边去孔洞后:({mat0.Width}+{mat1.Width}={mat0.Width+ mat1.Width});合并后(去孔洞):{mat.Width}*{mat.Height}"); + AddTextEvent(DateTime.Now,$"裁边{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-边缘宽度:(左图)={marginWidth0},(右图)={marginWidth1}; 裁边去孔洞后:({mat0.Width}+{mat1.Width}={mat0.Width+ mat1.Width});合并后(去孔洞):{mat.Width}*{mat.Height}", WarningEnum.Low, false); float widthRatio = mat.Width * 1.0f / resize.Width;//宽度比例 time += $"->图1+2合并({stopWatch.ElapsedMilliseconds})"; @@ -1274,7 +1561,7 @@ namespace LeatherApp.Page if (curRecord.FaceWidthMax < faceWidthY_cm) curRecord.FaceWidthMax = faceWidthY_cm; var point = new float[] { faceWidthX_cm, faceWidthY_cm };// new System.Drawing.PointF(faceWidthX_cm, faceWidthY_cm); - AddTextEvent(DateTime.Now,$"门幅{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-({scanPhotos0.photoIndex})位置:{point[0]}; 幅宽:{point[1]}"); + AddTextEvent(DateTime.Now,$"门幅{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-({scanPhotos0.photoIndex})位置:{point[0]}; 幅宽:{point[1]}", WarningEnum.Low, false); curRecord.FacePointList.Add(point); reDrawFaceWidth(curRecord.FacePointList, new double[] { 0, Math.Round(point[0] + 0.005f, 2) }, @@ -1295,14 +1582,14 @@ namespace LeatherApp.Page this.lblLen.Tag = faceWidthX_cm; this.lblSpeed.Text = $"速度:{Math.Round(lenMi / curRecord.TimeLen, 2)}米/分"; this.uilbKF.Text = $"当前幅宽:{faceWidthY_cm}cm"; - })); + })); // errStep = 9; time += $"->速度刷新({stopWatch.ElapsedMilliseconds})"; //----缺陷队列 int oxw, oxh; mat = OpenCVUtil.resize(mat, resize.Width, resize.Height, out oxw, out oxh); - AddTextEvent(DateTime.Now,$"图像处理{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-合成图resize后:{mat.Width}*{mat.Height}"); + AddTextEvent(DateTime.Now,$"图像处理{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-合成图resize后:{mat.Width}*{mat.Height}", WarningEnum.Low, false); devContainer.libDefect.add(new Device.DefectLib.DefectTask() { modelName= curRecord.ProductInfo.ModelName, @@ -1328,7 +1615,7 @@ namespace LeatherApp.Page } finally { - AddTextEvent(DateTime.Now,$"图像处理{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-进度计时:{time}"); + AddTextEvent(DateTime.Now,$"图像处理{Thread.CurrentThread.ManagedThreadId}", $"(图像{scanPhotos0.photoIndex})-进度计时:{time}", WarningEnum.Low, false); scanPhotos0.mat.Dispose(); scanPhotos1.mat.Dispose(); scanPhotos0 = scanPhotos1 = null; @@ -1342,7 +1629,7 @@ namespace LeatherApp.Page int step = 0; try { - AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", $"图像队列:{res.record.ScannerPhotoFinishCount+1}/{res.record.ScannerPhotoCount} (图像{res.photoIndex})检测结果:{res.isSucceed}"); + AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", $"图像队列:{res.record.ScannerPhotoFinishCount+1}/{res.record.ScannerPhotoCount} (图像{res.photoIndex})检测结果:{res.isSucceed}", WarningEnum.Low, false); string dirPath = FileUtil.initFolder($"{Config.ImagePath}{res.record.BatchId}_{res.record.ReelId}\\"); string dirSourcePath = FileUtil.initFolder($"{Config.ImagePath}{res.record.BatchId}_{res.record.ReelId}\\源图\\"); //Cv2.Flip(res.bmp, res.bmp, FlipMode.XY);//翻转 @@ -1352,10 +1639,10 @@ namespace LeatherApp.Page if (res.isSucceed) { step = 1; - AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", $"(图像{res.photoIndex})-瑕疵检测完成,共{res.excelTable.Rows.Count}个瑕疵!各环节用时:{string.Join(",",res.stopwatch)}"); + AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", $"(图像{res.photoIndex})-瑕疵检测完成,共{res.excelTable.Rows.Count}个瑕疵!各环节用时:{string.Join(",",res.stopwatch)}", WarningEnum.Low, false); //AddTextEvent(DateTime.Now,$"打标完成", $"第 ({res.photoIndex}) 张照片,计算过程:{res.resultInfo}"); - if (!Config.IsSaveAllImage && Config.IsSaveDefectSourceImage) - OpenCvSharp.Extensions.BitmapConverter.ToBitmap(res.bmp).Save($"{dirSourcePath}{res.photoIndex}.bmp", ImageFormat.Bmp); + //if (!Config.IsSaveAllImage && Config.IsSaveDefectSourceImage) + // OpenCvSharp.Extensions.BitmapConverter.ToBitmap(res.bmp).Save($"{dirSourcePath}{res.photoIndex}.bmp", ImageFormat.Bmp); step = 2; if (res.excelTable.Rows.Count > 0) @@ -1363,6 +1650,9 @@ namespace LeatherApp.Page res.record.dicPhoto_Defect[res.photoIndex] = true;//改为此图有瑕疵 //有瑕疵打标图必需保存 Jpeg OpenCvSharp.Extensions.BitmapConverter.ToBitmap(res.bmpTag).Save($"{dirPath}{res.photoIndex}_tag.jpg", ImageFormat.Jpeg); + if (!Config.IsSaveAllImage && Config.IsSaveDefectSourceImage) + OpenCvSharp.Extensions.BitmapConverter.ToBitmap(res.bmp).Save($"{dirSourcePath}{res.photoIndex}.bmp", ImageFormat.Bmp); + step = 3; res.record.DefectTotalCount += res.excelTable.Rows.Count; if (res.record.DefectInfoList == null) @@ -1398,6 +1688,12 @@ namespace LeatherApp.Page defectInfo.uid = preTicks++;// res.record.DefectInfoList.Count;//程序中的唯一索引,用于移除用索引 //AddTextEvent(DateTime.Now,$"打标完成", $"第{i}个缺陷:{ JsonConvert.SerializeObject(defectInfo)}; Y={res.photoIndex * res.bmp.Height * 1.0d / Config.cm2px_y}+{res.excelTable.Rows[i]["Y"].ToString()}"); step = 7 + i * 10; + + if(!defectTag.ContainsKey(res.photoIndex)) + { + defectTag.Add(res.photoIndex, res.bmpTag.Clone()); + } + //保存打标小图 if (Config.IsSaveDefectCutImage) { @@ -1424,9 +1720,23 @@ namespace LeatherApp.Page if (res.record.ProductInfo.DefectAreaLimit > 0 && defectInfo.Area>=res.record.ProductInfo.DefectAreaLimit) { AddTextEvent(DateTime.Now,$"告警{Thread.CurrentThread.ManagedThreadId}", $"瑕疵面积达到阈值!({defectInfo.Area}>={res.record.ProductInfo.DefectAreaLimit})", WarningEnum.High); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + devContainer.io_output(CMDName.绿灯输出, false, true, 0); + devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } } } - AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", "更新UI"); + AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", "更新UI", WarningEnum.Low, false); //更新UI int bmpHeight = res.bmp.Height; this.BeginInvoke(new System.Action(() => @@ -1441,15 +1751,16 @@ namespace LeatherApp.Page // double len = Math.Round((res.photoIndex + 1) * bmpHeight * 1.0d / Config.cm2px_y+0.005f, 2); - this.reDrawDefectPoints(res.record.DefectInfoList, new double[] { 0, Math.Round(res.record.FaceWidthMax+ 0.005f, 2) }, new double[] { 0, len }); + this.reDrawDefectPoints(res.record.DefectInfoList, res.record.GradeDifferentiateInfoList, new double[] { 0, Math.Round(res.record.FaceWidthMax+ 0.005f, 2) }, new double[] { 0, len + OffsetCut * 100}); })); step = 9; - AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", "保存CSV"); + AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", "保存CSV", WarningEnum.Low, false); //保存CSV bool b = Utils.ExcelUtil.DataTable2CSV($"{dirPath}{res.photoIndex}.csv", res.excelTable); //AddTextEvent(DateTime.Now,$"打标完成", $"{res.tag}.xlsx {(b ? "保存成功!" : "保存失败!")}"); step = 10; +#if 转移判定位置 //每百米告警判断???在此还是在收到新照片时触发??? if (res.record.ProductInfo.DefectCountLimit > 0 && res.record.DefectTotalCount >= res.record.ProductInfo.DefectCountLimit) { @@ -1461,9 +1772,23 @@ namespace LeatherApp.Page { res.record.preWarningPhotoIndex = res.photoIndex + 1; AddTextEvent(DateTime.Now,$"告警{Thread.CurrentThread.ManagedThreadId}", $"每百米瑕疵数量达到阈值!({defectCount}>={res.record.ProductInfo.DefectCountLimit})", WarningEnum.High); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + devContainer.io_output(CMDName.绿灯输出, false, true, 0); + devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } } step = 11; -#if false +#if true //按缺陷计算没X米多少缺陷报警 for (int i = 0; i < res.record.ProductInfo.QualifiedLimitList.Count; i++) { @@ -1479,11 +1804,27 @@ namespace LeatherApp.Page { res.record.preWarningPhotoIndexByLabel[i] = res.photoIndex + 1; AddTextEvent(DateTime.Now, $"告警{Thread.CurrentThread.ManagedThreadId}", $"每{defectWarn.DefectWarnLength}米{Config.getDefectName(defectWarn.Code)}瑕疵数量达到阈值!({warnDefectCount}>={defectWarn.DefectWarnCnt})", WarningEnum.High); + if (!Config.StopPLC) + this.devContainer.devPlc.pauseDev(); + else if (!Config.StopIO && devContainer.devIOCard.IsInit) + { + //只是设备暂停,APP没暂停 + devContainer.io_output(CMDName.绿灯输出, false, true, 0); + devContainer.io_output(CMDName.黄灯输出); + devContainer.devIOCard.writeBitState(0, 1, true); + Task.Run(async () => + { + await Task.Delay(500); + this.devContainer.devIOCard.writeBitState(0, 1, false); + }); + } } } } #endif } + +#endif } } @@ -1505,7 +1846,7 @@ namespace LeatherApp.Page res.record.ScannerPhotoFinishCount++; int liScannerPhotoFinishCount = res.record.ScannerPhotoFinishCount; int liScannerPhotoCount = res.record.ScannerPhotoCount; - AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", $"{liScannerPhotoFinishCount}/{liScannerPhotoCount}"); + AddTextEvent(DateTime.Now,$"检测完成{Thread.CurrentThread.ManagedThreadId}", $"{liScannerPhotoFinishCount}/{liScannerPhotoCount}", WarningEnum.Low, false); //this.BeginInvoke(new System.Action(() => //{ // this.lblWaitImageCount.Text = $"{liScannerPhotoCount - liScannerPhotoFinishCount}"; @@ -1550,21 +1891,52 @@ namespace LeatherApp.Page { step = 4; int count; - foreach(GradeLimit item in gradeLimitList) + //if (model.ProductInfo.IsAllDefectGetGradeLimit) + //{ + // step = 5; + // if ((model.DefectInfoList != null) && (model.DefectInfoList.Count > 0)) + // count = model.DefectInfoList.Count(); + // else + // count = 0; + // step = 6; + // GradeLimit item = gradeLimitList.Find(x => x.Code == "All"); + // if (item != null) + // { + // if (count <= item.A && model.Grade <= 1) model.Grade = 1; + // else if (count <= item.B && item.B > 0 && model.Grade <= 2) model.Grade = 2; + // else if (count <= item.C && item.C > 0 && model.Grade <= 3) model.Grade = 3; + // else if (count <= item.D && item.D > 0 && model.Grade <= 4) model.Grade = 4; + // else if (count <= item.E && item.E > 0 && model.Grade <= 5) model.Grade = 5; + // else if (count > 0) model.Grade = 6;//不合格 + // AddTextEvent(DateTime.Now, "标准判断-总和缺陷", $"({key}) 批号({model.BatchId}),标准={(char)(model.Grade + 64)} [{item.Code}:{count};A<={item.A};B<={item.B};C<={item.C};D<={item.D};E<={item.E}]"); + // } + //} + //else + //{ + // foreach (GradeLimit item in gradeLimitList) + // { + // if ((model.DefectInfoList != null) && (model.DefectInfoList.Count > 0)) + // count = model.DefectInfoList.Where(m => m.Code == item.Code).Count(); + // else + // count = 0; + + // if (count <= item.A && model.Grade <= 1) model.Grade = 1; + // else if (count <= item.B && item.B > 0 && model.Grade <= 2) model.Grade = 2; + // else if (count <= item.C && item.C > 0 && model.Grade <= 3) model.Grade = 3; + // else if (count <= item.D && item.D > 0 && model.Grade <= 4) model.Grade = 4; + // else if (count <= item.E && item.E > 0 && model.Grade <= 5) model.Grade = 5; + // else if (count > 0) model.Grade = 6;//不合格 + // AddTextEvent(DateTime.Now, "标准判断-分缺陷", $"({key}) 批号({model.BatchId}),标准={(char)(model.Grade + 64)} [{item.Code}:{count};A<={item.A};B<={item.B};C<={item.C};D<={item.D};E<={item.E}]"); + // } + //} + if (model.GradeDifferentiateInfoList != null) { - if((model.DefectInfoList != null)&&(model.DefectInfoList.Count >0)) - count = model.DefectInfoList.Where(m => m.Code == item.Code).Count(); - else - count = 0; - if (count <= item.A && model.Grade <= 1) model.Grade = 1; - else if (count <= item.B && item.B > 0 && model.Grade <= 2) model.Grade = 2; - else if (count <= item.C && item.C > 0 && model.Grade <= 3) model.Grade = 3; - else if (count <= item.D && item.D > 0 && model.Grade <= 4) model.Grade = 4; - else if (count <= item.E && item.E > 0 && model.Grade <= 5) model.Grade = 5; - else if (count>0) model.Grade = 6;//不合格 - AddTextEvent(DateTime.Now,"标准判断", $"({key}) 批号({model.BatchId}),标准={(char)(model.Grade + 64)} [{item.Code}:{count};A<={item.A};B<={item.B};C<={item.C};D<={item.D};E<={item.E}]"); - } - step = 5; + foreach (var item in model.GradeDifferentiateInfoList) + { + AddTextEvent(DateTime.Now, "分卷判断", $"({key}) 批号({model.BatchId}),等级={item.GradeCode} 位置[{item.StartY}-{item.EndY}],长度={item.CutLen},瑕疵数={item.DefectCnt}"); + } + } + step = 7; } model.Qualified = (model.Grade < 6);//是否合格 if (!svcRecord.InsertNav(model)) @@ -1617,6 +1989,7 @@ namespace LeatherApp.Page private void btnStart_Click(object sender, EventArgs e) { AddTextEvent(DateTime.Now,"启动", "下发启动指令..."); + //ThnDieLen = 0; if (!Config.StopPLC) this.devContainer.devPlc.runDev(); else if (!Config.StopIO && devContainer.devIOCard.IsInit) @@ -1693,6 +2066,8 @@ namespace LeatherApp.Page resetUIValue(); AddTextEvent(DateTime.Now,"启动", "等待扫码..."); currentState = CurrentStateEnum.运行中; + defectTag.Clear(); + ThnDieLen = 0; } this.Invoke(new System.Action(() => @@ -1907,7 +2282,7 @@ namespace LeatherApp.Page dt.Code = "jb"; dt.image = Image.FromFile("C:\\Users\\fang\\Desktop\\123.png"); lstEditDefect.Add(dt); - FHome_Defect frmDefect = new FHome_Defect(lstEditDefect); + FHome_Defect frmDefect = new FHome_Defect(lstEditDefect, null); frmDefect.ShowDialog(); return; Config.LoadAllConfig(); @@ -2104,5 +2479,15 @@ namespace LeatherApp.Page record.ErpLen = val; } } + + private void FHome_Resize(object sender, EventArgs e) + { + uilbKF.Top = 8; + } + + private void FHome_Paint(object sender, PaintEventArgs e) + { + uilbKF.Top = 8; + } } } diff --git a/LeatherProject/LeatherApp/Page/FHome_Defect.Designer.cs b/LeatherProject/LeatherApp/Page/FHome_Defect.Designer.cs index dc00b2b..ba449f0 100644 --- a/LeatherProject/LeatherApp/Page/FHome_Defect.Designer.cs +++ b/LeatherProject/LeatherApp/Page/FHome_Defect.Designer.cs @@ -29,14 +29,17 @@ private void InitializeComponent() { this.uiPanel1 = new Sunny.UI.UIPanel(); + this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); this.btnOK = new Sunny.UI.UIButton(); this.btnCancel = new Sunny.UI.UIButton(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.uiPanel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); this.SuspendLayout(); // // uiPanel1 // + this.uiPanel1.Controls.Add(this.pictureBox1); this.uiPanel1.Controls.Add(this.flowLayoutPanel1); this.uiPanel1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiPanel1.Location = new System.Drawing.Point(4, 39); @@ -48,6 +51,17 @@ this.uiPanel1.Text = "uiPanel1"; this.uiPanel1.TextAlignment = System.Drawing.ContentAlignment.MiddleCenter; // + // flowLayoutPanel1 + // + this.flowLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.flowLayoutPanel1.AutoScroll = true; + this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 303); + this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.flowLayoutPanel1.Size = new System.Drawing.Size(1236, 613); + this.flowLayoutPanel1.TabIndex = 0; + // // btnOK // this.btnOK.Cursor = System.Windows.Forms.Cursors.Hand; @@ -75,13 +89,17 @@ this.btnCancel.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); // - // flowLayoutPanel1 + // pictureBox1 // - this.flowLayoutPanel1.AutoScroll = true; - this.flowLayoutPanel1.Location = new System.Drawing.Point(3, 3); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(1236, 913); - this.flowLayoutPanel1.TabIndex = 0; + this.pictureBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.pictureBox1.Location = new System.Drawing.Point(3, 3); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(1236, 294); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.pictureBox1.TabIndex = 1; + this.pictureBox1.TabStop = false; // // FHome_Defect // @@ -99,6 +117,7 @@ this.ZoomScaleRect = new System.Drawing.Rectangle(22, 22, 800, 450); this.Load += new System.EventHandler(this.FHome_Defect_Load); this.uiPanel1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); this.ResumeLayout(false); } @@ -109,5 +128,6 @@ private Sunny.UI.UIButton btnOK; private Sunny.UI.UIButton btnCancel; private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private System.Windows.Forms.PictureBox pictureBox1; } } \ No newline at end of file diff --git a/LeatherProject/LeatherApp/Page/FHome_Defect.cs b/LeatherProject/LeatherApp/Page/FHome_Defect.cs index b9a4fb0..8f3cbaf 100644 --- a/LeatherProject/LeatherApp/Page/FHome_Defect.cs +++ b/LeatherProject/LeatherApp/Page/FHome_Defect.cs @@ -1,5 +1,7 @@ using LeatherApp.UIExtend; using Models; +using OpenCvSharp; +using OpenCvSharp.Extensions; using Sunny.UI; using System; using System.Collections.Generic; @@ -17,10 +19,14 @@ namespace LeatherApp.Page { private List list; public List lstDel = new List(); - public FHome_Defect(List lst) + + private Mat Image; + public FHome_Defect(List lst, Mat img) { InitializeComponent(); list = lst; + Image = img; + pictureBox1.Image = Image.ToBitmap(); init(); } diff --git a/LeatherProject/LeatherApp/Page/FProductInfo.Designer.cs b/LeatherProject/LeatherApp/Page/FProductInfo.Designer.cs index 0efc6d9..fb9f3dd 100644 --- a/LeatherProject/LeatherApp/Page/FProductInfo.Designer.cs +++ b/LeatherProject/LeatherApp/Page/FProductInfo.Designer.cs @@ -28,17 +28,18 @@ /// private void InitializeComponent() { - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle(); - System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FProductInfo)); this.uiTitlePanel2 = new Sunny.UI.UITitlePanel(); this.tcbarTensionValue = new Sunny.UI.UITrackBar(); this.tcbarGain = new Sunny.UI.UITrackBar(); @@ -56,6 +57,9 @@ this.cmbModelName = new Sunny.UI.UIComboBox(); this.uiLabel1 = new Sunny.UI.UILabel(); this.uiTitlePanel4 = new Sunny.UI.UITitlePanel(); + this.uiNumPadTextBox1 = new Sunny.UI.UINumPadTextBox(); + this.uiSwitch1 = new Sunny.UI.UISwitch(); + this.uiLabel11 = new Sunny.UI.UILabel(); this.btnDefectOption = new Sunny.UI.UISymbolButton(); this.swcDefectPauseForUser = new Sunny.UI.UISwitch(); this.numDefectCountLimit = new Sunny.UI.UINumPadTextBox(); @@ -65,14 +69,16 @@ this.uiLabel7 = new Sunny.UI.UILabel(); this.uiTitlePanel5 = new Sunny.UI.UITitlePanel(); this.uiDataGridView1 = new Sunny.UI.UIDataGridView(); + this.col_code = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_zxd = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_area = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_contrast_lower = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_contrast_top = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_IsOR = new System.Windows.Forms.DataGridViewCheckBoxColumn(); + this.col_Len = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col_Cnt = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.uiTitlePanel6 = new Sunny.UI.UITitlePanel(); this.uiDataGridView2 = new Sunny.UI.UIDataGridView(); - this.col2_code = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col2_1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col2_2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col2_3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col2_4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col2_5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.uiPanel1 = new Sunny.UI.UIPanel(); this.uiFlowLayoutPanel1 = new Sunny.UI.UIFlowLayoutPanel(); this.btnSave = new Sunny.UI.UISymbolButton(); @@ -88,14 +94,17 @@ this.cmbColor = new Sunny.UI.UIComboBox(); this.uiLabel3 = new Sunny.UI.UILabel(); this.uiLabel2 = new Sunny.UI.UILabel(); - this.col_code = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col_zxd = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col_area = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col_contrast_lower = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col_contrast_top = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col_IsOR = new System.Windows.Forms.DataGridViewCheckBoxColumn(); - this.col_Len = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.col_Cnt = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ckIsCut = new Sunny.UI.UICheckBox(); + this.btnAddGrade = new Sunny.UI.UISymbolButton(); + this.btnDelGrade = new Sunny.UI.UISymbolButton(); + this.col2_code = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col2_Item = new System.Windows.Forms.DataGridViewComboBoxColumn(); + this.col2_1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col2_2 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col2_3 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col2_4 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col2_5 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.col2_6 = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.uiTitlePanel2.SuspendLayout(); this.uiTitlePanel3.SuspendLayout(); this.uiTitlePanel4.SuspendLayout(); @@ -373,6 +382,9 @@ // uiTitlePanel4 // this.uiTitlePanel4.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this.uiTitlePanel4.Controls.Add(this.uiNumPadTextBox1); + this.uiTitlePanel4.Controls.Add(this.uiSwitch1); + this.uiTitlePanel4.Controls.Add(this.uiLabel11); this.uiTitlePanel4.Controls.Add(this.btnDefectOption); this.uiTitlePanel4.Controls.Add(this.swcDefectPauseForUser); this.uiTitlePanel4.Controls.Add(this.numDefectCountLimit); @@ -396,6 +408,46 @@ this.uiTitlePanel4.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; this.uiTitlePanel4.TitleColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); // + // uiNumPadTextBox1 + // + this.uiNumPadTextBox1.FillColor = System.Drawing.Color.White; + this.uiNumPadTextBox1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiNumPadTextBox1.Location = new System.Drawing.Point(96, 300); + this.uiNumPadTextBox1.Margin = new System.Windows.Forms.Padding(4, 5, 4, 5); + this.uiNumPadTextBox1.MinimumSize = new System.Drawing.Size(63, 0); + this.uiNumPadTextBox1.Name = "uiNumPadTextBox1"; + this.uiNumPadTextBox1.NumPadType = Sunny.UI.NumPadType.Integer; + this.uiNumPadTextBox1.Padding = new System.Windows.Forms.Padding(0, 0, 30, 2); + this.uiNumPadTextBox1.Size = new System.Drawing.Size(119, 29); + this.uiNumPadTextBox1.Style = Sunny.UI.UIStyle.Custom; + this.uiNumPadTextBox1.TabIndex = 17; + this.uiNumPadTextBox1.TextAlignment = System.Drawing.ContentAlignment.MiddleLeft; + this.uiNumPadTextBox1.Watermark = ""; + // + // uiSwitch1 + // + this.uiSwitch1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiSwitch1.Location = new System.Drawing.Point(9, 300); + this.uiSwitch1.MinimumSize = new System.Drawing.Size(1, 1); + this.uiSwitch1.Name = "uiSwitch1"; + this.uiSwitch1.Size = new System.Drawing.Size(80, 29); + this.uiSwitch1.Style = Sunny.UI.UIStyle.Custom; + this.uiSwitch1.TabIndex = 16; + this.uiSwitch1.Text = "uiSwitch1"; + // + // uiLabel11 + // + this.uiLabel11.AutoSize = true; + this.uiLabel11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.uiLabel11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiLabel11.Location = new System.Drawing.Point(3, 263); + this.uiLabel11.Name = "uiLabel11"; + this.uiLabel11.Size = new System.Drawing.Size(131, 21); + this.uiLabel11.Style = Sunny.UI.UIStyle.Custom; + this.uiLabel11.TabIndex = 15; + this.uiLabel11.Text = "固定距离暂停(m)"; + this.uiLabel11.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // // btnDefectOption // this.btnDefectOption.Cursor = System.Windows.Forms.Cursors.Hand; @@ -518,21 +570,21 @@ // // uiDataGridView1 // - dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); - this.uiDataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle1; + dataGridViewCellStyle12.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); + this.uiDataGridView1.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle12; this.uiDataGridView1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.uiDataGridView1.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); this.uiDataGridView1.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; - dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); - dataGridViewCellStyle2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle2.ForeColor = System.Drawing.Color.White; - dataGridViewCellStyle2.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); - dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle2; + dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle13.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle13.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle13.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle13.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView1.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle13; this.uiDataGridView1.ColumnHeadersHeight = 32; this.uiDataGridView1.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; this.uiDataGridView1.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { @@ -544,45 +596,110 @@ this.col_IsOR, this.col_Len, this.col_Cnt}); - dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle4.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle4.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle4.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); - dataGridViewCellStyle4.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle4.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.uiDataGridView1.DefaultCellStyle = dataGridViewCellStyle4; + dataGridViewCellStyle15.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle15.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle15.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle15.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle15.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); + dataGridViewCellStyle15.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle15.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.uiDataGridView1.DefaultCellStyle = dataGridViewCellStyle15; this.uiDataGridView1.EnableHeadersVisualStyles = false; this.uiDataGridView1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiDataGridView1.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(104)))), ((int)(((byte)(173)))), ((int)(((byte)(255))))); this.uiDataGridView1.Location = new System.Drawing.Point(3, 41); this.uiDataGridView1.MultiSelect = false; this.uiDataGridView1.Name = "uiDataGridView1"; - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle5.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); - dataGridViewCellStyle5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle5.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle5.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); - dataGridViewCellStyle5.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.uiDataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle16.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle16.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); + dataGridViewCellStyle16.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle16.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle16.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle16.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView1.RowHeadersDefaultCellStyle = dataGridViewCellStyle16; this.uiDataGridView1.RowHeadersWidth = 62; - dataGridViewCellStyle6.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle6.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle6.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle6.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); - dataGridViewCellStyle6.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle17.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle17.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle17.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle17.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); + dataGridViewCellStyle17.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiDataGridView1.RowsDefaultCellStyle = dataGridViewCellStyle17; this.uiDataGridView1.RowTemplate.Height = 30; this.uiDataGridView1.SelectedIndex = -1; this.uiDataGridView1.Size = new System.Drawing.Size(581, 308); this.uiDataGridView1.Style = Sunny.UI.UIStyle.Custom; this.uiDataGridView1.TabIndex = 21; // + // col_code + // + this.col_code.DataPropertyName = "Code"; + this.col_code.HeaderText = "code"; + this.col_code.MinimumWidth = 8; + this.col_code.Name = "col_code"; + this.col_code.ReadOnly = true; + this.col_code.Visible = false; + this.col_code.Width = 150; + // + // col_zxd + // + this.col_zxd.DataPropertyName = "ZXD"; + dataGridViewCellStyle14.NullValue = null; + this.col_zxd.DefaultCellStyle = dataGridViewCellStyle14; + this.col_zxd.HeaderText = "置信度"; + this.col_zxd.MinimumWidth = 20; + this.col_zxd.Name = "col_zxd"; + this.col_zxd.Width = 150; + // + // col_area + // + this.col_area.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.col_area.DataPropertyName = "Area"; + this.col_area.HeaderText = "面积(mm^2)"; + this.col_area.MinimumWidth = 20; + this.col_area.Name = "col_area"; + // + // col_contrast_lower + // + this.col_contrast_lower.DataPropertyName = "Contrast"; + this.col_contrast_lower.HeaderText = "对比度(下限)"; + this.col_contrast_lower.MinimumWidth = 80; + this.col_contrast_lower.Name = "col_contrast_lower"; + this.col_contrast_lower.Width = 120; + // + // col_contrast_top + // + this.col_contrast_top.HeaderText = "对比度(上限)"; + this.col_contrast_top.MinimumWidth = 80; + this.col_contrast_top.Name = "col_contrast_top"; + this.col_contrast_top.Width = 120; + // + // col_IsOR + // + this.col_IsOR.HeaderText = "或向选择"; + this.col_IsOR.MinimumWidth = 8; + this.col_IsOR.Name = "col_IsOR"; + this.col_IsOR.Width = 150; + // + // col_Len + // + this.col_Len.HeaderText = "报警长度(m)"; + this.col_Len.MinimumWidth = 80; + this.col_Len.Name = "col_Len"; + // + // col_Cnt + // + this.col_Cnt.HeaderText = "报警数量"; + this.col_Cnt.MinimumWidth = 80; + this.col_Cnt.Name = "col_Cnt"; + // // uiTitlePanel6 // this.uiTitlePanel6.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Right))); + this.uiTitlePanel6.Controls.Add(this.btnDelGrade); + this.uiTitlePanel6.Controls.Add(this.btnAddGrade); + this.uiTitlePanel6.Controls.Add(this.ckIsCut); this.uiTitlePanel6.Controls.Add(this.uiDataGridView2); this.uiTitlePanel6.FillColor = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); this.uiTitlePanel6.FillColor2 = System.Drawing.Color.FromArgb(((int)(((byte)(238)))), ((int)(((byte)(251)))), ((int)(((byte)(250))))); @@ -602,108 +719,68 @@ // // uiDataGridView2 // - dataGridViewCellStyle7.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); - this.uiDataGridView2.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle18.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); + this.uiDataGridView2.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle18; this.uiDataGridView2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.uiDataGridView2.BackgroundColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); this.uiDataGridView2.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single; - dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; - dataGridViewCellStyle8.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); - dataGridViewCellStyle8.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle8.ForeColor = System.Drawing.Color.White; - dataGridViewCellStyle8.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); - dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.uiDataGridView2.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter; + dataGridViewCellStyle19.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle19.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle19.ForeColor = System.Drawing.Color.White; + dataGridViewCellStyle19.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView2.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle19; this.uiDataGridView2.ColumnHeadersHeight = 32; this.uiDataGridView2.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.DisableResizing; this.uiDataGridView2.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.col2_code, + this.col2_Item, this.col2_1, this.col2_2, this.col2_3, this.col2_4, - this.col2_5}); - dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle9.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle9.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle9.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle9.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); - dataGridViewCellStyle9.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle9.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.uiDataGridView2.DefaultCellStyle = dataGridViewCellStyle9; + this.col2_5, + this.col2_6}); + dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle20.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle20.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle20.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle20.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); + dataGridViewCellStyle20.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle20.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.uiDataGridView2.DefaultCellStyle = dataGridViewCellStyle20; this.uiDataGridView2.EnableHeadersVisualStyles = false; this.uiDataGridView2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.uiDataGridView2.GridColor = System.Drawing.Color.FromArgb(((int)(((byte)(104)))), ((int)(((byte)(173)))), ((int)(((byte)(255))))); this.uiDataGridView2.Location = new System.Drawing.Point(3, 41); this.uiDataGridView2.MultiSelect = false; this.uiDataGridView2.Name = "uiDataGridView2"; - dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle10.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); - dataGridViewCellStyle10.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle10.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle10.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); - dataGridViewCellStyle10.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle10.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.uiDataGridView2.RowHeadersDefaultCellStyle = dataGridViewCellStyle10; + dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle21.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(243)))), ((int)(((byte)(249)))), ((int)(((byte)(255))))); + dataGridViewCellStyle21.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle21.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle21.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(80)))), ((int)(((byte)(160)))), ((int)(((byte)(255))))); + dataGridViewCellStyle21.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle21.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.uiDataGridView2.RowHeadersDefaultCellStyle = dataGridViewCellStyle21; this.uiDataGridView2.RowHeadersWidth = 62; - dataGridViewCellStyle11.BackColor = System.Drawing.Color.White; - dataGridViewCellStyle11.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle11.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - dataGridViewCellStyle11.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); - dataGridViewCellStyle11.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); - this.uiDataGridView2.RowsDefaultCellStyle = dataGridViewCellStyle11; + dataGridViewCellStyle22.BackColor = System.Drawing.Color.White; + dataGridViewCellStyle22.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle22.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + dataGridViewCellStyle22.SelectionBackColor = System.Drawing.Color.FromArgb(((int)(((byte)(220)))), ((int)(((byte)(236)))), ((int)(((byte)(255))))); + dataGridViewCellStyle22.SelectionForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(48)))), ((int)(((byte)(48)))), ((int)(((byte)(48))))); + this.uiDataGridView2.RowsDefaultCellStyle = dataGridViewCellStyle22; this.uiDataGridView2.RowTemplate.Height = 30; this.uiDataGridView2.SelectedIndex = -1; + this.uiDataGridView2.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.uiDataGridView2.Size = new System.Drawing.Size(488, 308); this.uiDataGridView2.Style = Sunny.UI.UIStyle.Custom; this.uiDataGridView2.TabIndex = 22; // - // col2_code - // - this.col2_code.HeaderText = "code"; - this.col2_code.MinimumWidth = 8; - this.col2_code.Name = "col2_code"; - this.col2_code.Visible = false; - this.col2_code.Width = 150; - // - // col2_1 - // - this.col2_1.HeaderText = "A"; - this.col2_1.MinimumWidth = 8; - this.col2_1.Name = "col2_1"; - this.col2_1.Width = 80; - // - // col2_2 - // - this.col2_2.HeaderText = "B"; - this.col2_2.MinimumWidth = 8; - this.col2_2.Name = "col2_2"; - this.col2_2.Width = 80; - // - // col2_3 - // - this.col2_3.HeaderText = "C"; - this.col2_3.MinimumWidth = 8; - this.col2_3.Name = "col2_3"; - this.col2_3.Width = 80; - // - // col2_4 - // - this.col2_4.HeaderText = "D"; - this.col2_4.MinimumWidth = 8; - this.col2_4.Name = "col2_4"; - this.col2_4.Width = 80; - // - // col2_5 - // - this.col2_5.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.col2_5.HeaderText = "E"; - this.col2_5.MinimumWidth = 8; - this.col2_5.Name = "col2_5"; - // // uiPanel1 // this.uiPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) @@ -957,67 +1034,110 @@ this.uiLabel2.Text = "产品颜色"; this.uiLabel2.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; // - // col_code + // ckIsCut // - this.col_code.DataPropertyName = "Code"; - this.col_code.HeaderText = "code"; - this.col_code.MinimumWidth = 8; - this.col_code.Name = "col_code"; - this.col_code.ReadOnly = true; - this.col_code.Visible = false; - this.col_code.Width = 150; + this.ckIsCut.BackColor = System.Drawing.Color.Transparent; + this.ckIsCut.Cursor = System.Windows.Forms.Cursors.Hand; + this.ckIsCut.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.ckIsCut.ForeColor = System.Drawing.Color.White; + this.ckIsCut.Location = new System.Drawing.Point(347, 2); + this.ckIsCut.MinimumSize = new System.Drawing.Size(1, 1); + this.ckIsCut.Name = "ckIsCut"; + this.ckIsCut.Size = new System.Drawing.Size(132, 33); + this.ckIsCut.Style = Sunny.UI.UIStyle.Custom; + this.ckIsCut.TabIndex = 44; + this.ckIsCut.Text = "使用裁切提示"; + this.ckIsCut.CheckedChanged += new System.EventHandler(this.ckGradeLimeIsAllDefectCnt_CheckedChanged); // - // col_zxd + // btnAddGrade // - this.col_zxd.DataPropertyName = "ZXD"; - dataGridViewCellStyle3.NullValue = null; - this.col_zxd.DefaultCellStyle = dataGridViewCellStyle3; - this.col_zxd.HeaderText = "置信度"; - this.col_zxd.MinimumWidth = 20; - this.col_zxd.Name = "col_zxd"; - this.col_zxd.Width = 150; + this.btnAddGrade.BackColor = System.Drawing.Color.Transparent; + this.btnAddGrade.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnAddGrade.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddGrade.Image = ((System.Drawing.Image)(resources.GetObject("btnAddGrade.Image"))); + this.btnAddGrade.LightColor = System.Drawing.Color.FromArgb(((int)(((byte)(14)))), ((int)(((byte)(30)))), ((int)(((byte)(63))))); + this.btnAddGrade.Location = new System.Drawing.Point(105, 3); + this.btnAddGrade.MinimumSize = new System.Drawing.Size(1, 1); + this.btnAddGrade.Name = "btnAddGrade"; + this.btnAddGrade.Size = new System.Drawing.Size(86, 29); + this.btnAddGrade.Style = Sunny.UI.UIStyle.Custom; + this.btnAddGrade.Symbol = 61459; + this.btnAddGrade.TabIndex = 18; + this.btnAddGrade.Text = "新增"; + this.btnAddGrade.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnAddGrade.Click += new System.EventHandler(this.btnAddGrade_Click); // - // col_area + // btnDelGrade // - this.col_area.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; - this.col_area.DataPropertyName = "Area"; - this.col_area.HeaderText = "面积(mm^2)"; - this.col_area.MinimumWidth = 20; - this.col_area.Name = "col_area"; + this.btnDelGrade.BackColor = System.Drawing.Color.Transparent; + this.btnDelGrade.Cursor = System.Windows.Forms.Cursors.Hand; + this.btnDelGrade.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelGrade.Image = ((System.Drawing.Image)(resources.GetObject("btnDelGrade.Image"))); + this.btnDelGrade.LightColor = System.Drawing.Color.FromArgb(((int)(((byte)(14)))), ((int)(((byte)(30)))), ((int)(((byte)(63))))); + this.btnDelGrade.Location = new System.Drawing.Point(213, 3); + this.btnDelGrade.MinimumSize = new System.Drawing.Size(1, 1); + this.btnDelGrade.Name = "btnDelGrade"; + this.btnDelGrade.Size = new System.Drawing.Size(86, 29); + this.btnDelGrade.Style = Sunny.UI.UIStyle.Custom; + this.btnDelGrade.Symbol = 61459; + this.btnDelGrade.TabIndex = 45; + this.btnDelGrade.Text = "删除"; + this.btnDelGrade.TipsFont = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.btnDelGrade.Click += new System.EventHandler(this.btnDelGrade_Click); // - // col_contrast_lower + // col2_code // - this.col_contrast_lower.DataPropertyName = "Contrast"; - this.col_contrast_lower.HeaderText = "对比度(下限)"; - this.col_contrast_lower.MinimumWidth = 80; - this.col_contrast_lower.Name = "col_contrast_lower"; - this.col_contrast_lower.Width = 120; + this.col2_code.HeaderText = "code"; + this.col2_code.MinimumWidth = 8; + this.col2_code.Name = "col2_code"; + this.col2_code.Visible = false; + this.col2_code.Width = 120; // - // col_contrast_top + // col2_Item // - this.col_contrast_top.HeaderText = "对比度(上限)"; - this.col_contrast_top.MinimumWidth = 80; - this.col_contrast_top.Name = "col_contrast_top"; - this.col_contrast_top.Width = 120; + this.col2_Item.HeaderText = "名称"; + this.col2_Item.Name = "col2_Item"; // - // col_IsOR + // col2_1 // - this.col_IsOR.HeaderText = "或向选择"; - this.col_IsOR.MinimumWidth = 8; - this.col_IsOR.Name = "col_IsOR"; - this.col_IsOR.Width = 150; + this.col2_1.HeaderText = "A"; + this.col2_1.MinimumWidth = 8; + this.col2_1.Name = "col2_1"; + this.col2_1.Width = 60; // - // col_Len + // col2_2 // - this.col_Len.HeaderText = "报警长度(m)"; - this.col_Len.Name = "col_Len"; - this.col_Len.Visible = false; + this.col2_2.HeaderText = "B"; + this.col2_2.MinimumWidth = 8; + this.col2_2.Name = "col2_2"; + this.col2_2.Width = 60; // - // col_Cnt + // col2_3 // - this.col_Cnt.HeaderText = "报警数量"; - this.col_Cnt.Name = "col_Cnt"; - this.col_Cnt.Visible = false; + this.col2_3.HeaderText = "C"; + this.col2_3.MinimumWidth = 8; + this.col2_3.Name = "col2_3"; + this.col2_3.Width = 60; + // + // col2_4 + // + this.col2_4.HeaderText = "D"; + this.col2_4.MinimumWidth = 8; + this.col2_4.Name = "col2_4"; + this.col2_4.Width = 60; + // + // col2_5 + // + this.col2_5.HeaderText = "E"; + this.col2_5.MinimumWidth = 8; + this.col2_5.Name = "col2_5"; + this.col2_5.Width = 60; + // + // col2_6 + // + this.col2_6.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.Fill; + this.col2_6.HeaderText = "统计长度"; + this.col2_6.Name = "col2_6"; // // FProductInfo // @@ -1035,6 +1155,8 @@ this.RectColor = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(0)))), ((int)(((byte)(192))))); this.Style = Sunny.UI.UIStyle.Custom; this.Initialize += new System.EventHandler(this.FProductInfo_Initialize); + this.Shown += new System.EventHandler(this.FProductInfo_Shown); + this.Paint += new System.Windows.Forms.PaintEventHandler(this.FProductInfo_Paint); this.uiTitlePanel2.ResumeLayout(false); this.uiTitlePanel2.PerformLayout(); this.uiTitlePanel3.ResumeLayout(false); @@ -1080,12 +1202,6 @@ private Sunny.UI.UIFlowLayoutPanel uiFlowLayoutPanel1; private Sunny.UI.UIDataGridView uiDataGridView1; private Sunny.UI.UIDataGridView uiDataGridView2; - private System.Windows.Forms.DataGridViewTextBoxColumn col2_code; - private System.Windows.Forms.DataGridViewTextBoxColumn col2_1; - private System.Windows.Forms.DataGridViewTextBoxColumn col2_2; - private System.Windows.Forms.DataGridViewTextBoxColumn col2_3; - private System.Windows.Forms.DataGridViewTextBoxColumn col2_4; - private System.Windows.Forms.DataGridViewTextBoxColumn col2_5; private Sunny.UI.UITitlePanel uiTitlePanel1; private Sunny.UI.UIComboBox cmbColor; private Sunny.UI.UILabel uiLabel3; @@ -1103,6 +1219,9 @@ private Sunny.UI.UIRadioButton rbMaterial4; private Sunny.UI.UIRadioButton rbMaterial3; private Sunny.UI.UIRadioButton rbMaterial2; + private Sunny.UI.UINumPadTextBox uiNumPadTextBox1; + private Sunny.UI.UISwitch uiSwitch1; + private Sunny.UI.UILabel uiLabel11; private System.Windows.Forms.DataGridViewTextBoxColumn col_code; private System.Windows.Forms.DataGridViewTextBoxColumn col_zxd; private System.Windows.Forms.DataGridViewTextBoxColumn col_area; @@ -1111,5 +1230,16 @@ private System.Windows.Forms.DataGridViewCheckBoxColumn col_IsOR; private System.Windows.Forms.DataGridViewTextBoxColumn col_Len; private System.Windows.Forms.DataGridViewTextBoxColumn col_Cnt; + private Sunny.UI.UICheckBox ckIsCut; + private Sunny.UI.UISymbolButton btnAddGrade; + private Sunny.UI.UISymbolButton btnDelGrade; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_code; + private System.Windows.Forms.DataGridViewComboBoxColumn col2_Item; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_1; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_2; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_3; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_4; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_5; + private System.Windows.Forms.DataGridViewTextBoxColumn col2_6; } } diff --git a/LeatherProject/LeatherApp/Page/FProductInfo.cs b/LeatherProject/LeatherApp/Page/FProductInfo.cs index 809c61f..035f75e 100644 --- a/LeatherProject/LeatherApp/Page/FProductInfo.cs +++ b/LeatherProject/LeatherApp/Page/FProductInfo.cs @@ -1,4 +1,7 @@ -using LeatherApp.Device; +using DocumentFormat.OpenXml.EMMA; +using DocumentFormat.OpenXml.Spreadsheet; +using DocumentFormat.OpenXml.Wordprocessing; +using LeatherApp.Device; using LeatherApp.Interface; using Models; using Newtonsoft.Json.Linq; @@ -10,9 +13,11 @@ using System.Data; using System.Drawing; using System.IO; using System.Linq; +using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using System.Xml.Linq; namespace LeatherApp.Page { @@ -30,7 +35,10 @@ namespace LeatherApp.Page uiDataGridView1.AllowUserToResizeRows = uiDataGridView2.AllowUserToResizeRows=false;//用户调整行大小 //dataGridView1.AllowUserToResizeColumns = false;//用户调整列大小 //显示行号与列宽度自动调整 - uiDataGridView1.RowHeadersVisible = uiDataGridView2.RowHeadersVisible = true; + uiDataGridView1.RowHeadersVisible = true; + uiDataGridView2.RowHeadersVisible = false; + + uiDataGridView1.RowHeadersWidth = uiDataGridView2.RowHeadersWidth = 50; uiDataGridView1.ColumnHeadersHeightSizeMode = uiDataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; uiDataGridView1.RowHeadersWidthSizeMode = uiDataGridView2.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变 @@ -46,6 +54,13 @@ namespace LeatherApp.Page //if (dataGridView1.RowHeadersVisible) dataGridView1.TopLeftHeaderCell.Value = "SPH/CYL"; #endregion + this.rbMaterial0.Text = Config.materialNameList.FirstOrDefault(x => x.Value("code") == 0).Value("name"); + this.rbMaterial1.Text = Config.materialNameList.FirstOrDefault(x => x.Value("code") == 1).Value("name"); + this.rbMaterial2.Text = Config.materialNameList.FirstOrDefault(x => x.Value("code") == 2).Value("name"); + this.rbMaterial3.Text = Config.materialNameList.FirstOrDefault(x => x.Value("code") == 3).Value("name"); + this.rbMaterial4.Text = Config.materialNameList.FirstOrDefault(x => x.Value("code") == 4).Value("name"); + this.rbMaterial5.Text = Config.materialNameList.FirstOrDefault(x => x.Value("code") == 5).Value("name"); + initData(); } private void initData() @@ -112,7 +127,7 @@ namespace LeatherApp.Page { clear(resetAll); string[] codes= pcode.Split('-'); - if (codes[0]=="0" || Config.SuedeList.Contains(codes[0])) + if (codes[0]=="0" || Config.SuedeList1.Contains(codes[0])) this.rbMaterial0.Checked = true; else if (codes[0] == "1") this.rbMaterial1.Checked = true; @@ -124,6 +139,8 @@ namespace LeatherApp.Page this.rbMaterial4.Checked = true; else if (codes[0] == "5") this.rbMaterial5.Checked = true; + else + this.rbMaterial1.Checked = true; this.cmbColor.SelectedValue = int.Parse(codes[1]); } else @@ -161,7 +178,7 @@ namespace LeatherApp.Page private void loadProduct() { if (model == null) return; - if(model.Material=="0") + if (model.Material == "0") this.rbMaterial0.Checked = true; else if (model.Material == "1") this.rbMaterial1.Checked = true; @@ -176,6 +193,8 @@ namespace LeatherApp.Page this.cmbColor.SelectedValue = model.Color; + this.ckIsCut.Checked = model.IsHintCutting; + tcbarLightValue.Value = model.LightValue; tcbarExposureTime.Value = (int)model.ExposureTime; tcbarGain.Value = (int)model.Gain; @@ -186,39 +205,81 @@ namespace LeatherApp.Page numDefectCountLimit.Text = model.DefectCountLimit.ToString(); swcDefectPauseForUser.Active = model.DefectPauseForUser; + uiSwitch1.Active = model.OpenThicknessDetection; + uiNumPadTextBox1.Text = model.ThicknessDetectionStopDis.ToString(); //uiDataGridView fill string code; QualifiedLimit item1; for (int i = 0; i < uiDataGridView1.Rows.Count; i++) { code = uiDataGridView1.Rows[i].Cells["col_code"].Value.ToString(); - item1 = model.QualifiedLimitList.FirstOrDefault(m=>m.Code == code); + item1 = model.QualifiedLimitList.FirstOrDefault(m => m.Code == code); if (item1 != null) { - uiDataGridView1.Rows[i].Cells["col_zxd"].Value=item1.ZXD; + uiDataGridView1.Rows[i].Cells["col_zxd"].Value = item1.ZXD; uiDataGridView1.Rows[i].Cells["col_area"].Value = item1.Area * 100; uiDataGridView1.Rows[i].Cells["col_contrast_top"].Value = ContrastToPercent(item1.ContrastTop); uiDataGridView1.Rows[i].Cells["col_contrast_lower"].Value = ContrastToPercent(item1.ContrastLower); uiDataGridView1.Rows[i].Cells["col_IsOR"].Value = item1.IsOR; - //uiDataGridView1.Rows[i].Cells["col_Len"].Value = item1.DefectWarnLength; - //uiDataGridView1.Rows[i].Cells["col_Cnt"].Value = item1.DefectWarnCnt; - } - } - GradeLimit item2; - for (int i = 0; i < uiDataGridView2.Rows.Count; i++) - { - code = uiDataGridView2.Rows[i].Cells["col2_code"].Value.ToString(); - item2 = model.GradeLimitList.FirstOrDefault(m => m.Code == code); - if (item2 != null) - { - uiDataGridView2.Rows[i].Cells["col2_1"].Value = item2.A; - uiDataGridView2.Rows[i].Cells["col2_2"].Value = item2.B; - uiDataGridView2.Rows[i].Cells["col2_3"].Value = item2.C; - uiDataGridView2.Rows[i].Cells["col2_4"].Value = item2.D; - uiDataGridView2.Rows[i].Cells["col2_5"].Value = item2.E; + uiDataGridView1.Rows[i].Cells["col_Len"].Value = item1.DefectWarnLength; + uiDataGridView1.Rows[i].Cells["col_Cnt"].Value = item1.DefectWarnCnt; } } + if (model.GradeLimitList != null) + { + uiDataGridView2.Rows.Clear(); + for (int i = 0; i < model.GradeLimitList.Count; i++) + { + code = model.GradeLimitList[i].Code; + string name = model.GradeLimitList[i].CodeName; + //color = item.Value("color"); + int rpwIndex = uiDataGridView2.Rows.Add(); + List a1 = new List(); + int index = 0; + a1.Add("所有缺陷"); + foreach (JObject item in Config.defectItemList) + { + if(!Config.SkipLabelGrade.Contains(item.Value("code"))) + a1.Add(item.Value("name")); + } + DataGridViewComboBoxCell boxCell = uiDataGridView2.Rows[rpwIndex].Cells[1] as DataGridViewComboBoxCell; + boxCell.DataSource = null; + boxCell.Items.Clear(); + boxCell.DataSource = a1; + //boxCell.DisplayMember = "Value"; + //boxCell.ValueMember = "Value"; + boxCell.Value = a1.FirstOrDefault(); + + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; + uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; + uiDataGridView2[1, uiDataGridView2.RowCount - 1].Value = name; + + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].Cells["col2_1"].Value = model.GradeLimitList[i].A; + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].Cells["col2_2"].Value = model.GradeLimitList[i].B; + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].Cells["col2_3"].Value = model.GradeLimitList[i].C; + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].Cells["col2_4"].Value = model.GradeLimitList[i].D; + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].Cells["col2_5"].Value = model.GradeLimitList[i].E; + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].Cells["col2_6"].Value = model.GradeLimitList[i].JudgeLength; + } + } + + //GradeLimit item2; + //for (int i = 0; i < uiDataGridView2.Rows.Count; i++) + //{ + // string codeName = uiDataGridView2.Rows[i].Cells["col2_Item"].Value.ToString(); + // item2 = model.GradeLimitList[i]; + // if (item2 != null) + // { + // uiDataGridView2.Rows[i].Cells["col2_1"].Value = item2.A; + // uiDataGridView2.Rows[i].Cells["col2_2"].Value = item2.B; + // uiDataGridView2.Rows[i].Cells["col2_3"].Value = item2.C; + // uiDataGridView2.Rows[i].Cells["col2_4"].Value = item2.D; + // uiDataGridView2.Rows[i].Cells["col2_5"].Value = item2.E; + // uiDataGridView2.Rows[i].Cells["col2_6"].Value = item2.JudgeLength; + // } + //} + // this.btnSave.Visible = this.btnReload.Visible = true; } @@ -238,6 +299,7 @@ namespace LeatherApp.Page this.btnSave.Visible = true; this.btnReload.Visible = false; + this.ckIsCut.Checked = false; // uiDataGridView1.Rows.Clear(); uiDataGridView2.Rows.Clear(); @@ -273,15 +335,39 @@ namespace LeatherApp.Page //uiDataGridView2.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; uiDataGridView2.Columns[0].Visible = false; //加行 - foreach (JObject item in Config.defectItemList) + //if (!model.IsAllDefectGetGradeLimit) + //{ + // foreach (JObject item in Config.defectItemList) + // { + // code = item.Value("code"); + // name = item.Value("name"); + // //color = item.Value("color"); + // uiDataGridView2.Rows.Add(); + // uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; + // uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; + // } + //} + //else + //{ + // code = "All"; + // name = "全部缺陷"; + // //color = item.Value("color"); + // uiDataGridView2.Rows.Add(); + // uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; + // uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; + //} + if(model.GradeLimitList != null) { - code = item.Value("code"); - name = item.Value("name"); - //color = item.Value("color"); - uiDataGridView2.Rows.Add(); - uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; - uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; - } + for (int i = 0; i < model.GradeLimitList.Count; i++) + { + code = model.GradeLimitList[i].Code; + name = model.GradeLimitList[i].CodeName; + //color = item.Value("color"); + uiDataGridView2.Rows.Add(); + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; + uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; + } + } } private void FProductInfo_Initialize(object sender, EventArgs e) { @@ -327,6 +413,14 @@ namespace LeatherApp.Page model.DefectCountLimit = int.Parse(numDefectCountLimit.Text.Trim()); model.DefectPauseForUser = swcDefectPauseForUser.Active; + model.OpenThicknessDetection = uiSwitch1.Active; + + model.IsHintCutting = ckIsCut.Checked; + int ival; + if (int.TryParse(uiNumPadTextBox1.Text, out ival)) + model.ThicknessDetectionStopDis = int.Parse(uiNumPadTextBox1.Text.Trim()); + else + model.ThicknessDetectionStopDis = 0; //datagrid if (model.QualifiedLimitList == null) model.QualifiedLimitList = new List(); @@ -344,8 +438,8 @@ namespace LeatherApp.Page ContrastTop = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_contrast_top"].Value) ? PercentToContrast(Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_contrast_top"].Value)) : 0, IsOR = Convert.ToBoolean(uiDataGridView1.Rows[i].Cells["col_IsOR"].Value), - //DefectWarnLength = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_Len"].Value) ? (int)Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_Len"].Value) : 0, - //DefectWarnCnt = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_Cnt"].Value) ? (int)Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_Cnt"].Value) : 0, + DefectWarnLength = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_Len"].Value) ? (int)Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_Len"].Value) : 0, + DefectWarnCnt = Utils.Util.IsDecimal(uiDataGridView1.Rows[i].Cells["col_Cnt"].Value) ? (int)Convert.ToDouble(uiDataGridView1.Rows[i].Cells["col_Cnt"].Value) : 0, ModifyUserCode = Config.loginUser.Code, CreateUserCode = Config.loginUser.Code @@ -364,12 +458,15 @@ namespace LeatherApp.Page model.GradeLimitList.Add( new Models.GradeLimit() { - Code = uiDataGridView2.Rows[i].Cells["col2_code"].Value.ToString(), + Code = uiDataGridView2.Rows[i].Cells["col2_Item"].Value.ToString() == "所有缺陷"? "All": Config.getDefectCode(uiDataGridView2.Rows[i].Cells["col2_Item"].Value.ToString()), + CodeName = uiDataGridView2.Rows[i].Cells["col2_Item"].Value.ToString(), A = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_1"].Value)? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_1"].Value) : 0, B = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_2"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_2"].Value) : 0, C = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_3"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_3"].Value) : 0, D = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_4"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_4"].Value) : 0, E = Utils.Util.IsNumber(uiDataGridView2.Rows[i].Cells["col2_5"].Value) ? Convert.ToInt32(uiDataGridView2.Rows[i].Cells["col2_5"].Value) : 0, + JudgeLength = Utils.Util.IsDecimal(uiDataGridView2.Rows[i].Cells["col2_6"].Value) ? Convert.ToDouble(uiDataGridView2.Rows[i].Cells["col2_6"].Value) : 0, + ModifyUserCode = Config.loginUser.Code, CreateUserCode = Config.loginUser.Code }); @@ -468,5 +565,114 @@ namespace LeatherApp.Page { btnDefectOption.Enabled = swcDefectPauseForUser.Active; } + + private void ckGradeLimeIsAllDefectCnt_CheckedChanged(object sender, EventArgs e) + { +#if false + if(ckIsCut.Checked) + { + uiDataGridView2.Rows.Clear(); + string code = "All"; + string name = "全部缺陷"; + //color = item.Value("color"); + uiDataGridView2.Rows.Add(); + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; + uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; + } + else + { + uiDataGridView2.Rows.Clear(); + foreach (JObject item in Config.defectItemList) + { + string code = item.Value("code"); + string name = item.Value("name"); + //color = item.Value("color"); + uiDataGridView2.Rows.Add(); + uiDataGridView2.Rows[uiDataGridView2.RowCount - 1].HeaderCell.Value = name; + uiDataGridView2[0, uiDataGridView2.RowCount - 1].Value = code; + } + } + GradeLimit item2; + if (model != null && model.GradeLimitList!=null) + { + for (int i = 0; i < uiDataGridView2.Rows.Count; i++) + { + string code = uiDataGridView2.Rows[i].Cells["col2_code"].Value.ToString(); + item2 = model.GradeLimitList.FirstOrDefault(m => m.Code == code); + if (item2 != null) + { + uiDataGridView2.Rows[i].Cells["col2_1"].Value = item2.A; + uiDataGridView2.Rows[i].Cells["col2_2"].Value = item2.B; + uiDataGridView2.Rows[i].Cells["col2_3"].Value = item2.C; + uiDataGridView2.Rows[i].Cells["col2_4"].Value = item2.D; + uiDataGridView2.Rows[i].Cells["col2_5"].Value = item2.E; + } + } + } +#endif + } + + private void FProductInfo_Shown(object sender, EventArgs e) + { + ckIsCut.Top = 2; + btnAddGrade.Top = 3; + btnDelGrade.Top = 3; + } + + /// + /// 新增判定条件 + /// + /// + /// + private void btnAddGrade_Click(object sender, EventArgs e) + { + int rpwIndex = uiDataGridView2.AddRow(); + + List a1 = new List(); + int index = 0; + a1.Add("所有缺陷"); + foreach (JObject item in Config.defectItemList) + { + if (!Config.SkipLabelGrade.Contains(item.Value("code"))) + a1.Add(item.Value("name")); + } + DataGridViewComboBoxCell boxCell = uiDataGridView2.Rows[rpwIndex].Cells[1] as DataGridViewComboBoxCell; + boxCell.DataSource = null; + boxCell.Items.Clear(); + boxCell.DataSource = a1; + //boxCell.DisplayMember = "Value"; + //boxCell.ValueMember = "Value"; + boxCell.Value = a1.FirstOrDefault(); + + } + + /// + /// 删除判断条件 + /// + /// + /// + /// + private void btnDelGrade_Click(object sender, EventArgs e) + { + try + { + if (this.uiDataGridView2.SelectedRows.Count != 1) + throw new Exception("请选择要删除的判断条件!"); + + int liRowIndex = this.uiDataGridView2.SelectedRows[0].Index; + uiDataGridView2.Rows.RemoveAt(liRowIndex); + } + catch (Exception ex) + { + UIMessageTip.ShowError(ex.Message, 2000); + } + } + + private void FProductInfo_Paint(object sender, PaintEventArgs e) + { + ckIsCut.Top = 2; + btnAddGrade.Top = 3; + btnDelGrade.Top = 3; + } } } diff --git a/LeatherProject/LeatherApp/Page/FProductInfo.resx b/LeatherProject/LeatherApp/Page/FProductInfo.resx index aca10e9..49f5213 100644 --- a/LeatherProject/LeatherApp/Page/FProductInfo.resx +++ b/LeatherProject/LeatherApp/Page/FProductInfo.resx @@ -144,6 +144,9 @@ True + + True + True @@ -159,4 +162,69 @@ True + + True + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAL2SURBVFhHvZfLTxNBHMd7MBSiAWw1Hkg8ocZ4qSZejBdjTAwxRgwXTYyRqFgL8rS8Ke+HvORV + ihXFt140SjiJJhrDG1pqKUX/mJ/zm91ZhmUGJqbdSb4Hkp1+PvPb3/52samuPbk2UA25PJtkH92YqIU/ + 7At7d40u4CFBicQtJjDxNwjjfwIwtjEM/vgADMZ6oH+tC7qjbbxAP4mLbkzUYgLBDT8E4kMwsv6Ywnuj + HfDodyt0RJqsERiND8Lweh8MxLoNePtqIzSH66wRGIr10pL3RNuhK9ICrasN0BSuhYaVSmsE+tY66ak7 + I80U7gtVQ/2KF6qXy6wR2FJyAq9droCqpVKoWCyyRqBt1WeUHOHepWIoX/BAybzbGgG+5AgvW7gPD+YK + wDN7+/8EcINqEMCXvHTBDUVzd8E9mw8FMzcNAdUQfPbmyRSDp65YLKQlL5y7A+6ZW3B5+gKcnjwhvF4W + XcBjCLDBgl2OU411eWOoRlryS9PnwfX5CBx6vxcOvkvbOW/T4MCbNHC+SOUF+g0B82BpCdfT+1238tAo + OcKx5LnfLsLJL8fEIHMImMJfa3DHuF0swAYL63JfqMroclbyGz/z4MyUC7I+ZIhhonDw/U/tkDkqETCX + vGa53Ch58fw9yPl6Do5+zBJDZKHwVHBOMHgKpA+liAVkJc//dR3OTp1Su898eHjQDhl+DZ4+KBFgJa9c + KjFKfu3HFdpkQsBOQfgrDj6yCc8YlgiYS371ew4c/3RYDJAFwaTTEe54TuBPdPiAFoRnBiQ9oBohWI/o + elm2CKgGN4rAGDw5+2HVUAGy8NsNv+HwD2lwg0yAlZ072SRJkN8vCXLp1ytK4MtDGqEAu+cvtXvOCSA8 + j98vifqH6zYBU8NljpmaSwMkbm0RIHD2qDmeafBtj1cyBYyTc3B8zKwRYCfXy87g2yZcsgToiwUnHA4Z + hBMwnXBk4Fgi4CQdjy8WOts5OApZIrBbkiqgGnJ54gXIUpqYehT/O7bZ/gFBYsFOotAh6wAAAABJRU5E + rkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAhdSURBVFhHtZd5WNVlFsevcrlw4XLvBS6gXuGiKOXomAtuiBgolKW5IYqoCLlh7pa5lWVqzqNO + OWNazqO5pVJZimu5g47oTJbkPowLsuOIoNIT+fSd73nhIsii/tF5ns/jz9/9ved7znnPu6D5Iy3W19fE + fxpU8GwWb7OB/MLHAOKqXj6DjbbZTo9t0QJNnJ3b8b9G8vRBULjo7u59yPx8E5hFIV91IS7qx6cwiu85 + MH0mSg8dhQTRyNn5Nb62V6Nuo3BDyVzEi1Z9iuJNW5G5bgNG+PqW8OfO5IlBUPzwfoqXJO1A3hvTUfr9 + YYwLDESgwTCSP7uT2oOgsDbB3x+/nDqNO6vWoHDhhyh8fwnufr4Z+V8kgY5/42fdiEENqMX4zYWjs2aj + ZPtXyJs4DbkTpiB33CQ8OHAQE1u3RkuDIY6feZKaQUjmIn77g6Xl4u8tRuGCRSh89wMUffIZ7u37DnF+ + fhJEMKnRExQ/+9PCxSjZsh25iVORO34ycse+gdwxE5GTMAEP9h7AGE6Hl5PTIH7+qBIU1pHS+weP4H/L + PlZZ24UL31mIgnnvoWDuAtxdux7XV6/FcF/f2xxWrScovnvv5Gkqc3vWSpzCOaPHIXvk68iOjceD5L1I + CAiAv6vrMA4zkwaahObNP90yIRGlh489ylqE57+vhAvmvIuCt+ejYNY83P1sHTJWrkJM06bSmEHEJc5m + 27lr4mTc45xXzTo7fjyyR41RwlnDRuHWkFjcYYLHJk/FwMaNszm2BzFogj09A+JbtMi68NHfULL1y2pZ + F8x+RwnnvzUX+TNnI38G55ffpMyZh8FWa0aU1bprY1w87n+bXJ61lJvClVnHxOHW0JHIHBSDnMQpuLls + BUYFBj7kqthP8RHEm2j03k5OoSMCArLPr/gYxVu2Vcs6/805Sjh/+tvIm/oW8qa8iZLN23CczbYhbnS5 + uGT9emK5cEXWSnhwDG72j0b2mETcWPIXRDdrVubh6HiMmh+SMCL7g2oGNzZH+KiAgIIMroDijV9Uyzp/ + 2iwlnDd5plpa0mTFG7bg/je7KptMxHMk6+GjcSt6BDIHDsPNfoORJRVhYlH+/g/dy8WXkkjiRRoSZRKE + gWt1YHzLlkU/L12G4vWbHmVdIVx1aVVmXaXkWVLyqOHI7D8E1/sMQFbcWGQsWIghzZr97q3TpVFjGXmJ + yFKsFLebBGFs7Ozcd7i/f046S1a8eSvyJs2ozPrxpaWEY0YjM7Ifrnfqgf8EtsWlxs2QbvLB1c49cHZw + NCIsljIPnS6VvpeTvkTmvYa43SQIs7tO1yvGZss+MXe+KvXjWd/qF4XrnUOR4d8KVwzeuKhxwXmNHufI + WY0zLrfpiP2hYQj38CgzarVH6VPK3of4EAdSr6mecNNqQ9jl11Jnz0Xxuo0q0xshvZFhex6XHU24RFE7 + F0g6xX/UOOHynztiX0hPdDebSw1a7SH6Wkx6EwupM/PHTYKQ3S5IdsgSnglXLb7VRO1I9hLAOWb+bwaQ + N2Umwt3dYXBwkMwXkXBS65w/yRqM8vPb8ffgEBSyGWsTF0T8Z2b/EwP4FwO42LEb1rRqjfZubkX0kUCa + ii9x+EzG7TV5edt29YoL9vmXAM5odEjVOCK9TXt81PI5dHBzk237qU7RasbtdffqDp1QyPUvGVZFBAV7 + AOeJVECa77QKQIfDDOKH51pjbas2CDIaJQi1bSvnTzKW/YdV7Toin0uu3LngrEQk03KqB2VvwDMkleIH + NVrsI2l+zTkdbRBsNP5K13KA1X+z4u3nQnJouFrj0lRS1h+JZCfIs7yX5XYzoi9yYhMq5l/PBiyvwHEG + 8D3F92gcsIuctPohLSwSwSaT/Siv/T4xzGo9urZ9kNpCpZslm9MkjZyi4zQiAtJo13pGYGfPcKzh93LS + SWDy/p9VAkim+DfkK01DHDJ5Yk9QVwSbzfcpJZea6pUYarXuX966LU+tYUroBEmho2PkKJ0dIfIs764E + BSOpa3dEenndC7NYbq98oT1uDRiqgpUA5LvvVABaijtgOwNIIsd9rNjctgNCPTzuUPLRfWJokybLxnOt + 54yfhJMVDg5xsDg5QAf7yT4i/z/jbUVKr0j0tlh+5SYjR+pfI7y8cv7BSmT0jKwcLxXYzTE7SJKiIb4m + 517ohEUtAhHu6XmdYzsSveZFi6V7X29v/Jcn2ElXkxosguJAypjMgfKcarbgSEgoeri7lxkdHWWTWUgi + XR0cIhhQ1no27pWg7qpKh+lDAt/JsTIFX/L5W3IjKgZh3KRser2cDbFE3Qdc/FxcRorjS31ewyEnVwo2 + ZAMJ5UEcM3riYJdgdDYay7hFi/gS0ovI3c5g0mpDmVXWOu4blzp0ZRW0KhEJQoIXP9cGDEE3oxE8Fc9y + zEryasV4tUVaGjs5TenCD25Ex6og9nKQkMoGOhP+EkLM5t/Njo4n+K0cLBHEvr3KLmfw0ukiIy2WO193 + 6oLL7BNpRqmETN1N+uRShI+TUzq/XUWiiOyQWqJMBeGr18/tZjIh/ZV+SNG74ZSHD1Je7I0Qd/eHlvLz + fAWRU+3xg0UdYBw/mEEUbOwQhKtdeqg9ISt+HHqazfIX0kV+s5pEk2ridhOHPk2dnWfwGP3t8tARSHu1 + P3p7epbxJnOcv8llQs5zOVKrittNgjCxSi/38fbO2dK5K/J5ML3s5QXeMSRzEZfbsI3UELebnNU+bJLE + AY0aYSBh5il8J2WXm4w0TX3nuQRhZBDh/Rs1KhrE8U31eplzKbtkLuKOpF5T09HOZJrT0tV1G5/lPK+t + 7HWZ6onnDYaYP7m5JfFZLqA15vxJJkKSrexasn3WVfa6TIKQPzzak+6kDnGN5v99JuudP3lCrAAAAABJ + RU5ErkJggg== + + \ No newline at end of file diff --git a/LeatherProject/LeatherApp/Page/FReport.cs b/LeatherProject/LeatherApp/Page/FReport.cs index bf89476..a775363 100644 --- a/LeatherProject/LeatherApp/Page/FReport.cs +++ b/LeatherProject/LeatherApp/Page/FReport.cs @@ -17,6 +17,7 @@ using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using static System.Windows.Forms.AxHost; namespace LeatherApp.Page { @@ -148,7 +149,7 @@ namespace LeatherApp.Page //绘图1 double len = Math.Round(record.Len*100, 2);//cm - this.reDrawDefectPoints(record.DefectInfoList, new double[] { 0, Math.Round(record.FaceWidthMax + 0.005f, 2) }, new double[] { 0, len }); + this.reDrawDefectPoints(record.DefectInfoList, new double[] { 0, Math.Round(record.FaceWidthMax + 0.005f, 2) }, new double[] { 0, len + 20 }, record.GradeDifferentiateInfoList); //绘图2 //var points = Array.ConvertAll(record.FaceWidthListStr.Split(new[] { ',', }, StringSplitOptions.RemoveEmptyEntries),Double.Parse).ToList(); //reDrawFaceWidth(record.FacePointList, @@ -747,7 +748,7 @@ namespace LeatherApp.Page /// Records.DefectInfoList /// 幅宽 /// 卷长度 - private void reDrawDefectPoints(List lstDefectInfo, double[] XSizeRange, double[] YSizeRange) + private void reDrawDefectPoints(List lstDefectInfo, double[] XSizeRange, double[] YSizeRange, List listGrade) { UILineOption option; //AddTextEvent($"绘图", $"缺陷分布, W={string.Join(", ", XSizeRange)},H={string.Join(", ", YSizeRange)}, LastData={JsonConvert.SerializeObject(lstDefectInfo[lstDefectInfo.Count - 1])}"); @@ -821,7 +822,16 @@ namespace LeatherApp.Page } series.Add(item.CentreX, item.CentreY / 100); //cm -> m } - + + if (listGrade != null) + { + foreach (var item in listGrade) + { + // 设置裁切提示线 + option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.DarkRed, Name = $"{item.GradeCode}-裁切起点-{item.StartY}", Value = item.StartY }); + option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.DarkRed, Name = $"{item.GradeCode}-裁切终点-{item.EndY}", Value = item.EndY }); + } + } //==== //option.GreaterWarningArea = new UILineWarningArea(3.5); //option.LessWarningArea = new UILineWarningArea(2.2, Color.Gold); diff --git a/LeatherProject/LeatherApp/Properties/AssemblyInfo.cs b/LeatherProject/LeatherApp/Properties/AssemblyInfo.cs index fc44940..1e7f6a3 100644 --- a/LeatherProject/LeatherApp/Properties/AssemblyInfo.cs +++ b/LeatherProject/LeatherApp/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.2.9")] -[assembly: AssemblyFileVersion("1.0.2.9")] +[assembly: AssemblyVersion("1.0.2.10")] +[assembly: AssemblyFileVersion("1.0.2.10")] diff --git a/LeatherProject/LeatherApp/Utils/OpenCVUtil.cs b/LeatherProject/LeatherApp/Utils/OpenCVUtil.cs index a5357d9..f07313f 100644 --- a/LeatherProject/LeatherApp/Utils/OpenCVUtil.cs +++ b/LeatherProject/LeatherApp/Utils/OpenCVUtil.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Xaml; +using DocumentFormat.OpenXml.EMMA; using DocumentFormat.OpenXml.Vml; using OpenCvSharp; namespace LeatherApp.Utils @@ -13,9 +15,14 @@ namespace LeatherApp.Utils public static Mat resize(Mat mat, int width, int height, out int xw, out int xh) { OpenCvSharp.Size dsize = new OpenCvSharp.Size(width, height); - Mat mat2 = new Mat(); + //Mat mat2 = new Mat(); //Cv2.Resize(mat, mat2, dsize); - ResizeUniform(mat, dsize, out mat2, out xw, out xh); + //ResizeUniform(mat, dsize, out mat2, out xw, out xh); + + xw = xh = 0; + Mat mat2 = new Mat(height, width, MatType.CV_8UC3, new Scalar(114, 114, 114)); + Rect roi = new Rect((width - mat.Cols) / 2, (height - mat.Rows) / 2, mat.Cols, mat.Rows); + mat.CopyTo(new Mat(mat2, roi)); return mat2; } public static int ResizeUniform(Mat src, Size dst_size, out Mat dst, out int xw, out int xh) diff --git a/LeatherProject/LeatherApp/bin/Debug/ErrorLog.txt b/LeatherProject/LeatherApp/bin/Debug/ErrorLog.txt index 9eb3723..ab7af23 100644 --- a/LeatherProject/LeatherApp/bin/Debug/ErrorLog.txt +++ b/LeatherProject/LeatherApp/bin/Debug/ErrorLog.txt @@ -44,3 +44,23 @@ Global捕获到未处理异常:System.ArgumentException 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) +2024-06-19 16:06:47 +Global捕获到未处理异常:System.Threading.ThreadAbortException +异常信息:正在中止线程。 +异常堆栈: 在 System.Windows.Forms.SafeNativeMethods.MessageBox(HandleRef hWnd, String text, String caption, Int32 type) + 在 System.Windows.Forms.MessageBox.ShowCore(IWin32Window owner, String text, String caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, Boolean showHelp) + 在 System.Windows.Forms.DataGridView.OnDataError(Boolean displayErrorDialogIfNoHandler, DataGridViewDataErrorEventArgs e) + 在 System.Windows.Forms.DataGridViewComboBoxCell.GetFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& cellStyle, TypeConverter valueTypeConverter, TypeConverter formattedValueTypeConverter, DataGridViewDataErrorContexts context) + 在 System.Windows.Forms.DataGridViewCell.GetEditedFormattedValue(Object value, Int32 rowIndex, DataGridViewCellStyle& dataGridViewCellStyle, DataGridViewDataErrorContexts context) + 在 System.Windows.Forms.DataGridViewCell.PaintWork(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, Int32 rowIndex, DataGridViewElementStates cellState, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts) + 在 System.Windows.Forms.DataGridViewRow.PaintCells(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, Int32 rowIndex, DataGridViewElementStates rowState, Boolean isFirstDisplayedRow, Boolean isLastVisibleRow, DataGridViewPaintParts paintParts) + 在 System.Windows.Forms.DataGridViewRow.Paint(Graphics graphics, Rectangle clipBounds, Rectangle rowBounds, Int32 rowIndex, DataGridViewElementStates rowState, Boolean isFirstDisplayedRow, Boolean isLastVisibleRow) + 在 System.Windows.Forms.DataGridView.PaintRows(Graphics g, Rectangle boundingRect, Rectangle clipRect, Boolean singleHorizontalBorderAdded) + 在 System.Windows.Forms.DataGridView.PaintGrid(Graphics g, Rectangle gridBounds, Rectangle clipRect, Boolean singleVerticalBorderAdded, Boolean singleHorizontalBorderAdded) + 在 System.Windows.Forms.DataGridView.OnPaint(PaintEventArgs e) + 在 Sunny.UI.UIDataGridView.OnPaint(PaintEventArgs e) + 在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer) + 在 System.Windows.Forms.Control.WmPaint(Message& m) + 在 System.Windows.Forms.Control.WndProc(Message& m) + 在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) + diff --git a/LeatherProject/LeatherApp/bin/Debug/MaterialName.json b/LeatherProject/LeatherApp/bin/Debug/MaterialName.json index c22a717..f52fc34 100644 --- a/LeatherProject/LeatherApp/bin/Debug/MaterialName.json +++ b/LeatherProject/LeatherApp/bin/Debug/MaterialName.json @@ -1,14 +1,26 @@ [ { - "code": "SHNY-PX", - "name": "超纤皮" + "code": 0, + "name": "绒面" }, { - "code": "AGNY-ST", - "name": "纤皮" + "code": 1, + "name": "非绒面" }, { - "code": "", - "name": "未知" + "code": 2, + "name": "未知1" + }, + { + "code": 3, + "name": "未知2" + }, + { + "code": 4, + "name": "未知3" + }, + { + "code": 5, + "name": "未知4" } ] \ No newline at end of file diff --git a/LeatherProject/LeatherApp/bin/Debug/SysConfig.ini b/LeatherProject/LeatherApp/bin/Debug/SysConfig.ini index cb59b0b..4fef4a6 100644 --- a/LeatherProject/LeatherApp/bin/Debug/SysConfig.ini +++ b/LeatherProject/LeatherApp/bin/Debug/SysConfig.ini @@ -25,6 +25,11 @@ ScannerReversalX=false ScannerReversalY=true [Material] SuedeList=BSF,SF,SL,SD +SuedeList2= +SuedeList3= +SuedeList4= +SuedeList5= +SuedeList6= [LIB] model_path=./models/best_0805_bs8.onnx labels_path=./models/hexin.names @@ -43,3 +48,5 @@ ErpDBConStr=connectionString="Server=127.0.0.1;Database=testDB;User Id=sa;Passwo ErpSql=select * from t2 where 1=1 [LOG] LogPath=F:\LeatherApp\log\ +[SkipLabelGrade] +LabelGradeList=laji,wenchong,chongying diff --git a/LeatherProject/LeatherApp/obj/Debug/LeatherApp.FrmVerList.resources b/LeatherProject/LeatherApp/obj/Debug/LeatherApp.FrmVerList.resources index 76d6a14..f3ab369 100644 Binary files a/LeatherProject/LeatherApp/obj/Debug/LeatherApp.FrmVerList.resources and b/LeatherProject/LeatherApp/obj/Debug/LeatherApp.FrmVerList.resources differ diff --git a/LeatherProject/LeatherApp/obj/Debug/LeatherApp.Page.FProductInfo.resources b/LeatherProject/LeatherApp/obj/Debug/LeatherApp.Page.FProductInfo.resources index 6c05a97..fdd10f5 100644 Binary files a/LeatherProject/LeatherApp/obj/Debug/LeatherApp.Page.FProductInfo.resources and b/LeatherProject/LeatherApp/obj/Debug/LeatherApp.Page.FProductInfo.resources differ diff --git a/LeatherProject/Models/Product.cs b/LeatherProject/Models/Product.cs index 769f88a..f13b3fc 100644 --- a/LeatherProject/Models/Product.cs +++ b/LeatherProject/Models/Product.cs @@ -106,6 +106,12 @@ namespace Models /// [SugarColumn(IsNullable = true)] public double residueWarnningLen { get; set; } + + /// + /// 等级判断提示裁切 + /// + [SugarColumn(IsNullable = true)] + public bool IsHintCutting { get; set; } } /// @@ -142,9 +148,8 @@ namespace Models /// /// 等级划分标准 /// - [SugarIndex("index_{table}_Pid_Code", - nameof(GradeLimit.Pid), OrderByType.Asc, - nameof(GradeLimit.Code), OrderByType.Asc, isUnique: true)] + [SugarIndex("index_{table}_Pid", + nameof(GradeLimit.Pid), OrderByType.Asc, isUnique: true)] public class GradeLimit : BaseTable { public int Pid { get; set; } @@ -152,7 +157,13 @@ namespace Models /// dk,xws,... /// public string Code { get; set; } - + + public string CodeName { get; set; } + /// + /// 等级判定长度 0:no do + /// + public double JudgeLength { get; set; } + //此等级上限缺陷数 public int A { get; set; } public int B { get; set; } diff --git a/LeatherProject/Models/Records.cs b/LeatherProject/Models/Records.cs index 3162e06..7b13556 100644 --- a/LeatherProject/Models/Records.cs +++ b/LeatherProject/Models/Records.cs @@ -144,6 +144,19 @@ namespace Models /// [SugarColumn(IsIgnore = true)] public int[] preWarningPhotoIndexByLabel { get; set; } = new int[50]; + + /// + /// 等级判定位置记录 + /// + [SugarColumn(IsIgnore = true)] + public int preGradePhotoIndexByGradeIndex { get; set; } = 0; + + + /// + /// 整卷分级 + /// + [Navigate(NavigateType.OneToMany, nameof(GradeDifferentiateInfo.Pid))] + public List GradeDifferentiateInfoList { get; set; } } /// @@ -210,4 +223,52 @@ namespace Models [SugarColumn(IsIgnore = true)] public string TagFilePath { get; set; }//打标小图路径,用于二次瑕疵检测修改和忽略时的改名/删除 } + + /// + /// 产品分级明细表 + /// + [SugarIndex("index_{table}_pid", nameof(GradeDifferentiateInfo.Pid), OrderByType.Asc, + nameof(GradeDifferentiateInfo.GradeCode), OrderByType.Asc, + isUnique: false)] + public class GradeDifferentiateInfo : BaseTable + { + public int Pid { get; set; } + /// + /// 开始拍照id + /// + public int StartPhotoIndex { get; set; }//原图索引/文件名 0-n + /// + /// 结束拍照id + /// + public int EndPhotoIndex { get; set; }//原图索引/文件名 0-n + /// + /// 等级Code + /// + public string GradeCode { get; set; } + /// + /// 使用的区分规则 + /// + public GradeLimit UseGradeLimit { get; set; } + + /// + /// 缺陷数量 + /// + public int DefectCnt { get; set; } + + /// + /// 长度 + /// + public double CutLen { get; set; } + + /// + /// 开始截取位置 + /// + public double StartY { get; set; } + + /// + /// 结束截取位置 + /// + public double EndY { get; set; } + + } } diff --git a/LeatherProject/Service/InitDB.cs b/LeatherProject/Service/InitDB.cs index a8581d7..0963557 100644 --- a/LeatherProject/Service/InitDB.cs +++ b/LeatherProject/Service/InitDB.cs @@ -42,6 +42,7 @@ namespace Service if (dropTable && db.DbMaintenance.IsAnyTable("GradeLimit", false)) db.DbMaintenance.DropTable("GradeLimit"); if (dropTable && db.DbMaintenance.IsAnyTable("Records", false)) db.DbMaintenance.DropTable("Records"); if (dropTable && db.DbMaintenance.IsAnyTable("DefectInfo", false)) db.DbMaintenance.DropTable("DefectInfo"); + if (dropTable && db.DbMaintenance.IsAnyTable("GradeDifferentiateInfo", false)) db.DbMaintenance.DropTable("GradeDifferentiateInfo"); //===添加与更新表 db.CodeFirst.InitTables(); @@ -54,6 +55,7 @@ namespace Service db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); db.CodeFirst.InitTables(); + db.CodeFirst.InitTables(); //更改表数据 try diff --git a/LeatherProject/Service/RecordsService.cs b/LeatherProject/Service/RecordsService.cs index 2cd1e45..5743601 100644 --- a/LeatherProject/Service/RecordsService.cs +++ b/LeatherProject/Service/RecordsService.cs @@ -52,7 +52,8 @@ namespace Service return base.AsSugarClient().Queryable() //.Includes(m => m.ProductInfo.ToList(x => new Product() { Code = x.Code, Name = x.Name }))//,n=>n.ClassesInfo) //.Includes(m => m.ProductInfo) - .Includes(m => m.DefectInfoList) + .Includes(m => m.DefectInfoList) + .Includes(m => m.GradeDifferentiateInfoList) .First(m => m.Id == id); } public List GetListNav(int pageNum, int pageSize, ref int totalCount, Expression> exp) @@ -66,13 +67,15 @@ namespace Service public bool InsertNav(Models.Records model) { return base.AsSugarClient().InsertNav(model) - .Include(m => m.DefectInfoList) + .Include(m => m.DefectInfoList) + .Include(m => m.GradeDifferentiateInfoList) .ExecuteCommand(); } public bool DelNav(Models.Records model) { return base.AsSugarClient().DeleteNav(model) .Include(a => a.DefectInfoList)//.ThenInclude(z1 => z1.RoomList) //插入2层 Root->ShoolA->RoomList + .Include(m => m.GradeDifferentiateInfoList) .ExecuteCommand(); }