diff --git a/halftoneproject-master.rar b/halftoneproject-master.rar deleted file mode 100644 index 489ac17..0000000 Binary files a/halftoneproject-master.rar and /dev/null differ diff --git a/halftoneproject-master/AssistClient/DevContainer.cs b/halftoneproject-master/AssistClient/DevContainer.cs index 91d669a..d00d5c4 100644 --- a/halftoneproject-master/AssistClient/DevContainer.cs +++ b/halftoneproject-master/AssistClient/DevContainer.cs @@ -61,6 +61,7 @@ namespace AssistClient { try { + //WarningEvent( WarningEnum.Normal, "启动1"); devAxis = new AxisDev(); devAxis.WarningEvent = WarningEvent; devAxis.axisPosEvent = axisPosEvent;//位置POS @@ -77,11 +78,14 @@ namespace AssistClient devLight = new LightDev(); devLight.WarningEvent = WarningEvent; devScannerCC = new ScannerDev(ScannerDev.ScannerType.CC); - devScannerCC.WarningEvent = WarningEvent; + devScannerCC.WarningEvent = WarningEvent; + //WarningEvent(WarningEnum.Normal, "启动2"); libSize = new SizeLib(); + //WarningEvent(WarningEnum.Normal, "启动2.5"); libSize.WarningEvent = WarningEvent; libFor = new ForLib(); libIF = new IFLib(); + //WarningEvent(WarningEnum.Normal, "启动3"); //启动 if (!devAxis.start(Config.Axis_PulseOutMode)) throw new Exception("运动板卡初始化失败!"); //if (!devCodeScanner.start()) throw new Exception("扫码枪初始化失败!"); @@ -91,8 +95,9 @@ namespace AssistClient if (!Config.SkipScannerCC && !devScannerCC.open()) throw new Exception("相机初始化失败!"); if (!Config.SkipScannerCC && !devScannerCC.start(this.preView2, Config.SizeBmp_Path)) throw new Exception("相机打开失败!"); + //WarningEvent(WarningEnum.Normal, "启动4"); if (!libSize.start(Config.SizeEnginePath)) throw new Exception("尺寸库初始化失败!"); - + //WarningEvent(WarningEnum.Normal, "启动5"); // state = true; StateChange?.Invoke(true, "成功"); diff --git a/halftoneproject-master/AssistClient/FrmMain.cs b/halftoneproject-master/AssistClient/FrmMain.cs index 1b63d5c..1759aa5 100644 --- a/halftoneproject-master/AssistClient/FrmMain.cs +++ b/halftoneproject-master/AssistClient/FrmMain.cs @@ -106,7 +106,8 @@ namespace AssistClient } private void FrmMain_Load(object sender, EventArgs e) { - this.tsbtnPause.Left = this.tsbtnGoDownPT.Left = this.gpbZAxis.Right + 10; + this.tsbtnPause.Left = this.tsbtnGoDownPT.Left = this.gpbZAxis.Right + 10; + } private void FrmMain_FormClosing(object sender, FormClosingEventArgs e) { @@ -200,9 +201,10 @@ namespace AssistClient this.pictureBox1.Image = bmp;//del pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; - pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); - pictureBox1.MouseMove += pictureBox1_MouseMove; - pictureBox1.MouseDown += pictureBox1_MouseDown; + //2023-12-22 之前工程师写的,存在bug,屏蔽 + //pictureBox1.MouseWheel += new MouseEventHandler(pictureBox1_MouseWheel); + //pictureBox1.MouseMove += pictureBox1_MouseMove; + //pictureBox1.MouseDown += pictureBox1_MouseDown; this.ActiveControl = this.pictureBox1; // 设置焦点 pic_size = this.pnlPic.ClientSize; @@ -243,8 +245,8 @@ namespace AssistClient private void changePictureBoxSize(Point location, double ratio) { var picSize = pictureBox1.Size; - picSize.Width = Convert.ToInt32(pic_size.Width * ratio); - picSize.Height = Convert.ToInt32(pic_size.Height * ratio); + picSize.Width = Convert.ToInt32(picSize.Width * ratio); + picSize.Height = Convert.ToInt32(picSize.Height * ratio); pictureBox1.Size = picSize; if (location.X > 0) location.X = 0; @@ -1844,6 +1846,7 @@ namespace AssistClient if (level == WarningEnum.High) warning(level, true); }; + AddTextEvent("设备启动", "启动"); devContainer.start(IntPtr.Zero, IntPtr.Zero); } private void Timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) diff --git a/halftoneproject-master/Code/Config.cs b/halftoneproject-master/Code/Config.cs index 738ca42..674f5ec 100644 --- a/halftoneproject-master/Code/Config.cs +++ b/halftoneproject-master/Code/Config.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; +using System.Windows.Forms; using Newtonsoft.Json.Linq; using ProductionControl.Utils; @@ -27,6 +28,9 @@ namespace ProductionControl public static bool OpenMarkErrorStop; //启用缺陷分布功能 public static bool OpenFlawDistribution; + //启用X轴校准 2023-12-20 + public static bool OpenAxisXCalibration; + //DEV public static int[] Axis_PulseOutMode=new int[4]; public static int[] Axis_MM2PulseNum = new int[4] { 5000, 5000, 5000, 1000};//1mm对应脉冲数 @@ -106,19 +110,19 @@ namespace ProductionControl // if (Defect_SavePath_AutoClear >= 0) - DeleteFiles(Config.Defect_SavePath, Defect_SavePath_AutoClear, false); + DeleteFiles(Config.Defect_SavePath, Defect_SavePath_AutoClear, true); if (Defect_Compress_SavePath_AutoClear >= 0) - DeleteFiles(Config.Defect_Compress_SavePath, Defect_Compress_SavePath_AutoClear, false); + DeleteFiles(Config.Defect_Compress_SavePath, Defect_Compress_SavePath_AutoClear, true); if (Defect_Small_SavePath_AutoClear >= 0) - DeleteFiles(Config.Defect_Small_SavePath, Defect_Small_SavePath_AutoClear, false); + DeleteFiles(Config.Defect_Small_SavePath, Defect_Small_SavePath_AutoClear, true); // if (SizeBmp_SavePath_AutoClear >= 0) - DeleteFiles(Config.SizeBmp_SavePath, SizeBmp_SavePath_AutoClear, false); + DeleteFiles(Config.SizeBmp_SavePath, SizeBmp_SavePath_AutoClear, true); if (SizeBmp_Compare_SavePath_AutoClear >= 0) - DeleteFiles(Config.SizeBmp_Compare_SavePath, SizeBmp_Compare_SavePath_AutoClear, false); + DeleteFiles(Config.SizeBmp_Compare_SavePath, SizeBmp_Compare_SavePath_AutoClear, true); if (SizeBmp_Zoom_Image_SavePath_AutoClear >= 0) - DeleteFiles(Config.SizeBmp_Zoom_Image_SavePath, SizeBmp_Zoom_Image_SavePath_AutoClear, false); + DeleteFiles(Config.SizeBmp_Zoom_Image_SavePath, SizeBmp_Zoom_Image_SavePath_AutoClear, true); }); } @@ -198,6 +202,7 @@ namespace ProductionControl OpenMarkErrorStop = Util.ReadIniValue(configPath, "SKIP", "MarkErrorStop") == "1"; OpenFlawDistribution = Util.ReadIniValue(configPath, "SKIP", "OpenFlawDistribution") == "1"; + OpenAxisXCalibration = Util.ReadIniValue(configPath, "SKIP", "OpenAxisXCalibration") == "1"; //DEV lsTmp = Util.ReadIniValue(configPath, "DEV", "Axis0_PulseOutMode"); if (Util.IsNumber(lsTmp)) Config.Axis_PulseOutMode[0] = Convert.ToInt32(lsTmp); @@ -343,32 +348,62 @@ namespace ProductionControl /// /// /// 把日期文件夹也按days进行删除,格式:yyyyMMdd - private static void DeleteFiles(string dirPath,double days=0,bool delDir=false) + private static void DeleteFiles(string dirPath, double days = 0, bool delDir = false) { - if (!Directory.Exists(dirPath)) return; + if (!Directory.Exists(dirPath)) return; DateTime delDate = DateTime.Now.AddDays(-days); API.OutputDebugString($"清除{delDate.ToString("yyyyMMdd")}前记录:{dirPath}。"); - string[] file_list = Directory.GetFiles(dirPath); - if(days>0) - file_list = file_list.Select(file => new FileInfo(file)) - .Where(f=>f.CreationTime<= delDate) + + //删除dirPath中的过期文件 + string[] files_list = Directory.GetFiles(dirPath); + if (days > 0) + files_list = files_list.Select(file => new FileInfo(file)) + .Where(f => f.CreationTime <= delDate) .Select(x => x.FullName) .ToArray(); - foreach (string file in file_list) + foreach (string file in files_list) { - try { + try + { API.OutputDebugString($"清除文件:{file}..."); File.Delete(file); - } catch(Exception ex) { + } + catch (Exception ex) + { API.OutputDebugString($"Ex1:{ex.Message}"); } } + string[] dirsList = Directory.GetDirectories(dirPath, "20*"); + foreach (string dir in dirsList) + { + string[] file_list = Directory.GetFiles(dir); + if (days > 0) + file_list = file_list.Select(file => new FileInfo(file)) + .Where(f => f.CreationTime <= delDate) + .Select(x => x.FullName) + .ToArray(); + + foreach (string file in file_list) + { + try { + API.OutputDebugString($"清除文件:{file}..."); + File.Delete(file); + } catch (Exception ex) { + API.OutputDebugString($"Ex1:{ex.Message}"); + } + } + } // if (delDir) { - int dateNum = Convert.ToInt32(delDate.ToString("yyyyMMdd")); + int dateNum = 0; + if (days > 1) + dateNum = Convert.ToInt32(delDate.ToString("yyyyMMdd")); + else if (days > 0) + dateNum = Convert.ToInt32(delDate.ToString("yyyyMMdd")) - 1; + string floderName; string[] dirList = Directory.GetDirectories(dirPath,"20*"); foreach (string dir in dirList) @@ -391,5 +426,41 @@ namespace ProductionControl } } + + public static long GetHardDiskSpace(string str_HardDiskName) + { + long result = 0L; + try + { + str_HardDiskName += ":\\"; + DriveInfo[] drives = DriveInfo.GetDrives(); + DriveInfo[] array = drives; + foreach (DriveInfo driveInfo in array) + { + if (driveInfo.Name == str_HardDiskName) + { + result = driveInfo.TotalFreeSpace / 1073741824; + } + } + } + catch { + result = 0; + } + return result; + } + + public static bool CheckDisk(int max = 10) + { + string path = Config.Defect_SavePath; + string volume = path.Substring(0, path.IndexOf(':')); + long freespace = GetHardDiskSpace(volume); + if (freespace < max) + { + string tip = $"当前{volume}硬盘容量:{freespace}GB,小于{max}GB。注意清理!!"; + MessageBox.Show(tip, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return false; + } + return true; + } } } diff --git a/halftoneproject-master/Code/Enums.cs b/halftoneproject-master/Code/Enums.cs index 26c82fd..826e962 100644 --- a/halftoneproject-master/Code/Enums.cs +++ b/halftoneproject-master/Code/Enums.cs @@ -176,6 +176,9 @@ namespace ProductionControl Y轴复位输出 = 40, Y轴复位完成输入 = 41, + + X1轴复位输出 = 50, + X2轴复位输出 = 51, } //--- diff --git a/halftoneproject-master/Code/FrmLogin.Designer.cs b/halftoneproject-master/Code/FrmLogin.Designer.cs index 2e501f5..647de32 100644 --- a/halftoneproject-master/Code/FrmLogin.Designer.cs +++ b/halftoneproject-master/Code/FrmLogin.Designer.cs @@ -159,7 +159,7 @@ this.Name = "FrmLogin"; this.ShowIcon = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "自动化视觉检测系统 - v1.2.1"; + this.Text = "自动化视觉检测系统 - v1.2.3"; this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmLogin_FormClosed); this.Load += new System.EventHandler(this.FrmLogin_Load); ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); diff --git a/halftoneproject-master/Code/FrmMain.Designer.cs b/halftoneproject-master/Code/FrmMain.Designer.cs index 8aa8941..9fae6bc 100644 --- a/halftoneproject-master/Code/FrmMain.Designer.cs +++ b/halftoneproject-master/Code/FrmMain.Designer.cs @@ -1552,7 +1552,7 @@ this.splitContainer2.Panel2.Controls.Add(this.gboxDefectList); this.splitContainer2.Panel2MinSize = 400; this.splitContainer2.Size = new System.Drawing.Size(463, 523); - this.splitContainer2.SplitterDistance = 26; + this.splitContainer2.SplitterDistance = 28; this.splitContainer2.SplitterWidth = 3; this.splitContainer2.TabIndex = 10; // @@ -1572,7 +1572,7 @@ // splitContainer3.Panel2 // this.splitContainer3.Panel2.Controls.Add(this.picScanner2); - this.splitContainer3.Size = new System.Drawing.Size(26, 523); + this.splitContainer3.Size = new System.Drawing.Size(28, 523); this.splitContainer3.SplitterDistance = 226; this.splitContainer3.SplitterWidth = 3; this.splitContainer3.TabIndex = 11; @@ -1586,7 +1586,7 @@ this.picScanner1.Location = new System.Drawing.Point(0, 0); this.picScanner1.Margin = new System.Windows.Forms.Padding(2); this.picScanner1.Name = "picScanner1"; - this.picScanner1.Size = new System.Drawing.Size(26, 226); + this.picScanner1.Size = new System.Drawing.Size(28, 226); this.picScanner1.TabIndex = 7; this.picScanner1.TabStop = false; // @@ -1598,7 +1598,7 @@ this.picScanner2.Location = new System.Drawing.Point(0, 0); this.picScanner2.Margin = new System.Windows.Forms.Padding(2); this.picScanner2.Name = "picScanner2"; - this.picScanner2.Size = new System.Drawing.Size(26, 294); + this.picScanner2.Size = new System.Drawing.Size(28, 294); this.picScanner2.TabIndex = 9; this.picScanner2.TabStop = false; // @@ -1612,7 +1612,7 @@ this.gboxDefectList.Margin = new System.Windows.Forms.Padding(2); this.gboxDefectList.Name = "gboxDefectList"; this.gboxDefectList.Padding = new System.Windows.Forms.Padding(2); - this.gboxDefectList.Size = new System.Drawing.Size(434, 523); + this.gboxDefectList.Size = new System.Drawing.Size(432, 523); this.gboxDefectList.TabIndex = 3; this.gboxDefectList.TabStop = false; this.gboxDefectList.Tag = "0"; @@ -1624,7 +1624,7 @@ this.lblDefectAddTag.AutoSize = true; this.lblDefectAddTag.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblDefectAddTag.ForeColor = System.Drawing.Color.Blue; - this.lblDefectAddTag.Location = new System.Drawing.Point(283, 2); + this.lblDefectAddTag.Location = new System.Drawing.Point(281, 2); this.lblDefectAddTag.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); this.lblDefectAddTag.Name = "lblDefectAddTag"; this.lblDefectAddTag.Size = new System.Drawing.Size(0, 12); @@ -1639,7 +1639,7 @@ this.pnlBmpList.Location = new System.Drawing.Point(2, 16); this.pnlBmpList.Margin = new System.Windows.Forms.Padding(2); this.pnlBmpList.Name = "pnlBmpList"; - this.pnlBmpList.Size = new System.Drawing.Size(430, 505); + this.pnlBmpList.Size = new System.Drawing.Size(428, 505); this.pnlBmpList.TabIndex = 0; // // chkBuzzer @@ -1727,7 +1727,7 @@ this.Margin = new System.Windows.Forms.Padding(2); this.Name = "FrmMain"; this.ShowIcon = false; - this.Text = "自动化视觉检测系统 - v1.2.1"; + this.Text = "自动化视觉检测系统 - v1.2.3"; this.WindowState = System.Windows.Forms.FormWindowState.Maximized; this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmMian_FormClosing); this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.FrmMian_FormClosed); diff --git a/halftoneproject-master/Code/FrmMain.cs b/halftoneproject-master/Code/FrmMain.cs index effb96b..0d4afd6 100644 --- a/halftoneproject-master/Code/FrmMain.cs +++ b/halftoneproject-master/Code/FrmMain.cs @@ -152,6 +152,9 @@ namespace ProductionControl webService.LogEvent = null; }; webService.start(); + + //读取硬盘剩余空间 + Config.CheckDisk(); } private void loadProductCodeList() { @@ -188,6 +191,49 @@ namespace ProductionControl // runStep(); //} } + /// + /// 删除修复台重复sn图片 + /// + private void DeleteRepairImage(string sn) + { + List imagePath = new List + { + Config.Defect_SavePath, + Config.Defect_Small_SavePath, + Config.Defect_Compress_SavePath, + Config.SizeBmp_Zoom_Image_SavePath, + Config.SizeBmp_SavePath, + Config.SizeBmp_Compare_SavePath + }; + //删除文件 + //Task.Factory.StartNew(() => + //{ + for (int i = 0; i < imagePath.Count; i++) + { + string dirPath = Util.createSubDir(imagePath[i], + new List { DateTime.Now.ToString("yyyyMMdd"), sn }); + if (!Directory.Exists(dirPath)) + { + return; + } + string[] array = Directory.GetFiles(dirPath); + foreach (string text in array) + { + try + { + API.OutputDebugString("清除文件:" + text + "..."); + File.Delete(text); + } + catch (Exception ex) + { + API.OutputDebugString("Ex1:" + ex.Message); + } + } + } + + //}); + } + //后台线程运行 /// /// 中断工序运行 @@ -212,6 +258,12 @@ namespace ProductionControl AddTextEvent("扫码枪", "扫码枪初始化失败!"); return; } + //2023-12-06 无输入料号防呆 + if(string.IsNullOrEmpty(this.txtProductCode.Text)) + { + AddTextEvent("料号", "未选择料号!"); + return; + } //2023-10-20 不使用扫码枪事件处理 //devContainer.devCodeScanner.ScanerEvent = (code) => string code = this.txtProductCode.Text; @@ -265,6 +317,10 @@ namespace ProductionControl devContainer.devCodeScanner.stop(); devContainer.devCodeScanner = null; errStep = 5; + //删除重复sn用于修复台的图片 + AddTextEvent("扫码枪", $"删除{sn}重复用于修复台的图片..."); + DeleteRepairImage(sn); + //判断SN数量是否达到批次上限 //创建表达式 if (!string.IsNullOrWhiteSpace(model.BatchId) && model.TargetCount > 0) @@ -788,10 +844,10 @@ namespace ProductionControl { AddTextEvent($"{stepIndex + 1}-{processName}", $"相机采集照片完成。"); //----缺陷队列 - bool cloneUse = false; + //bool cloneUse = false; if (AIEngineLib == AIEngineLibEnum.缺陷库 || AIEngineLib == AIEngineLibEnum.缺陷与测量库) { - cloneUse = true; + //cloneUse = true; var mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bmpout); scannerGBmpQueue.Enqueue(new scannerGBmpLoc(mat, devContainer.devAxis.getActualPos_mm(1), @@ -800,8 +856,13 @@ namespace ProductionControl } if (AIEngineLib == AIEngineLibEnum.测量库 || AIEngineLib == AIEngineLibEnum.缺陷与测量库) { + //v1.2.2. 修改传图 + //scannerCBmpQueue.Enqueue(new scannerCBmpLoc( + // cloneUse?(Bitmap)bmpout.Clone(): bmpout, + // devContainer.devAxis.getActualPos_mm(1), + // devContainer.devAxis.getActualPos_mm(2)));//Dequeue scannerCBmpQueue.Enqueue(new scannerCBmpLoc( - cloneUse?(Bitmap)bmpout.Clone(): bmpout, + (Bitmap)bmpout.Clone(), devContainer.devAxis.getActualPos_mm(1), devContainer.devAxis.getActualPos_mm(2)));//Dequeue AddTextEvent($"{stepIndex + 1}-{processName}", $"添加尺寸图像队列,X:{devContainer.devAxis.getActualPos_mm(1)},y:{devContainer.devAxis.getActualPos_mm(2)},数量: {scannerCBmpQueue.Count}"); @@ -983,7 +1044,7 @@ namespace ProductionControl processName = processName, sizeTag = sizeTag, engineName = processParam.Value("EngineName"), - bmp = bmpCBmpQueue.BMP,//bmp/file_path二选一,优先bmp + bmp = bmpCBmpQueue.BMP == null ? bmpCBmpQueue.BMP : (Bitmap)bmpCBmpQueue.BMP.Clone(),//bmp/file_path二选一,优先bmp file_path = bmpCBmpQueue.Path, drawingPagePath = gbxBmpPath, posX= bmpCBmpQueue.PosX, @@ -1056,6 +1117,10 @@ namespace ProductionControl } else { + //2023-12-29 加入比对失败当作NG处理 + order.CompareResult = 2; + updateCompareResult(false);//更新比对看板 + //warning(WarningEnum.Low);//暂停 setDgvContentCol(liStatocStepIndex, $"index:{res.index},图像比对失败!"); AddTextEvent($"{res.stepIndex + 1}-{res.processName}", $"图像比对失败,index:{res.index}-{compBmpIndex}.", WarningEnum.Low); @@ -2283,10 +2348,17 @@ namespace ProductionControl e.DrawBackground(); if (e.Index < 0) return; - string str = lstLog.Items[e.Index].ToString(); - e.Graphics.DrawString(str.Substring(1), e.Font, - new SolidBrush(str[0] == 'R' ? Color.Red : (str[0] == 'Y' ? Color.Orange : Color.Black)), - e.Bounds); + try + { + string str = lstLog.Items[e.Index].ToString(); + e.Graphics.DrawString(str.Substring(1), e.Font, + new SolidBrush(str[0] == 'R' ? Color.Red : (str[0] == 'Y' ? Color.Orange : Color.Black)), + e.Bounds); + } + catch + { + ; + } } private void writeLog(DateTime now, WarningEnum level, string text) { @@ -2708,7 +2780,14 @@ namespace ProductionControl // if (devContainer.devAxis.isError()) - throw new Exception("轴回原点失败!"); + throw new Exception("轴回原点失败!"); + + if (Config.OpenAxisXCalibration) + { + //2023-11-29 加入X1X2回原之后启动补偿 + devContainer.io_output(CMDName.X1轴复位输出, false, true, 300); + devContainer.io_output(CMDName.X2轴复位输出, false, true, 300); + } // //goto InitPT diff --git a/halftoneproject-master/Code/FrmMain.resx b/halftoneproject-master/Code/FrmMain.resx index 4613102..e8713cf 100644 --- a/halftoneproject-master/Code/FrmMain.resx +++ b/halftoneproject-master/Code/FrmMain.resx @@ -643,20 +643,20 @@ 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 @@ -665,11 +665,11 @@ YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAG9SURBVFhHYxgS4F+GuvqvFGVjKJf24KW9KM+nEJnk3+kq x/7nqf//l632H+iA/1+i5f6/DpC89MJVpOiRhQwnVDl1wbH6wmUPAjT/fwyV+Q90wH90B7wLkPr/wlX0 /0MbgRv3THjVodqoBx6Y8f1/7iRC0AFPbAT/3zfl+nzflCcQqhUveOkm2gtl4gekOOChOf9/kPpHFgIz - gdEmATUCBfzLUlb5Fiu/EeiA/1Ah/IAsB1gK/L/vwPX5pbvo3vfBUu1f4xXSfqcpN/7NUVv3Jlftz7dY + gdEmATUCBfzLUlb5Fiu/EeiA/1Ah/IAsB1gK/L/vwPX5pbvo3vfBUu1f4xXSfqcpN/7NUVv3Klftz7dY hf80d8AzB+H/rz3F/38Ilv7/LU4BrPdfrhoYjzpg1AGjDhh1wNB3wM9s1ee/UhSv0s0BT92k/l8uDfkP LM89/tdrsUGlGP6HarG9CZAxA7YHJgMd8JMmDrgU7/Z/44o1/+es34NXwxMrfoOH5tz3qO6A9QdO/1+x 8yhBB4DAXWNB/vumvDMJOeBLrDyopoyFasMPSHEADDyyEPR4Ziv8BN0BH5LVvv3NUZ32PUZOEaqUMCDH - ATDwzkdS7l2glB/QwuRfmcrG/wrJaDdS4gCqgFEHjDpg3YFT9WAHrNtTDxUaBcMZMDAAAIoH3zw7A9x2 + ATDwzkdS7l2glB/QwuRfmcrG/wrJaDdS4gCqgFEHjDpg3YFT9WAHrNtTDxUaBcMZMDAAAHCV3zql/rK2 AAAAAElFTkSuQmCC @@ -677,61 +677,61 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAALjSURBVFhH7ZbpS1RRHIZvTU0mQgRFEPSHBAUVbVhkm1pp - mWZmOjrjMs64t0JfIooyx9z3ZVxzGTUbTdOEchlnXx0N+tRXIRDezj3Mhekyls7cSYheeL6dw/Ne7uF3 + mWZm4zLjMs64t0JfIooyx9z3ZVxzGTUbTdOEchlnXx0N+tRXIRDezj3Mhekyls7cSYheeL6dw/Ne7uF3 DvPPpGj6AAqn96Pg0z7kT+1B3tRu5E7ugvJjGJQToVBMhCBnfAeyx8QqzxbhQuQr65HLP4hJgW3wbBMm G5VnjYqEK+CPPFO7VZgC/sozhCgg0e79sZZcMR7aVqxlwor1jFg+Ji7hy2XvtwRW4Hdy8uWrrNyzlGFL ZGlF373lspEACvxBDoUmZCWylRF5ltMQ+VdvufQd418Bvnxk+Ynvfz62/alnCytX8uXpw34U4MuHlx9j - eOkRhpYe+jxw0lHRNyJ3+5KnDW2wADntq97ywaUHGHTfh8Z9D5rFYkLhmqfdl1wyuIECfPmAuwgDRNi/ - WIB+Vz4hD32uXPQ5leuWp2rWWYAv71vMQy+R9boU6HXm4K1TTulxZBOy0G3PDJ68xyVHtzObkIluRwa6 - HDJ02aXoZLGlo8OWhnarhCK4vNMpQ6dDig57GoFI7Klot6VAbbsLtTUZbZZktFruUFrMSRTB5GoiU9tT + eOkRhpYe+jxw0lHRNyJ3+5KnDW2wADntq97ywaUHGHTfh8Z9D5rFYkLhmqfdlzx1cAMF+PIBdxEGiLB/ + sQD9rnxCHvpcuehzKtctT9GsswBf3reYh14i63Up0OvMwVunnNLjyCZkodueGTx5j0uObmc2IRPdjgx0 + OWToskvRyWJLR4ctDe3WVIrg8k6nDJ0OKTrsaQQisaeg3SaB2nYXamsy2izJaLXcobSYkyiCydVEprZL 0GYjImsSWq23KS2WRMItNJsT0GSKpzSyGOMDkv9yn7fYiMiaiGZrApotRGKJQ5M5Do3mG2gwXUeDMRb1 hDoWQwzFbzkbb3mj9SYaLERkjiXEoN58DXWmq0R2BbXGaNQYolCjj0I1oUofiaqFyMDk7Pjk5Nx4rTVF ExkRGS+jmsVwicguolJ/AZUL51FBKNdFUAKSc2FL8Gd7pSECFfpzlPKFs3ijO0MpI6jmw6GaCxdGzoW9 vfizvUx3GirdKZTOn0Tp3Am8JpTMHqcIKufCluDP9pK5Y3g1exQvWWaOUIIi50IfE7zZ/mLmMJ5/OUQJ - qpwLfUzwZvuzzwf/jpxLxiSzU5DZHkjYEpsm58KW2DQ5lxTy2Nw0+f8ELwzzE/paGgzH1hR8AAAAAElF + qpwLfUzwZvuzzwf/jpxLxiSzU5DZHkjYEpsm58KW2DQ5Fwl5bG6a/H+CF4b5CYMsGgInG2iLAAAAAElF TkSuQmCC iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHLSURBVFhH7dY9SAJhGMBxpyAIWpuCIGiN7NOlwQaLDB1s - CKxBCw00bJCowWppagoCoTlqyIiCyLSE8uQs64qzD+uyzMPQPE/MQLCeNN6GCk4sDYz7T3fvvc/Lbzi4 - E5REwZF43Z2WFaLb4ke2kxUXfbSKUocxejgBIV0S7jVxuOp/gCOZ73RfTIxirVg52l7Y1k34ItZLQgYA - fnUUvgIIGQVO8QlYW1wXm437dWiscFmbMXB3nuUE2Ntw2GjCErZWXI5GOTuU+mbRJXf5ALJ7d0RuwDoI - M6nwV6EjPhUwsLV+VXTNI/UBWuLuZ4BTwLuoxKWStge0sZnoeHooPvkyFTamLNf6SNo/yEDRAYScgktl - CAJaFpiJNMQnASLGFND6J+ABPIAH8IDSBwR1ydC9Jub9MwAu9cLe2DlkPiISUgFl6JGAVJBlxzKq2Skm - 5uxtjlRRAJsDLlhZdsHCqo1zYFeE11sbnDcFB6w6DmBpy5kTkG1beFhpE+HmnIABJuHpvlKiMe7yAXyE - iQlJ5t0IfgewzxnA/K06VoO25u4ngI8oJV19p2F6HifSKnYahAHDa/7/jb8BFCQewAMsDrfpHWCxmdAS - 339OIHgD1J71QoDsMyIAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHLSURBVFhH7dY9SAJhGMBxpyAIWpuCIGiN7EuXBhssMmyw + IbAGLTSwqEEiB6ulqSkIguaoISUKIjszKE/Osq44yw8u0zzsSz2xAuHqyeJtqODE0qC4/3T33vu8/IaD + O9GfKDqcqgnrWTG6LX5UC1Xm62E0tPYGZwbTEDM8wKUuBcHeKzhUBk72ZOQo3oyXou2Fbc1MLOLdFGQB + ENLG4TOAVNLglB2Drcnl26jfq0FjhcvWiIO77TQnwC4hYL0BT2PNRBca5e1AEZhBl/zlA3jduy11A95K + zlOqUAU64kOREbY6pImvehQBQEv8fQ9wAkQ7nfarGXtEn5yOj3MDqYmnyRtjxhIYuuZC/QkoOoDsosGv + jkFEz0LCxEFqAuDWmAFm6B4EgAAQAALg7wOihofYpS7p/TUAofDC7tgZZD8ickoFJeiRiFJRJUdKutEp + I2ftEkemKICNPhesLLtgwYrxDjikRK2tznlecIB1Zx+WNp05Aa9tiQ/KMSkxnxPQl0h7OoJqNMZfPoD3 + cBkpz74b0a8A9jELmLvQJqvQ1tx9B/AerWYqw7pE552J07BTII6MPOf/3/gTQEESAALAsuM2vwEsmBkt + Cf3nRKIXmuv1PdX+ZZIAAAAASUVORK5CYII= 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 - h8hfV8RzuqW13GsAAAAASUVORK5CYII= + h8hfUyBzuFLSYqkAAAAASUVORK5CYII= diff --git a/halftoneproject-master/Code/FrmProductInfo.Designer.cs b/halftoneproject-master/Code/FrmProductInfo.Designer.cs index 5fb8abf..8f1bd80 100644 --- a/halftoneproject-master/Code/FrmProductInfo.Designer.cs +++ b/halftoneproject-master/Code/FrmProductInfo.Designer.cs @@ -30,10 +30,10 @@ { this.components = new System.ComponentModel.Container(); System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmProductInfo)); - 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 dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle(); + System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = 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(); this.groupBox10 = new System.Windows.Forms.GroupBox(); this.panel10 = new System.Windows.Forms.Panel(); this.numTensionDownFloatValue = new System.Windows.Forms.NumericUpDown(); @@ -73,6 +73,7 @@ this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); this.tsbtnAddFile = new System.Windows.Forms.ToolStripButton(); this.tsbtnNewBatchId = new System.Windows.Forms.ToolStripButton(); + this.tbtnGetPos = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); this.tsbtnClose = new System.Windows.Forms.ToolStripButton(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); @@ -102,6 +103,11 @@ this.label3 = new System.Windows.Forms.Label(); this.txtSpec = new System.Windows.Forms.TextBox(); this.tabPage3 = new System.Windows.Forms.TabPage(); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this.panel6 = new System.Windows.Forms.Panel(); + this.label24 = new System.Windows.Forms.Label(); + this.cbMainGrid = new System.Windows.Forms.CheckBox(); + this.cbMarkDisturb = new System.Windows.Forms.CheckBox(); this.groupBox6 = new System.Windows.Forms.GroupBox(); this.panel5 = new System.Windows.Forms.Panel(); this.label21 = new System.Windows.Forms.Label(); @@ -115,7 +121,6 @@ this.tabPage2 = new System.Windows.Forms.TabPage(); this.tabPage4 = new System.Windows.Forms.TabPage(); this.flpQualifiedPannel = new System.Windows.Forms.FlowLayoutPanel(); - this.tbtnGetPos = new System.Windows.Forms.ToolStripButton(); this.groupBox10.SuspendLayout(); this.panel10.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numTensionDownFloatValue)).BeginInit(); @@ -144,6 +149,8 @@ this.groupBox4.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dgvBatchList)).BeginInit(); this.tabPage3.SuspendLayout(); + this.groupBox7.SuspendLayout(); + this.panel6.SuspendLayout(); this.groupBox6.SuspendLayout(); this.panel5.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.numMarkSize)).BeginInit(); @@ -663,6 +670,16 @@ this.tsbtnNewBatchId.Visible = false; this.tsbtnNewBatchId.Click += new System.EventHandler(this.tsbtnNewBatchId_Click); // + // tbtnGetPos + // + this.tbtnGetPos.Image = ((System.Drawing.Image)(resources.GetObject("tbtnGetPos.Image"))); + this.tbtnGetPos.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tbtnGetPos.Name = "tbtnGetPos"; + this.tbtnGetPos.Size = new System.Drawing.Size(60, 53); + this.tbtnGetPos.Text = "点位抓取"; + this.tbtnGetPos.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.tbtnGetPos.Click += new System.EventHandler(this.tbtnGetPos_Click); + // // toolStripSeparator4 // this.toolStripSeparator4.Name = "toolStripSeparator4"; @@ -828,46 +845,46 @@ // this.dgvBatchList.AllowUserToAddRows = false; this.dgvBatchList.AllowUserToDeleteRows = false; - dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle5.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle5.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle5.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle5.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle5.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle5.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dgvBatchList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle5; + dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle1.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvBatchList.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1; this.dgvBatchList.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.dgvBatchList.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { this.colBatchId, this.colTargetCount, this.colCompleteCount, this.colCreateTime}); - dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Window; - dataGridViewCellStyle6.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.ControlText; - dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.False; - this.dgvBatchList.DefaultCellStyle = dataGridViewCellStyle6; + dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window; + dataGridViewCellStyle2.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText; + dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False; + this.dgvBatchList.DefaultCellStyle = dataGridViewCellStyle2; this.dgvBatchList.Dock = System.Windows.Forms.DockStyle.Fill; this.dgvBatchList.Location = new System.Drawing.Point(2, 16); this.dgvBatchList.Margin = new System.Windows.Forms.Padding(2); this.dgvBatchList.MultiSelect = false; this.dgvBatchList.Name = "dgvBatchList"; this.dgvBatchList.ReadOnly = true; - dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; - dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Control; - dataGridViewCellStyle7.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.WindowText; - dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight; - dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText; - dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.True; - this.dgvBatchList.RowHeadersDefaultCellStyle = dataGridViewCellStyle7; + dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; + dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control; + dataGridViewCellStyle3.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText; + dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight; + dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText; + dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True; + this.dgvBatchList.RowHeadersDefaultCellStyle = dataGridViewCellStyle3; this.dgvBatchList.RowHeadersVisible = false; this.dgvBatchList.RowHeadersWidth = 62; - dataGridViewCellStyle8.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); - this.dgvBatchList.RowsDefaultCellStyle = dataGridViewCellStyle8; + dataGridViewCellStyle4.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.dgvBatchList.RowsDefaultCellStyle = dataGridViewCellStyle4; this.dgvBatchList.RowTemplate.Height = 30; this.dgvBatchList.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect; this.dgvBatchList.Size = new System.Drawing.Size(405, 203); @@ -993,6 +1010,7 @@ // // tabPage3 // + this.tabPage3.Controls.Add(this.groupBox7); this.tabPage3.Controls.Add(this.groupBox6); this.tabPage3.Controls.Add(this.groupBox5); this.tabPage3.Location = new System.Drawing.Point(4, 22); @@ -1004,6 +1022,62 @@ this.tabPage3.Text = "图纸资料"; this.tabPage3.UseVisualStyleBackColor = true; // + // groupBox7 + // + this.groupBox7.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.groupBox7.Controls.Add(this.panel6); + this.groupBox7.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.groupBox7.Location = new System.Drawing.Point(2, 218); + this.groupBox7.Margin = new System.Windows.Forms.Padding(2); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Padding = new System.Windows.Forms.Padding(2); + this.groupBox7.Size = new System.Drawing.Size(409, 102); + this.groupBox7.TabIndex = 34; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "参数设置"; + // + // panel6 + // + this.panel6.BackColor = System.Drawing.Color.White; + this.panel6.Controls.Add(this.label24); + this.panel6.Controls.Add(this.cbMainGrid); + this.panel6.Controls.Add(this.cbMarkDisturb); + this.panel6.Dock = System.Windows.Forms.DockStyle.Fill; + this.panel6.Location = new System.Drawing.Point(2, 16); + this.panel6.Margin = new System.Windows.Forms.Padding(2); + this.panel6.Name = "panel6"; + this.panel6.Size = new System.Drawing.Size(405, 84); + this.panel6.TabIndex = 0; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(30, 18); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(161, 12); + this.label24.TabIndex = 5; + this.label24.Text = "在非[默认Mark]的情况下生效"; + // + // cbMainGrid + // + this.cbMainGrid.AutoSize = true; + this.cbMainGrid.Location = new System.Drawing.Point(199, 47); + this.cbMainGrid.Name = "cbMainGrid"; + this.cbMainGrid.Size = new System.Drawing.Size(72, 16); + this.cbMainGrid.TabIndex = 1; + this.cbMainGrid.Text = "是否主栅"; + this.cbMainGrid.UseVisualStyleBackColor = true; + // + // cbMarkDisturb + // + this.cbMarkDisturb.AutoSize = true; + this.cbMarkDisturb.Location = new System.Drawing.Point(32, 47); + this.cbMarkDisturb.Name = "cbMarkDisturb"; + this.cbMarkDisturb.Size = new System.Drawing.Size(120, 16); + this.cbMarkDisturb.TabIndex = 0; + this.cbMarkDisturb.Text = "是否存在Mark干扰"; + this.cbMarkDisturb.UseVisualStyleBackColor = true; + // // groupBox6 // this.groupBox6.BackColor = System.Drawing.SystemColors.ActiveCaption; @@ -1071,9 +1145,9 @@ "空心圆", "实心圆带栅线", "空心圆带栅线", - "圆环", - "半圆环", - "十字线"}); + "矩形", + "候补1", + "候补2"}); this.cbMarkType.Location = new System.Drawing.Point(70, 65); this.cbMarkType.Margin = new System.Windows.Forms.Padding(2); this.cbMarkType.Name = "cbMarkType"; @@ -1161,16 +1235,6 @@ this.flpQualifiedPannel.Size = new System.Drawing.Size(416, 326); this.flpQualifiedPannel.TabIndex = 0; // - // tbtnGetPos - // - this.tbtnGetPos.Image = ((System.Drawing.Image)(resources.GetObject("tbtnGetPos.Image"))); - this.tbtnGetPos.ImageTransparentColor = System.Drawing.Color.Magenta; - this.tbtnGetPos.Name = "tbtnGetPos"; - this.tbtnGetPos.Size = new System.Drawing.Size(60, 53); - this.tbtnGetPos.Text = "点位抓取"; - this.tbtnGetPos.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.tbtnGetPos.Click += new System.EventHandler(this.tbtnGetPos_Click); - // // FrmProductInfo // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -1223,6 +1287,9 @@ this.groupBox4.ResumeLayout(false); ((System.ComponentModel.ISupportInitialize)(this.dgvBatchList)).EndInit(); this.tabPage3.ResumeLayout(false); + this.groupBox7.ResumeLayout(false); + this.panel6.ResumeLayout(false); + this.panel6.PerformLayout(); this.groupBox6.ResumeLayout(false); this.panel5.ResumeLayout(false); this.panel5.PerformLayout(); @@ -1320,5 +1387,10 @@ private System.Windows.Forms.ComboBox cmbDefectModelFile; private System.Windows.Forms.Label label21; private System.Windows.Forms.ToolStripButton tbtnGetPos; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.Panel panel6; + private System.Windows.Forms.CheckBox cbMainGrid; + private System.Windows.Forms.CheckBox cbMarkDisturb; + private System.Windows.Forms.Label label24; } } \ No newline at end of file diff --git a/halftoneproject-master/Code/FrmProductInfo.cs b/halftoneproject-master/Code/FrmProductInfo.cs index 1c5d05c..029c84e 100644 --- a/halftoneproject-master/Code/FrmProductInfo.cs +++ b/halftoneproject-master/Code/FrmProductInfo.cs @@ -1,82 +1,85 @@ -using OpenCvSharp; +using OpenCvSharp; using ProductionControl.UI; -using ProductionControl.UIExtend; -using ProductionControl.Utils; -using System; -using System.Collections; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Diagnostics; -using System.Drawing; -using System.Drawing.Imaging; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using ProductionControl.UIExtend; +using ProductionControl.Utils; +using System; +using System.Collections; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Diagnostics; +using System.Drawing; +using System.Drawing.Imaging; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; using System.Web.Configuration; -using System.Windows.Forms; - -namespace ProductionControl -{ - public partial class FrmProductInfo : Form - { - Service.ClassesService svcClasses = new Service.ClassesService(); - Service.ProductService service = new Service.ProductService(); - Models.Product model = new Models.Product(); - - string MapPath = ""; - public FrmProductInfo(Models.Product m=null) - { - InitializeComponent(); - this.dgvBatchList.AutoGenerateColumns = false; - checkCustomerVer(); - //this.cbMarkType.SelectedIndex = -1; - if (m!=null) - { - model = m; - this.Text += $" (ID:{m.Id})"; - this.txtCode.Text = m.Code; - this.txtName.Text = m.Name; - this.txtSpec.Text = m.Spec; - - this.cmbHoleCount.Text = m.HoleCount.ToString(); - - this.txtBatchId.Text = m.BatchId; - this.numTargetCount.Value = m.TargetCount; - this.toolTip1.SetToolTip(this.numTargetCount,"已完成:"+m.CompleteCount); - - this.numTensionBaseValue.Value = (decimal)m.TensionBaseValue; - this.numTensionUpFloatValue.Value = (decimal)m.TensionUpFloatValue; - this.numTensionDownFloatValue.Value = (decimal)m.TensionDownFloatValue; - this.numHeightBaseValue.Value = (decimal)m.HeightBaseValue; - this.numHeightUpFloatValue.Value = (decimal)m.HeightUpFloatValue; - this.numHeightDownFloatValue.Value = (decimal)m.HeightDownFloatValue; - this.txtHeightBaseDec.Text = m.HeightBaseDec; - this.numLineWidthBaseValue.Value = (decimal)m.LineWidthBaseValue; - this.numLineWidthUpFloatValue.Value = (decimal)m.LineWidthUpFloatValue; - this.numLineWidthDownFloatValue.Value = (decimal)m.LineWidthDownFloatValue; - this.numPTBaseValue.Value = (decimal)m.PTBaseValue; - this.numPTUpFloatValue.Value = (decimal)m.PTUpFloatValue; - this.numPTDownFloatValue.Value = (decimal)m.PTDownFloatValue; - //if (m.Type > 0) - //{ - // this.txtCode.Enabled = false; - // this.txtName.Width = this.txtCode.Width; - // this.txtSpec.Enabled = false; - //} - - this.tsbtnAddFile.Enabled = true; - this.tsbtnNewBatchId.Enabled = true; - this.dgvBatchList.DataSource = new BindingSource(m.BatchHistoryList, null); - //2023-11-2 mark - this.cbMarkType.SelectedIndex = m.MarkType; - this.numMarkSize.Value = (decimal)m.MarkSize; - - Models.Attachment attachmentFile = model.AttachmentList.FirstOrDefault(x => x.Type == 0); - if (attachmentFile!=null) - { - this.btnOpenFile.Text = attachmentFile.Name; +using System.Windows.Forms; + +namespace ProductionControl +{ + public partial class FrmProductInfo : Form + { + Service.ClassesService svcClasses = new Service.ClassesService(); + Service.ProductService service = new Service.ProductService(); + Models.Product model = new Models.Product(); + + string MapPath = ""; + public FrmProductInfo(Models.Product m=null) + { + InitializeComponent(); + this.dgvBatchList.AutoGenerateColumns = false; + checkCustomerVer(); + //this.cbMarkType.SelectedIndex = -1; + if (m!=null) + { + model = m; + this.Text += $" (ID:{m.Id})"; + this.txtCode.Text = m.Code; + this.txtName.Text = m.Name; + this.txtSpec.Text = m.Spec; + + this.cmbHoleCount.Text = m.HoleCount.ToString(); + + this.txtBatchId.Text = m.BatchId; + this.numTargetCount.Value = m.TargetCount; + this.toolTip1.SetToolTip(this.numTargetCount,"已完成:"+m.CompleteCount); + + this.numTensionBaseValue.Value = (decimal)m.TensionBaseValue; + this.numTensionUpFloatValue.Value = (decimal)m.TensionUpFloatValue; + this.numTensionDownFloatValue.Value = (decimal)m.TensionDownFloatValue; + this.numHeightBaseValue.Value = (decimal)m.HeightBaseValue; + this.numHeightUpFloatValue.Value = (decimal)m.HeightUpFloatValue; + this.numHeightDownFloatValue.Value = (decimal)m.HeightDownFloatValue; + this.txtHeightBaseDec.Text = m.HeightBaseDec; + this.numLineWidthBaseValue.Value = (decimal)m.LineWidthBaseValue; + this.numLineWidthUpFloatValue.Value = (decimal)m.LineWidthUpFloatValue; + this.numLineWidthDownFloatValue.Value = (decimal)m.LineWidthDownFloatValue; + this.numPTBaseValue.Value = (decimal)m.PTBaseValue; + this.numPTUpFloatValue.Value = (decimal)m.PTUpFloatValue; + this.numPTDownFloatValue.Value = (decimal)m.PTDownFloatValue; + //if (m.Type > 0) + //{ + // this.txtCode.Enabled = false; + // this.txtName.Width = this.txtCode.Width; + // this.txtSpec.Enabled = false; + //} + + this.tsbtnAddFile.Enabled = true; + this.tsbtnNewBatchId.Enabled = true; + this.dgvBatchList.DataSource = new BindingSource(m.BatchHistoryList, null); + //2023-11-2 mark + this.cbMarkType.SelectedIndex = m.MarkType; + this.numMarkSize.Value = (decimal)m.MarkSize; + //2023-12-18 主栅 + this.cbMarkDisturb.Checked = (m.MarkDisturb == 1); + this.cbMainGrid.Checked = (m.MainGrid == 1); + + Models.Attachment attachmentFile = model.AttachmentList.FirstOrDefault(x => x.Type == 0); + if (attachmentFile!=null) + { + this.btnOpenFile.Text = attachmentFile.Name; this.btnOpenFile.Visible = true; //为兼容老版本,发现图纸图片地址为空,检索图片地址 if (string.IsNullOrEmpty(model.MapPath)) @@ -84,351 +87,362 @@ namespace ProductionControl string targFilePath = Application.StartupPath + $"\\Attachment\\product\\{model.Id}\\"; targFilePath += attachmentFile.Name; model.MapPath = targFilePath.Substring(0, targFilePath.Length - 4) + ".bmp"; - } - } - - } - - initDataView(); - } - private void FrmProductInfo_Load(object sender, EventArgs e) - { - //this.cbMarkType.SelectedIndex = -1; - } - private void checkCustomerVer() - { - if (Config.CustomerVer != "B") - { - tabControl1.TabPages.RemoveAt(3); - } - } - private void initDataView() - { - //显示的数据 - this.cmbClasses.DisplayMember = "Name"; - this.cmbClasses.ValueMember = "Id"; - var list = svcClasses.GetListNav(0); - this.cmbClasses.DataSource = list; - if (model.ClassesId>0) - this.cmbClasses.SelectedValue = model.ClassesId; - - - //缺陷项 - var lstDefect = Utils.EnumUtil.GetArrayList(); - foreach(DictionaryEntry item in lstDefect) - { - DefectCountOfSizeControl userCon = new DefectCountOfSizeControl(); - userCon.Code = item.Value.ToString(); - userCon.Title = ((DefectNameEnum)(int)item.Key).ToString(); - if (model != null && model.QualifiedCriterionList!=null) - { - var qalifiedItem = model.QualifiedCriterionList.FirstOrDefault(m => m.DefectCode == userCon.Code); - if(qalifiedItem != null) - { - userCon.Checked = true; - userCon.SizeValue = (decimal)qalifiedItem.Size; - userCon.MaxDefectCount = qalifiedItem.MaxDefectCount; - } - } - - this.flpQualifiedPannel.Controls.Add(userCon); - } - - //模型文件 - string strDefectModelFile = Application.StartupPath + @"\onnxFiles\"; - if(!Directory.Exists(strDefectModelFile)) - Directory.CreateDirectory(strDefectModelFile); - string[] onnxFiles=Directory.GetFiles(strDefectModelFile,"*.onnx"); - string onlyName; - foreach (string onnxFile in onnxFiles) - { - onlyName = Path.GetFileName(onnxFile); - cmbDefectModelFile.Items.Add(onlyName); - if (!string.IsNullOrWhiteSpace(model.DefectModelFile) && onlyName.ToLower()== model.DefectModelFile.ToLower()) - this.cmbDefectModelFile.SelectedItem = model.DefectModelFile; - } - } - private void btnSave_Click(object sender, EventArgs e) - { - try - { - string szCode = this.txtCode.Text.Trim(); - string szName = this.txtName.Text.Trim(); - string szSpec = this.txtSpec.Text.Trim(); - string szHoleCount = this.cmbHoleCount.Text.Trim(); - string szBatchId = this.txtBatchId.Text.Trim(); - int liTargetCount = (int)this.numTargetCount.Value; - string szHeightBaseDec=this.txtHeightBaseDec.Text.Trim().Trim(new char[] { ';', ',' }); - if (szCode == "" || szName == "") - throw new Exception("请填写料号和名称!"); - if(this.cmbClasses.SelectedIndex<0) - throw new Exception("请选择产品类型!"); - if (szHoleCount==""||! Util.IsNumber(szHoleCount)) - throw new Exception("请正确填写产品目数!"); - if (this.cmbDefectModelFile.SelectedIndex < 0) - throw new Exception("请选择检测模型文件!"); - - if (this.cbMarkType.SelectedIndex < 0) - throw new Exception("请选择Mark!"); - //if (szBatchId == "")// || liTargetCount < 1 - // throw new Exception("请填写批次号");// 和批次目标数量!"); - if (szHeightBaseDec != "") - { - double num; - string[] szs= szHeightBaseDec.Split(new char[] { ';',','}); - foreach(string s in szs) - { - if (!double.TryParse(s, out num)) - throw new Exception(s+" 非数值!"); - } - } - - model.Code = szCode; - model.Name = szName; - model.Spec = szSpec; - model.ClassesId = (int)this.cmbClasses.SelectedValue; - model.HoleCount = Convert.ToInt32(szHoleCount); - model.DefectModelFile = this.cmbDefectModelFile.Text.Trim(); - - model.TensionBaseValue= (double)this.numTensionBaseValue.Value; - model.TensionUpFloatValue = (double)this.numTensionUpFloatValue.Value; - model.TensionDownFloatValue = (double)this.numTensionDownFloatValue.Value; - model.HeightBaseValue = (double)this.numHeightBaseValue.Value; - model.HeightUpFloatValue = (double)this.numHeightUpFloatValue.Value; - model.HeightDownFloatValue = (double)this.numHeightDownFloatValue.Value; - model.HeightBaseDec = szHeightBaseDec; - model.LineWidthBaseValue = (double)this.numLineWidthBaseValue.Value; - model.LineWidthUpFloatValue = (double)this.numLineWidthUpFloatValue.Value; - model.LineWidthDownFloatValue = (double)this.numLineWidthDownFloatValue.Value; - model.PTBaseValue = (double)this.numPTBaseValue.Value; - model.PTUpFloatValue = (double)this.numPTUpFloatValue.Value; - model.PTDownFloatValue = (double)this.numPTDownFloatValue.Value; - if (model.QualifiedCriterionList == null) - model.QualifiedCriterionList = new List(); - else - model.QualifiedCriterionList.Clear(); - + } + } + + } + + initDataView(); + } + private void FrmProductInfo_Load(object sender, EventArgs e) + { + //this.cbMarkType.SelectedIndex = -1; + } + private void checkCustomerVer() + { + if (Config.CustomerVer != "B") + { + tabControl1.TabPages.RemoveAt(3); + } + } + private void initDataView() + { + //显示的数据 + this.cmbClasses.DisplayMember = "Name"; + this.cmbClasses.ValueMember = "Id"; + var list = svcClasses.GetListNav(0); + this.cmbClasses.DataSource = list; + if (model.ClassesId>0) + this.cmbClasses.SelectedValue = model.ClassesId; + + + //缺陷项 + var lstDefect = Utils.EnumUtil.GetArrayList(); + foreach(DictionaryEntry item in lstDefect) + { + DefectCountOfSizeControl userCon = new DefectCountOfSizeControl(); + userCon.Code = item.Value.ToString(); + userCon.Title = ((DefectNameEnum)(int)item.Key).ToString(); + if (model != null && model.QualifiedCriterionList!=null) + { + var qalifiedItem = model.QualifiedCriterionList.FirstOrDefault(m => m.DefectCode == userCon.Code); + if(qalifiedItem != null) + { + userCon.Checked = true; + userCon.SizeValue = (decimal)qalifiedItem.Size; + userCon.MaxDefectCount = qalifiedItem.MaxDefectCount; + } + } + + this.flpQualifiedPannel.Controls.Add(userCon); + } + + //模型文件 + string strDefectModelFile = Application.StartupPath + @"\onnxFiles\"; + if(!Directory.Exists(strDefectModelFile)) + Directory.CreateDirectory(strDefectModelFile); + string[] onnxFiles=Directory.GetFiles(strDefectModelFile,"*.onnx"); + string onlyName; + foreach (string onnxFile in onnxFiles) + { + onlyName = Path.GetFileName(onnxFile); + cmbDefectModelFile.Items.Add(onlyName); + if (!string.IsNullOrWhiteSpace(model.DefectModelFile) && onlyName.ToLower()== model.DefectModelFile.ToLower()) + this.cmbDefectModelFile.SelectedItem = model.DefectModelFile; + } + } + private void btnSave_Click(object sender, EventArgs e) + { + try + { + string szCode = this.txtCode.Text.Trim(); + string szName = this.txtName.Text.Trim(); + string szSpec = this.txtSpec.Text.Trim(); + string szHoleCount = this.cmbHoleCount.Text.Trim(); + string szBatchId = this.txtBatchId.Text.Trim(); + int liTargetCount = (int)this.numTargetCount.Value; + string szHeightBaseDec=this.txtHeightBaseDec.Text.Trim().Trim(new char[] { ';', ',' }); + if (szCode == "" || szName == "") + throw new Exception("请填写料号和名称!"); + if(this.cmbClasses.SelectedIndex<0) + throw new Exception("请选择产品类型!"); + if (szHoleCount==""||! Util.IsNumber(szHoleCount)) + throw new Exception("请正确填写产品目数!"); + if (this.cmbDefectModelFile.SelectedIndex < 0) + throw new Exception("请选择检测模型文件!"); + + if (this.cbMarkType.SelectedIndex < 0) + throw new Exception("请选择Mark!"); + //if (szBatchId == "")// || liTargetCount < 1 + // throw new Exception("请填写批次号");// 和批次目标数量!"); + if (szHeightBaseDec != "") + { + double num; + string[] szs= szHeightBaseDec.Split(new char[] { ';',','}); + foreach(string s in szs) + { + if (!double.TryParse(s, out num)) + throw new Exception(s+" 非数值!"); + } + } + + model.Code = szCode; + model.Name = szName; + model.Spec = szSpec; + model.ClassesId = (int)this.cmbClasses.SelectedValue; + model.HoleCount = Convert.ToInt32(szHoleCount); + model.DefectModelFile = this.cmbDefectModelFile.Text.Trim(); + + model.TensionBaseValue= (double)this.numTensionBaseValue.Value; + model.TensionUpFloatValue = (double)this.numTensionUpFloatValue.Value; + model.TensionDownFloatValue = (double)this.numTensionDownFloatValue.Value; + model.HeightBaseValue = (double)this.numHeightBaseValue.Value; + model.HeightUpFloatValue = (double)this.numHeightUpFloatValue.Value; + model.HeightDownFloatValue = (double)this.numHeightDownFloatValue.Value; + model.HeightBaseDec = szHeightBaseDec; + model.LineWidthBaseValue = (double)this.numLineWidthBaseValue.Value; + model.LineWidthUpFloatValue = (double)this.numLineWidthUpFloatValue.Value; + model.LineWidthDownFloatValue = (double)this.numLineWidthDownFloatValue.Value; + model.PTBaseValue = (double)this.numPTBaseValue.Value; + model.PTUpFloatValue = (double)this.numPTUpFloatValue.Value; + model.PTDownFloatValue = (double)this.numPTDownFloatValue.Value; + if (model.QualifiedCriterionList == null) + model.QualifiedCriterionList = new List(); + else + model.QualifiedCriterionList.Clear(); + if (string.IsNullOrEmpty(model.MapPath)) { model.MapPath = ""; model.GetPointList = ""; - } - - foreach (DefectCountOfSizeControl defectControl in this.flpQualifiedPannel.Controls) - { - if (defectControl.Checked) - { - model.QualifiedCriterionList.Add( - new Models.QualifiedCriterion() - { - DefectCode = defectControl.Code, - Size = (float)defectControl.SizeValue, - MaxDefectCount = (int)defectControl.MaxDefectCount, - ModifyUserCode = Config.loginUser.Code, - CreateUserCode = Config.loginUser.Code - }); - } - } + } + + foreach (DefectCountOfSizeControl defectControl in this.flpQualifiedPannel.Controls) + { + if (defectControl.Checked) + { + model.QualifiedCriterionList.Add( + new Models.QualifiedCriterion() + { + DefectCode = defectControl.Code, + Size = (float)defectControl.SizeValue, + MaxDefectCount = (int)defectControl.MaxDefectCount, + ModifyUserCode = Config.loginUser.Code, + CreateUserCode = Config.loginUser.Code + }); + } + } model.ModifyUserCode = Config.loginUser.Code; //2023-11-2 mark - model.MarkType = this.cbMarkType.SelectedIndex; - model.MarkSize = (double)this.numMarkSize.Value; - - bool result; - if (model.Id == 0) - { - model.BatchId = szBatchId; - model.TargetCount = liTargetCount; - model.CompleteCount = 0; - model.CreateUserCode = Config.loginUser.Code; - result = service.InsertNav(model); - } - else - { - if (model.BatchId != szBatchId && !string.IsNullOrWhiteSpace(model.BatchId)) - { - if (model.CompleteCount m.BatchId == szBatchId) != null) - throw new Exception("当前批次号与历史中所用批次号重复,请重新填写!"); - - model.BatchHistoryList.Add(new Models.BatchHistory() - { - BatchId = model.BatchId, - TargetCount = model.TargetCount, - CompleteCount = model.CompleteCount, - CreateUserCode = Config.loginUser.Code, - ModifyUserCode = Config.loginUser.Code - }); - model.CompleteCount = 0; - } - - model.BatchId = szBatchId; - model.TargetCount = liTargetCount; - result = service.UpdateNav(model); - } - if (!result) - throw new Exception("保存失败!"); - - this.tsbtnAddFile.Enabled = true; - this.tsbtnNewBatchId.Enabled = true; - MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - this.DialogResult = DialogResult.OK; - this.Close(); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void btnCancel_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void tsbtnNewBatchId_Click(object sender, EventArgs e) - { - tabControl1.SelectedIndex = 2; - Application.DoEvents(); - } - - private void btnAddFile_Click(object sender, EventArgs e) - { - try + model.MarkType = this.cbMarkType.SelectedIndex; + model.MarkSize = (double)this.numMarkSize.Value; + //2023-12-18 主栅 + model.MarkDisturb = this.cbMarkDisturb.Checked?1:0; + model.MainGrid = this.cbMainGrid.Checked ? 1 : 0; + + bool result; + if (model.Id == 0) + { + model.BatchId = szBatchId; + model.TargetCount = liTargetCount; + model.CompleteCount = 0; + model.CreateUserCode = Config.loginUser.Code; + result = service.InsertNav(model); + } + else + { + if (model.BatchId != szBatchId && !string.IsNullOrWhiteSpace(model.BatchId)) + { + if (model.CompleteCount m.BatchId == szBatchId) != null) + throw new Exception("当前批次号与历史中所用批次号重复,请重新填写!"); + + model.BatchHistoryList.Add(new Models.BatchHistory() + { + BatchId = model.BatchId, + TargetCount = model.TargetCount, + CompleteCount = model.CompleteCount, + CreateUserCode = Config.loginUser.Code, + ModifyUserCode = Config.loginUser.Code + }); + model.CompleteCount = 0; + } + + model.BatchId = szBatchId; + model.TargetCount = liTargetCount; + result = service.UpdateNav(model); + } + if (!result) + throw new Exception("保存失败!"); + + this.tsbtnAddFile.Enabled = true; + this.tsbtnNewBatchId.Enabled = true; + MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + this.DialogResult = DialogResult.OK; + this.Close(); + } + catch (Exception ex) { - if (this.cbMarkType.SelectedIndex < 0) - throw new Exception("请选择Mark!"); - //.dwg /.dxf /.dws /.dwt - string filePath = FileUtil.selectFile("gbx,gbr文件|*.gb?"); - if (string.IsNullOrWhiteSpace(filePath)) - return; - - string fileName=Path.GetFileName(filePath); - string fileExtend=Path.GetExtension(filePath); - string fileOnlyName = fileName.Substring(0, fileName.Length - fileExtend.Length); - - // - string targFilePath = Application.StartupPath + $"\\Attachment\\product\\{model.Id}\\"; - if (!Directory.Exists(targFilePath)) - Directory.CreateDirectory(targFilePath); - else//删除原文件 - FileUtil.delFilesInFolder(targFilePath); - - targFilePath += fileName; - //File.Copy(res.file_path, defectFileName + ".bmp", true); - bool result = API.CopyFile(filePath, targFilePath, false);//更快 //false-覆盖 - if (!result) - throw new Exception("移动文件失败!"); - - //后台线程转BMP与JPG - string tempClass = this.cmbClasses.Text; - int tempIndex = this.cbMarkType.SelectedIndex; - double tempValue = (double)this.numMarkSize.Value; - Task.Run(() => - { - Yolo5.Yolo_Class yolo = new Yolo5.Yolo_Class(); + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void btnCancel_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void tsbtnNewBatchId_Click(object sender, EventArgs e) + { + tabControl1.SelectedIndex = 2; + Application.DoEvents(); + } + + private void btnAddFile_Click(object sender, EventArgs e) + { + try + { + if (this.cbMarkType.SelectedIndex < 0) + throw new Exception("请选择Mark!"); + //.dwg /.dxf /.dws /.dwt + string filePath = FileUtil.selectFile("gbx,gbr文件|*.gb?"); + if (string.IsNullOrWhiteSpace(filePath)) + return; + + string fileName=Path.GetFileName(filePath); + string fileExtend=Path.GetExtension(filePath); + string fileOnlyName = fileName.Substring(0, fileName.Length - fileExtend.Length); + + // + string targFilePath = Application.StartupPath + $"\\Attachment\\product\\{model.Id}\\"; + if (!Directory.Exists(targFilePath)) + Directory.CreateDirectory(targFilePath); + else//删除原文件 + FileUtil.delFilesInFolder(targFilePath); + + targFilePath += fileName; + //File.Copy(res.file_path, defectFileName + ".bmp", true); + bool result = API.CopyFile(filePath, targFilePath, false);//更快 //false-覆盖 + if (!result) + throw new Exception("移动文件失败!"); + + //后台线程转BMP与JPG + string tempClass = this.cmbClasses.Text; + int tempIndex = this.cbMarkType.SelectedIndex; + double tempValue = (double)this.numMarkSize.Value; + //2023-12-18 + int tMarkDistrub = this.cbMarkDisturb.Checked ? 1 : 0; + int tMainGrid = this.cbMainGrid.Checked ? 1 : 0; + + Task.Run(() => + { + Yolo5.Yolo_Class yolo = new Yolo5.Yolo_Class(); string bmpPath = targFilePath.Substring(0, targFilePath.Length - 4) + ".bmp"; //2023-11-3 mark - - //yolo.gerber2image(targFilePath, bmpPath); - double[] markParam = new double[4]; - if(tempClass.Contains("乳剂")) - markParam[0] = 2; - else if (tempClass.Contains("PI")) - markParam[0] = 1; - else - markParam[0] = 0; + + //yolo.gerber2image(targFilePath, bmpPath); + double[] markParam = new double[6]; + if(tempClass.Contains("乳剂")) + markParam[0] = 2; + else if (tempClass.Contains("PI")) + markParam[0] = 1; + else + markParam[0] = 0; if (tempIndex == 0) { //默认情况 实心圆,0.5mm markParam[1] = 2; markParam[2] = 0.5; markParam[3] = 1; - } + markParam[4] = 0; + markParam[5] = 0; + } else { markParam[1] = tempIndex - 1; markParam[2] = tempValue; markParam[3] = tempIndex == 1 ? 0 : 1; - } - yolo.gerber2image(targFilePath, bmpPath, markParam); - - //换背景JPG - Mat mat = Cv2.ImRead(bmpPath); - Cv2.CvtColor(mat, mat, ColorConversionCodes.RGB2GRAY);//转灰度图 - for (int i = 0; i < mat.Height; i++) - { - for (int j = 0; j < mat.Width; j++) - { - if (mat.At(i, j) == 255)//白色 - mat.Set(i, j, 0); - else - mat.Set(i, j, 255); - } - } - model.MapPath = bmpPath; - //灰转彩 - //Cv2.CvtColor(mat, mat, ColorConversionCodes.GRAY2RGB); - //for (int i = 0; i < mat.Height; i++) - //{ - // for (int j = 0; j < mat.Width; j++) - // { - // if (mat.At(i, j) == 255)//白色 - // mat.Set(i, j, 0); //黄色 - // } - //} - bmpPath = targFilePath.Substring(0, targFilePath.Length - 4) + ".jpg"; - //model.MapPath = bmpPath; - OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat).Save(bmpPath, ImageFormat.Jpeg); - });//不能加.Start(); - - Models.Attachment attachmentFile = model.AttachmentList.FirstOrDefault(m => m.Type == 0); - if (attachmentFile!=null) - { - attachmentFile.Type = 0;//图纸 - attachmentFile.NameTimestamp= $"{model.Id}\\{fileOnlyName}"; - attachmentFile.Name = fileName; - attachmentFile.ExtendName = fileExtend; - } - else - { - model.AttachmentList.Add(new Models.Attachment() - { - TBName = "product", - Type = 0, - NameTimestamp = $"{model.Id}\\{fileOnlyName}", - Name = fileName, - ExtendName = fileExtend, - CreateUserCode = Config.loginUser.Code, - ModifyUserCode = Config.loginUser.Code - }); - } - if (!service.UpdateNav(model)) - throw new Exception("保存文件失败!"); - - model=service.GetModelNav(model.Code); - this.btnOpenFile.Text = fileName; - this.btnOpenFile.Visible = true; - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - - } - - - private void btnOpenFile_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) - { - Models.Attachment attachmentFile = model.AttachmentList.FirstOrDefault(m => m.Type == 0); - if (attachmentFile == null ) - MessageBox.Show("还未上传!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); - string filePath = Application.StartupPath + $"\\Attachment\\product\\{model.Id}\\" + attachmentFile.NameTimestamp + attachmentFile.ExtendName; - if(File.Exists(filePath)) - Process.Start(filePath); + markParam[4] = tMarkDistrub; + markParam[5] = tMainGrid; + } + yolo.gerber2image(targFilePath, bmpPath, markParam); + + //换背景JPG + Mat mat = Cv2.ImRead(bmpPath); + Cv2.CvtColor(mat, mat, ColorConversionCodes.RGB2GRAY);//转灰度图 + for (int i = 0; i < mat.Height; i++) + { + for (int j = 0; j < mat.Width; j++) + { + if (mat.At(i, j) == 255)//白色 + mat.Set(i, j, 0); + else + mat.Set(i, j, 255); + } + } + model.MapPath = bmpPath; + //灰转彩 + //Cv2.CvtColor(mat, mat, ColorConversionCodes.GRAY2RGB); + //for (int i = 0; i < mat.Height; i++) + //{ + // for (int j = 0; j < mat.Width; j++) + // { + // if (mat.At(i, j) == 255)//白色 + // mat.Set(i, j, 0); //黄色 + // } + //} + bmpPath = targFilePath.Substring(0, targFilePath.Length - 4) + ".jpg"; + //model.MapPath = bmpPath; + OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat).Save(bmpPath, ImageFormat.Jpeg); + });//不能加.Start(); + + Models.Attachment attachmentFile = model.AttachmentList.FirstOrDefault(m => m.Type == 0); + if (attachmentFile!=null) + { + attachmentFile.Type = 0;//图纸 + attachmentFile.NameTimestamp= $"{model.Id}\\{fileOnlyName}"; + attachmentFile.Name = fileName; + attachmentFile.ExtendName = fileExtend; + } + else + { + model.AttachmentList.Add(new Models.Attachment() + { + TBName = "product", + Type = 0, + NameTimestamp = $"{model.Id}\\{fileOnlyName}", + Name = fileName, + ExtendName = fileExtend, + CreateUserCode = Config.loginUser.Code, + ModifyUserCode = Config.loginUser.Code + }); + } + if (!service.UpdateNav(model)) + throw new Exception("保存文件失败!"); + + model=service.GetModelNav(model.Code); + this.btnOpenFile.Text = fileName; + this.btnOpenFile.Visible = true; + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + + } + + + private void btnOpenFile_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) + { + Models.Attachment attachmentFile = model.AttachmentList.FirstOrDefault(m => m.Type == 0); + if (attachmentFile == null ) + MessageBox.Show("还未上传!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error); + string filePath = Application.StartupPath + $"\\Attachment\\product\\{model.Id}\\" + attachmentFile.NameTimestamp + attachmentFile.ExtendName; + if(File.Exists(filePath)) + Process.Start(filePath); } private void tbtnGetPos_Click(object sender, EventArgs e) @@ -464,5 +478,5 @@ namespace ProductionControl model = service.GetModelNav(model.Code); } - } -} + } +} diff --git a/halftoneproject-master/Code/FrmProductInfo.resx b/halftoneproject-master/Code/FrmProductInfo.resx index 3551361..ce2b9fd 100644 --- a/halftoneproject-master/Code/FrmProductInfo.resx +++ b/halftoneproject-master/Code/FrmProductInfo.resx @@ -127,16 +127,16 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIgSURBVFhH7ZdPaxNBGMbfIBQFpeAXEBV7KfTWFsU/FzER - es2hlHabnZndeVc9BL+BN2kvLX4Aa4sWCn4Bb9Ieq4Ueeuyt9NwiUcQ/7wyTzY6ZJDubRQj0gR+bzMz7 - 7JPZdzcJXMihCkTJQ6JWGC6rwJNJ4+ehen0MWPwJBP4pBY6vjHNOCZzuMhmex8Y9h7h8kBYyPKZP8A5E - vOmP3IAQj7TPMp5AFI2bMwxQlNxPA3B8a0aLicvXqZeQO2Z0gLIBhHxvRotJyPWOl/YLzEwfZQMw/GBG - 84thg3Yu0q85rlkB5vEbhMkNPddTwwRoNq9Q3W9dq8RxNfVqE8Z7NFPR804NEyAMr1HdGdHS77lcSb0s - 5Es975TVA7hlRvMpSa5Cbe6XrlWymtDio553yg7QZ2EP6dvWNK/ANxmvDn131g6gtvOemfETwymqPc14 - dfAIoFBNdUh8oQfM18HQOo4HEAQ/TX03ngHKZzQDBMF5Idp3RRavAMpEyKfA2PVCxPEd8tm1PP12gBpr - WAlMLE/PS/CDuvoFiGTWGxbPkF8t/VpuM5pNWCaeAVp0CZaAP5vQDaWOeVHro+guMLlvef7/JpRoeXrv - gJCLIMRtaOAtffwXNe6CP79J9fQjVz+icwbI/ii1Ud8JfrgeQhq5bc7mkLp1nEVl0i9AEFymRZ+7i0pi - YeE77XLVnK2H6vVLtPgR9YP7b1dRBD7RfXEhSwB/AekDZZ13nHnPAAAAAElFTkSuQmCC + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIeSURBVFhH7ZfLShxBFIaPCJKAIuQFghHdCO5MSFCzES/Z + zyKIduyq6q7TxoXkDdyJbhQfwEswgYAv4E506QVcZJmduE4IJoRcThU1PV2ZmpmunkYQ/OGjZ6rq/P1P + 9emeGbiXQx0QJePEdGG4nAKeDBk/D1UqXcDiQxD4txQ4rhjnnBI4UmfSPhPGPYe4HEsLGX6hT7ALIt7z + R+5AiJ+1zxu8gijqNWdooSgZTQNw3DajxcTlauol5Ccz2kLZAELum9FiEnKz5qX9AjPTRNkADD+Y0fxi + uEA7F+nXHDesAK/xO4TJYz3XUO0EWF5+SHV/dK0Sx/XUq0oYn9BMh553qp0AYdhDdV+JG/2ey7XUy0K+ + 0/NOWT2A781oPiVJN0y++q1rlawmtDjQ807ZAZosbCB925rmFbiV8arRdGftAGo7X5gZPzEcptrrjFcN + jwAK1VSXxBk9YM5bQ+s4XkAQ/DL19XgGKJ+7GSAIvhWieldk8QqgTIScAcYeFSKOB8jn2PL02wFqrHYl + MLE8PS/BT+rqJRDJM29Y/JT8ptOv5Sp3swnLxDPADV2CeeCLg7qh1DEvan0UPQcmTy3P229CiZan9w4I + OQdC9MMCPtHH/1HjLvjbPqqnH7n6EZ0zQPZHqY36TvDD9RDSyI/mbA6pW8dZVCbNAgTBA1p0VF9UErOz + P2iXp8zZGqhS6aTFL6kf3H+7iiJwUvfFvSwB/AOYeWWRyPCtmgAAAABJRU5ErkJggg== @@ -210,9 +210,6 @@ C6TPxxQLXgOFmryc2pWs67ruL9BDjecFstIGAAAAAElFTkSuQmCC - - 166, 17 - True diff --git a/halftoneproject-master/Code/FrmProductList.Designer.cs b/halftoneproject-master/Code/FrmProductList.Designer.cs index 68e7dba..c8de0b9 100644 --- a/halftoneproject-master/Code/FrmProductList.Designer.cs +++ b/halftoneproject-master/Code/FrmProductList.Designer.cs @@ -44,6 +44,8 @@ this.tsbtnAdd = new System.Windows.Forms.ToolStripButton(); this.tsbtnDel = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbtnClone = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.tsbtnSetting = new System.Windows.Forms.ToolStripButton(); this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.tsbtnClasses = new System.Windows.Forms.ToolStripButton(); @@ -67,8 +69,6 @@ this.colReviseStepName = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colModifyCode = new System.Windows.Forms.DataGridViewTextBoxColumn(); this.colModifyTime = new System.Windows.Forms.DataGridViewTextBoxColumn(); - this.tsbtnClone = new System.Windows.Forms.ToolStripButton(); - this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); this.toolStrip1.SuspendLayout(); this.statusStrip1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); @@ -143,6 +143,25 @@ this.toolStripSeparator1.Name = "toolStripSeparator1"; this.toolStripSeparator1.Size = new System.Drawing.Size(6, 56); // + // tsbtnClone + // + this.tsbtnClone.Image = ((System.Drawing.Image)(resources.GetObject("tsbtnClone.Image"))); + this.tsbtnClone.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.tsbtnClone.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbtnClone.Name = "tsbtnClone"; + this.tsbtnClone.Size = new System.Drawing.Size(52, 53); + this.tsbtnClone.Text = " 克隆 "; + this.tsbtnClone.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; + this.tsbtnClone.ToolTipText = "克隆当前流程"; + this.tsbtnClone.Visible = false; + this.tsbtnClone.Click += new System.EventHandler(this.tsbtnClone_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(6, 56); + this.toolStripSeparator5.Visible = false; + // // tsbtnSetting // this.tsbtnSetting.Image = ((System.Drawing.Image)(resources.GetObject("tsbtnSetting.Image"))); @@ -264,7 +283,7 @@ this.dataGridView1.DefaultCellStyle = dataGridViewCellStyle8; this.dataGridView1.Dock = System.Windows.Forms.DockStyle.Fill; this.dataGridView1.Location = new System.Drawing.Point(0, 56); - this.dataGridView1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.dataGridView1.Margin = new System.Windows.Forms.Padding(2); this.dataGridView1.MultiSelect = false; this.dataGridView1.Name = "dataGridView1"; this.dataGridView1.ReadOnly = true; @@ -408,23 +427,6 @@ this.colModifyTime.ReadOnly = true; this.colModifyTime.Width = 150; // - // tsbtnClone - // - this.tsbtnClone.Image = ((System.Drawing.Image)(resources.GetObject("tsbtnClone.Image"))); - this.tsbtnClone.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; - this.tsbtnClone.ImageTransparentColor = System.Drawing.Color.Magenta; - this.tsbtnClone.Name = "tsbtnClone"; - this.tsbtnClone.Size = new System.Drawing.Size(52, 53); - this.tsbtnClone.Text = " 克隆 "; - this.tsbtnClone.TextImageRelation = System.Windows.Forms.TextImageRelation.ImageAboveText; - this.tsbtnClone.ToolTipText = "克隆当前流程"; - this.tsbtnClone.Click += new System.EventHandler(this.tsbtnClone_Click); - // - // toolStripSeparator5 - // - this.toolStripSeparator5.Name = "toolStripSeparator5"; - this.toolStripSeparator5.Size = new System.Drawing.Size(6, 56); - // // FrmProductList // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); @@ -434,7 +436,7 @@ this.Controls.Add(this.statusStrip1); this.Controls.Add(this.toolStrip1); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); - this.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2); + this.Margin = new System.Windows.Forms.Padding(2); this.Name = "FrmProductList"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; diff --git a/halftoneproject-master/Code/FrmProductList.cs b/halftoneproject-master/Code/FrmProductList.cs index af0c2be..5863ee3 100644 --- a/halftoneproject-master/Code/FrmProductList.cs +++ b/halftoneproject-master/Code/FrmProductList.cs @@ -1,186 +1,186 @@ -using Models; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace ProductionControl -{ - public partial class FrmProductList : Form - { - Service.ProductService service = new Service.ProductService(); - public Models.Product Product { get; private set; } - public FrmProductList(bool isProductRevise=false) - { - InitializeComponent(); - this.tsbtnAdd.Enabled=this.tsbtnDel.Enabled =this.tsbtnSetting.Enabled= !isProductRevise; - this.tsbtnRevise.Visible=isProductRevise; - if (isProductRevise) - { - this.Text = "产品基准厚度校正"; - } - #region dataGridView设置 - dataGridView1.AutoGenerateColumns = false;//自动创建列 - dataGridView1.AllowUserToAddRows = dataGridView1.AllowUserToDeleteRows = false;//用户添加删除行 - dataGridView1.AllowUserToResizeRows = true;//用户调整行大小 - //dataGridView1.AllowUserToResizeColumns = false;//用户调整列大小 - //显示行号与列宽度自动调整 - dataGridView1.RowHeadersVisible = true; - dataGridView1.RowHeadersWidth = 50; - dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变 - dataGridView1.RowPostPaint += (sender, e) =>//序号列头 - { - Utils.Util.showRowNum_onDataGrid_RowPostPaint(this.dataGridView1, sender, e); - }; - dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; - //for (int i = 0; i < dataGridView1.Columns.Count; i++)//禁止点击列头排序 - // dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; - - //行列交叉处标题 - //if (dataGridView1.RowHeadersVisible) dataGridView1.TopLeftHeaderCell.Value = "SPH/CYL"; - #endregion - } - private void initDataView(int selIndex = -1) - { - Product = null; - var list = service.GetListNav(); - tsslCount.Text = $"共 {list.Count} 条记录"; - int liIndex = 0; - if (selIndex > 0) liIndex = selIndex; - else if (this.dataGridView1.CurrentRow!=null) - liIndex=this.dataGridView1.CurrentRow.Index; - dataGridView1.DataSource = new BindingSource(list, null); - if (dataGridView1.Rows.Count > liIndex) - dataGridView1.CurrentCell = dataGridView1[1, liIndex]; - } - private void FrmProductList_Load(object sender, EventArgs e) - { - initDataView(); - } - private void tsbtnRefresh_Click(object sender, EventArgs e) - { - initDataView(); - } - private void tsbtnAdd_Click(object sender, EventArgs e) - { - FrmProductInfo frm = new FrmProductInfo(); - frm.ShowDialog(); - initDataView(); - } - - private void tsbtnDel_Click(object sender, EventArgs e) - { - try - { - if (this.dataGridView1.CurrentRow == null) - return; - - if (MessageBox.Show($"确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) - { - var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; - int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 - if (!service.DelNav(list[liIndex])) - throw new Exception("删除失败!"); - MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); - //initDataView(); - this.dataGridView1.Rows.RemoveAt(liIndex); - if(this.dataGridView1.Rows.Count == 0) - initDataView(); - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void tsbtnSetting_Click(object sender, EventArgs e) - { - if(this.dataGridView1.CurrentRow == null) return; - - var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; - int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 - FrmProductStep frm = new FrmProductStep(list[liIndex]); - frm.ShowDialog(); - initDataView(); - } - private void tsbtnRevise_Click(object sender, EventArgs e) - { - try - { - if (this.dataGridView1.CurrentRow == null) - throw new Exception("请选择要校正的产品!"); - - var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; - int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 - if (list[liIndex].ReviseStepId==null || list[liIndex].ReviseStepId<1) - throw new Exception("此产品未设置校正流程!"); - - if (MessageBox.Show($"确认执行校正产品流程?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) - { - Product=list[liIndex]; - this.DialogResult = DialogResult.Yes; - this.Close(); - } - } - catch (Exception ex) - { - MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - private void tsbtnClose_Click(object sender, EventArgs e) - { - this.Close(); - } - - private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) - { - if (!this.tsbtnAdd.Enabled) return; - var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; - int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 - FrmProductInfo frm = new FrmProductInfo(list[liIndex]); - frm.ShowDialog(this); - initDataView(); - } - - private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) - { - var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; - for (int i = 0; i < dataGridView1.Rows.Count; i++) - { - if (list[i].ClassesInfo != null) - dataGridView1.Rows[i].Cells["colClasses"].Value = list[i].ClassesInfo.Name; - if (list[i].StepInfo != null) - dataGridView1.Rows[i].Cells["colStepName"].Value = list[i].StepInfo.Name; - if (list[i].ReviseStepInfo != null) - dataGridView1.Rows[i].Cells["colReviseStepName"].Value = list[i].ReviseStepInfo.Name; - - } - } - - private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) - { - - } - - private void tsbtnClasses_Click(object sender, EventArgs e) - { - FrmClassesSingle frm = new FrmClassesSingle(0, "产品类型管理"); - if(frm.ShowDialog() == DialogResult.OK) - { - this.initDataView(); - } - } - - - private void tsbtnDefectClasses_Click(object sender, EventArgs e) - { - +using Models; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace ProductionControl +{ + public partial class FrmProductList : Form + { + Service.ProductService service = new Service.ProductService(); + public Models.Product Product { get; private set; } + public FrmProductList(bool isProductRevise=false) + { + InitializeComponent(); + this.tsbtnAdd.Enabled=this.tsbtnDel.Enabled =this.tsbtnSetting.Enabled= !isProductRevise; + this.tsbtnRevise.Visible=isProductRevise; + if (isProductRevise) + { + this.Text = "产品基准厚度校正"; + } + #region dataGridView设置 + dataGridView1.AutoGenerateColumns = false;//自动创建列 + dataGridView1.AllowUserToAddRows = dataGridView1.AllowUserToDeleteRows = false;//用户添加删除行 + dataGridView1.AllowUserToResizeRows = true;//用户调整行大小 + //dataGridView1.AllowUserToResizeColumns = false;//用户调整列大小 + //显示行号与列宽度自动调整 + dataGridView1.RowHeadersVisible = true; + dataGridView1.RowHeadersWidth = 50; + dataGridView1.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变 + dataGridView1.RowPostPaint += (sender, e) =>//序号列头 + { + Utils.Util.showRowNum_onDataGrid_RowPostPaint(this.dataGridView1, sender, e); + }; + dataGridView1.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; + //for (int i = 0; i < dataGridView1.Columns.Count; i++)//禁止点击列头排序 + // dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; + + //行列交叉处标题 + //if (dataGridView1.RowHeadersVisible) dataGridView1.TopLeftHeaderCell.Value = "SPH/CYL"; + #endregion + } + private void initDataView(int selIndex = -1) + { + Product = null; + var list = service.GetListNav(); + tsslCount.Text = $"共 {list.Count} 条记录"; + int liIndex = 0; + if (selIndex > 0) liIndex = selIndex; + else if (this.dataGridView1.CurrentRow!=null) + liIndex=this.dataGridView1.CurrentRow.Index; + dataGridView1.DataSource = new BindingSource(list, null); + if (dataGridView1.Rows.Count > liIndex) + dataGridView1.CurrentCell = dataGridView1[1, liIndex]; + } + private void FrmProductList_Load(object sender, EventArgs e) + { + initDataView(); + } + private void tsbtnRefresh_Click(object sender, EventArgs e) + { + initDataView(); + } + private void tsbtnAdd_Click(object sender, EventArgs e) + { + FrmProductInfo frm = new FrmProductInfo(); + frm.ShowDialog(); + initDataView(); + } + + private void tsbtnDel_Click(object sender, EventArgs e) + { + try + { + if (this.dataGridView1.CurrentRow == null) + return; + + if (MessageBox.Show($"确认删除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; + int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 + if (!service.DelNav(list[liIndex])) + throw new Exception("删除失败!"); + MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); + //initDataView(); + this.dataGridView1.Rows.RemoveAt(liIndex); + if(this.dataGridView1.Rows.Count == 0) + initDataView(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + + private void tsbtnSetting_Click(object sender, EventArgs e) + { + if(this.dataGridView1.CurrentRow == null) return; + + var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; + int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 + FrmProductStep frm = new FrmProductStep(list[liIndex]); + frm.ShowDialog(); + initDataView(); + } + private void tsbtnRevise_Click(object sender, EventArgs e) + { + try + { + if (this.dataGridView1.CurrentRow == null) + throw new Exception("请选择要校正的产品!"); + + var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; + int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 + if (list[liIndex].ReviseStepId==null || list[liIndex].ReviseStepId<1) + throw new Exception("此产品未设置校正流程!"); + + if (MessageBox.Show($"确认执行校正产品流程?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) + { + Product=list[liIndex]; + this.DialogResult = DialogResult.Yes; + this.Close(); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + } + private void tsbtnClose_Click(object sender, EventArgs e) + { + this.Close(); + } + + private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) + { + if (!this.tsbtnAdd.Enabled) return; + var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; + int liIndex = this.dataGridView1.CurrentRow.Index;//获取当前选中行的索引 + FrmProductInfo frm = new FrmProductInfo(list[liIndex]); + frm.ShowDialog(this); + initDataView(); + } + + private void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) + { + var list = ((BindingSource)dataGridView1.DataSource).DataSource as List; + for (int i = 0; i < dataGridView1.Rows.Count; i++) + { + if (list[i].ClassesInfo != null) + dataGridView1.Rows[i].Cells["colClasses"].Value = list[i].ClassesInfo.Name; + if (list[i].StepInfo != null) + dataGridView1.Rows[i].Cells["colStepName"].Value = list[i].StepInfo.Name; + if (list[i].ReviseStepInfo != null) + dataGridView1.Rows[i].Cells["colReviseStepName"].Value = list[i].ReviseStepInfo.Name; + + } + } + + private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + + } + + private void tsbtnClasses_Click(object sender, EventArgs e) + { + FrmClassesSingle frm = new FrmClassesSingle(0, "产品类型管理"); + if(frm.ShowDialog() == DialogResult.OK) + { + this.initDataView(); + } + } + + + private void tsbtnDefectClasses_Click(object sender, EventArgs e) + { + } private void tsbtnClone_Click(object sender, EventArgs e) @@ -234,6 +234,8 @@ namespace ProductionControl AssistStepInfo = list[liIndex].AssistStepInfo, ProductAssistProcessList = new List(), + MarkType = list[liIndex].MarkType, + MarkSize = list[liIndex].MarkSize, MapPath = "", GetPointList = "", //OrderList = new List(), @@ -347,5 +349,5 @@ namespace ProductionControl MessageBox.Show(ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - } -} + } +} diff --git a/halftoneproject-master/Code/FrmProductList.resx b/halftoneproject-master/Code/FrmProductList.resx index 94b62ae..bd4f3a9 100644 --- a/halftoneproject-master/Code/FrmProductList.resx +++ b/halftoneproject-master/Code/FrmProductList.resx @@ -124,35 +124,35 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMqSURBVFhH7ZdNSFRRHMVPRYug2klBtKisQAhKKRAECapV - VAtBCHJljjqOg+P4NWZToTBlRuYgY2o5E4YkCIoh2CIIop1tggKhRQVtjIjog7ofHYd/oM5742jOIvDA - j//7OP97rnfue85gXf+lzCBy7BAKTByFyZrAHrmVPdk4inQcPSqBDzYBuxRe/6QTGDYPcEZaUqSHMCGH - mYsD5jF4nBOwmaLieMmVqZAhkvp7T04zk7mHUjWA7/Y+m1fJ/DhLzzOSHUQzsWuNDJ9e5i5KbD8bsoBE - uMv0I1f1cdn72JAFJMZdOoph20uzoHpgFp7/KxLjLBvFYWKXQ0X5yEUxTfrImLrDR9PB54REOUt347bt - pjEN9IyZbuRIS1KmC1t4fdrJvxRpcZa6iTf2Fo0u6C5MijVFqhNfnXqWIvZUcXm22k6aXFARbswb2Cn2 - RXLyuyEtqTIdyLMRmlzQEUyJdZF4fcLJ78S8V9pSZdpxzHbQ6IJux4BYsyMT5gpcY5gL+qrzCqyZbJh7 - 4ArDXFBh7oGw8x5wE/+o7eY6tiWrHNtH2CS3U6VaMWvbGOiCbsO4WB3FCe41bShkWL65hEPzq8p6kOzn - ca5pxT56Noo9VboFPTbEsDToEEZNy+L3gK3AZhPCWV6vZy2zLThnmnGK58WsheSoacIR1lxpcZZtRoFt - YtAyqCa+CRsxpRvQq5swyvMXrNMkxqDLphE1rGWsJaYBp5OTacBxTmiHRLlL12PEBhm0AlQAcyqIGR3E - BPtjpN0EETT1qGQtY3gpfSf4EtggMe4ydfxvGOCGC3DwDKH/C5klz3QdRnUAMV6PmABCxM8xL7Lulojl - ZWpx3vo5eIYoP74pH96xzuhaPNE+jLDGtB+dxs+PxIdiGTpzsanV+hiQAQz/QT6S18qL57oGjzmJhyRm - argp0+38dDLVuKAq+XF4GZQGen6SOfJWVXMVqvBUezHB8FIZavUyHn4r9mDSVjHMBVWFX8qDz6qCH4MH - rziBhPEiX4ZYG/FZL9IV/F1Qzi8fHgYvgNd+M/g978c44ZPSkj0xZJct5y8ihiVrOQ7IrXWtUMAf5Oh5 - rCbfSUoAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMwSURBVFhH7ZdPSFRRGMVPRYug2klBtKisQAhKKRAECapV + VAtBCHKTOv4fHEdHx8wKJdOMzEHGzHImDEkQFEOwRRBEu9oEBUKLEtoYEdEfunPv7Th8gTrvjaM5i8AD + P77353z3XO+785zBuv5LmUFk2CHkmAhy4zWKPXIrfbIR5OkIelUUszYKuxRe/6yjGDYPcUZaEqSHMCGH + qYsDZjF4nBOwqRKL4DVXplSGiOvvPTlNTeY+CtUAftgHbF4l8+MsPU9JdhCNxK41MnxymbsosANsSAMS + 4S4zgEzVz2XvZ0MakBh36RCGbR/NgroDs/D8X5EYZ9kQDhO7HCrEj1wI06SfjHGSs04+JyTKWboHt20P + jUmgZ8z0IENa4jLd2MLr007+pUiLs9RNvLO3aHRBd2NSrAlSnfjm1LMUsSeKy7PVdtHkgrrOjdmJnWJf + JCe/G9KSKNOOLNtBkwu6A1NiXSRen3DyOzHvlbZEmTYcs+00uqDbcE+s6ZFp5QpcY5gL+qrzCqyZbCv3 + wBWGuaBauQdanfeAm/hHbTc3sC1e5dg+xia5nSjVjBnbwkAXdAvGxeooTnCvaUEuw7LNJRyaX1XWg2Q/ + jzNNM/bRs1HsidJN6LVBhiVBBzFqmha/B2wpNpsgzvJ6HWuRbcI504hTPM9nzSVHTQBHWDOlxVm2ETk2 + wKBlUAG+CRswpevRpwMYjQXwknWahBl02TSgirWItcDU43R8MvU4zgntkCh36TqMWD+DVoDyYS7mxyvt + xwT7w6TN+OE3dShjLWJ4IX0n+BLYIDHuMrX8b+jjhvNx8BSh/yuZifnwXNdiVPsQ5vUO40OQeDlmCetu + iVhepgbnrZeDp4jy4ruqxoeYl6tQg6e6GiOsYe1Fl/HykVQjX4ZOXWxqttUMSAGG/ySfyNtYJV7oKjzh + JB6RsKnipky285PJVOCC8vBxVDIoCfT8InOqDO9jFVyFcjzTlZhgeKEMtXoZD78VezBpyxnmgirHb07g + iyrhY/DgDScQNZXIliHWRvys5+lS/i64yC8fHgYvgNcUJ/CR98Oc8ElpSZ8YsssW8xcRw+K1GAfk1rpW + KOAP8C15gnutFsIAAAAASUVORK5CYII= iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHoSURBVFhH3ZfNSwJBGMaFIIgM3R2/gu5B/0OXDp26eiro - UO6OfRD9S921PyCIopPQKQw6RCvujBqdoy/I5tE3NV0YdxuR+sEDvuO8z/uwustObJi4I1OMizLjt5+M - y7YZwUuU4U1jgsnyZkY1VEYNjKmCGTRuFJWyhI22Kw/U52WT6noihCjRuCHy1Vl7U75ajn9NK8aBN2Zg - Fi31yW4151XCN9sVF7RkHHhjBmbRUh8sIh3j/hUt6cm3ZzoaE3hjhrEAzJVnEJVajAdI7IomRKUW81eA - +x5EpZb/F8Dm8h6iUkvkALnDRtpyxInl+qeDivO7Z2h4HXvRQ+09Igew3cZK9yk2vtBD7T0iBwCJIy+Z - KtQW03uPuW+xgqxDg2vYg73U9oNfBQhC7X2AqNQyiQBTvg2deg2iUovxAEnutyAqtZi/Atxfg6jUYjxA - WCIFWDquz6nbK47vwwg96CWbDqED2EWRT3D5wra9D/VweQ8l1YNeeJBd+AApLlctV57bXFxGEXrhQXZ/ - 9D9gktAB7KJcV7/nDXNFNZJULzzILsp/QGzglYtx7ymK0AsPstMHUImn91qOwwJum0kfTDAj8GACcGxS - Cad0NFNkdlpZtWmih1PMoHHBLOwLhvc608dzeMKbxhCx2BcBm5Yir7kGIwAAAABJRU5ErkJggg== + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHoSURBVFhH3ZdPSwJBGMaFIIgMdUbToHvQd+jSoVNXTwUd + yt2xP0Rfqbv2AYIoOgmdwkOHaMWdUaNz9A+yefRNTRfG3UakfvCA7zjv8z6s7rITGybuqDQXssxF9ZML + 1bYjeMkyvGlMMFnRXNQNlVEDa6pgBo0bRacsYSNz1aH+vGJTXU+EkCUaN0S+Osu21GvK8W9oxTrwxgzM + oqU+2e3mvE74xlx5SUvWgTdmYBYt9cEi0nHhX9OSmXx7pqMxgTdmWAvAXXUOUWnEeoDEnmxCVBqxfwWE + 70FUGvl/AZhQ9xCVRiIHyB01MilHnqZc/2xQcXH3DA2vYy96qL1H5ADMbax2n2LjCz3U3iNyAJA49pLp + Qm0ps/+Y+xYvqDo0uIY92EttP/hVgCD03geISiOTCDDl29Cp1yAqjVgPkBR+C6LSiP0rIPx1iEoj1gOE + JVKA5ZP6nL694vg+jNCDXrLpEDoAK8p8QqgXvuN96IfLeyjpHvTCg+zCB0gLtZZy1QUT8iqK0AsPsvuj + /wGbhA7AimpD/5633JXVSNK98CC7KP8BuYlXLi68pyhCLzzIzhxAJ57eazkOC7htJn0wwYzAgwnAsUkn + nNLRTLO428rqTRM9nGIGjQtm4UByvNfZPp7DE940hojFvgDhTpYe8U0OzAAAAABJRU5ErkJggg== @@ -242,16 +242,16 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIlSURBVFhH7dTLSxtRFAbwgCAU/H+sUBBcCAqV0hIxNaWa - uLKrboqLbtx00yqCVlC0UrEPJokxiVkIgiC0tggirQ0+UTE6jpnQJ4GBgdM55dxwvU5m5ibRhfSDHyS5 - 53z3ruK7NulJ58GLUFofo5XqJZzOF+wuK4XWqhPZyxGtVp7wvF7omddBFq1XlnBKL1igHFRRfkIpzQil - cmArkYv0KlqdX4HaUPJs1G6GaspLd1IzupNnYG/fxMtp1IePCCa0vDhHx/LpSmiGBRwUrEtraPxfumbV - rDhHR3J5OHdqWICJb/4pfj4nrg7QirWj9tnN0LH3PIirhgWYaOZ3Ef87cz+eVQOz6qHdGaJabwnGdsxg - 7AQYZePXBfy5F1Ttns7ottkZPQbm7ZefJfFzbqjeOYHIlhmIZIGZXv/hip8vheqd0zG1aXYoR8C8Wvvu - Gb8nonrntE9mzPb3h8CMr+al8fsM1TundeKb6X93AMzLT7o0fp+heufce7MPvKEPOWliB6J699yd2QPm - +fKpNH6foWr34N/nneld4D1bUj0TdxFVew8+ou31DvD6F09ciTuIKuXjVzZqb09tAe/pwlFJ4iyiqvKD - j2iZyADvSfrgAnEGUUXlwUc0j30F3uPEXpF4hmi1esFHNI2uA+9RbPvcd4ZWqp+bAx9vNA6vgRMavbzg - I24NrYIdGrn84CMaBj8Dj46uLo0jS3X1L1YA0U//cx3i8/0FltEXQTLsVtkAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIlSURBVFhH7dTLSxtRFAbwgCAU/H9soSC4EFy0SEvE1BQ1 + caUrN6WLbrrpRi2CVbAVRemLSWJMYhaFglDoC0FEU1+tVjE6jpmgfRAYGDidU84N1+tkZm4SXYgf/CDJ + Pee7dxXfpUl3Og9ehNL6GK1UL+F0vmB3WSm0Vp3IXo5otfKE5/RC95wOsmi9soRTesEC5aCK8hNKaUYo + lQNbiVykR9Hq/ArUhpJHo3YzVFNeupKa0ZU8AnvbJl5Ooz58RDCh5cU5OpZPZ0IzLOCgYF1aQ+P/0zmj + ZsU5OpJLx+yhYQEmvv63+PmUuDpIK9aO+tBuho69535cNSzARFf/FPG/M/fiWTUwo+7anSGq9ZZgbNMM + xg6AUTK/z+DPvaBq97RHN8z26D4wr5d/lcTPuaF65wQi62YgkgVmeunEFT9fCtU7p21izWxT9oCZWDz2 + jN8TUb1zWse/ma1vd4F5vpCXxu8zVO+c5hcZ0/9mB5iRL7o0fp+heufcffUTeEMfc9LEDkT17rnzcguY + /g+H0vh9hqrdg3+fLdM/gPdkXvVM3EVU7T34iNtT34H3+P2BK3EHUaV8/Eqm9tbkBvAevdsrSZxFVFV+ + 8BHN46vAe5DeOUOcQVRRefARTWMrwOtLbBWJZ4hWqxd8ROPoEvB6Y5unvjO0Uv1cH/x0rWF4EZzQ6PkF + H3FzaAHs0Mj5Bx9x4+lX4NHRxaXh2Xxd/cBnQPTTVS5DfL5/Ma4XNoG0VecAAAAASUVORK5CYII= diff --git a/halftoneproject-master/Code/FrmSysSetting.Designer.cs b/halftoneproject-master/Code/FrmSysSetting.Designer.cs index 12233b5..4c17510 100644 --- a/halftoneproject-master/Code/FrmSysSetting.Designer.cs +++ b/halftoneproject-master/Code/FrmSysSetting.Designer.cs @@ -218,6 +218,7 @@ this.chkSizeBmp_SavePath_AutoClear = new System.Windows.Forms.CheckBox(); this.label43 = new System.Windows.Forms.Label(); this.tabPage9 = new System.Windows.Forms.TabPage(); + this.cbOpenFlawDistribution = new System.Windows.Forms.CheckBox(); this.ckSkipSizeFailed = new System.Windows.Forms.CheckBox(); this.chkSkipSmallAxis = new System.Windows.Forms.CheckBox(); this.chkSkipScannerCC = new System.Windows.Forms.CheckBox(); @@ -237,7 +238,7 @@ this.numHttpPort = new System.Windows.Forms.NumericUpDown(); this.label49 = new System.Windows.Forms.Label(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); - this.cbOpenFlawDistribution = new System.Windows.Forms.CheckBox(); + this.cbOpenAxisXCal = new System.Windows.Forms.CheckBox(); this.toolStrip1.SuspendLayout(); this.groupBox1.SuspendLayout(); this.panel1.SuspendLayout(); @@ -2727,6 +2728,7 @@ // // tabPage9 // + this.tabPage9.Controls.Add(this.cbOpenAxisXCal); this.tabPage9.Controls.Add(this.cbOpenFlawDistribution); this.tabPage9.Controls.Add(this.ckSkipSizeFailed); this.tabPage9.Controls.Add(this.chkSkipSmallAxis); @@ -2747,6 +2749,17 @@ this.tabPage9.Text = "功能过滤"; this.tabPage9.UseVisualStyleBackColor = true; // + // cbOpenFlawDistribution + // + this.cbOpenFlawDistribution.AutoSize = true; + this.cbOpenFlawDistribution.Location = new System.Drawing.Point(19, 306); + this.cbOpenFlawDistribution.Margin = new System.Windows.Forms.Padding(2); + this.cbOpenFlawDistribution.Name = "cbOpenFlawDistribution"; + this.cbOpenFlawDistribution.Size = new System.Drawing.Size(96, 16); + this.cbOpenFlawDistribution.TabIndex = 12; + this.cbOpenFlawDistribution.Text = "启用缺陷分布"; + this.cbOpenFlawDistribution.UseVisualStyleBackColor = true; + // // ckSkipSizeFailed // this.ckSkipSizeFailed.AutoSize = true; @@ -2964,16 +2977,16 @@ this.label49.TabIndex = 4; this.label49.Text = "本机IP:"; // - // cbOpenFlawDistribution + // cbOpenAxisXCal // - this.cbOpenFlawDistribution.AutoSize = true; - this.cbOpenFlawDistribution.Location = new System.Drawing.Point(19, 304); - this.cbOpenFlawDistribution.Margin = new System.Windows.Forms.Padding(2); - this.cbOpenFlawDistribution.Name = "cbOpenFlawDistribution"; - this.cbOpenFlawDistribution.Size = new System.Drawing.Size(96, 16); - this.cbOpenFlawDistribution.TabIndex = 12; - this.cbOpenFlawDistribution.Text = "启用缺陷分布"; - this.cbOpenFlawDistribution.UseVisualStyleBackColor = true; + this.cbOpenAxisXCal.AutoSize = true; + this.cbOpenAxisXCal.Location = new System.Drawing.Point(19, 344); + this.cbOpenAxisXCal.Margin = new System.Windows.Forms.Padding(2); + this.cbOpenAxisXCal.Name = "cbOpenAxisXCal"; + this.cbOpenAxisXCal.Size = new System.Drawing.Size(90, 16); + this.cbOpenAxisXCal.TabIndex = 13; + this.cbOpenAxisXCal.Text = "启用X轴校准"; + this.cbOpenAxisXCal.UseVisualStyleBackColor = true; // // FrmSysSetting // @@ -3327,5 +3340,6 @@ private System.Windows.Forms.NumericUpDown numOffset; private System.Windows.Forms.Label label7; private System.Windows.Forms.CheckBox cbOpenFlawDistribution; + private System.Windows.Forms.CheckBox cbOpenAxisXCal; } } \ No newline at end of file diff --git a/halftoneproject-master/Code/FrmSysSetting.cs b/halftoneproject-master/Code/FrmSysSetting.cs index 4538049..3ce07e0 100644 --- a/halftoneproject-master/Code/FrmSysSetting.cs +++ b/halftoneproject-master/Code/FrmSysSetting.cs @@ -50,6 +50,8 @@ namespace ProductionControl this.ckSkipSizeFailed.Checked = Util.ReadIniValue(configPath, "SKIP", "MarkErrorStop") == "1"; this.cbOpenFlawDistribution.Checked = Util.ReadIniValue(configPath, "SKIP", "OpenFlawDistribution") == "1"; + this.cbOpenAxisXCal.Checked = Util.ReadIniValue(configPath, "SKIP", "OpenAxisXCalibration") == "1"; + //DEV lsTmp = Util.ReadIniValue(configPath, "DEV", "Axis0_PulseOutMode"); EnumUtil.BindToEnumName(this.cobAxis0PulseOutMode, typeof(AxisPulseOutMode), lsTmp == "" ? AxisPulseOutMode.O_CW_CCW : (AxisPulseOutMode)Convert.ToInt32(lsTmp)); @@ -268,6 +270,7 @@ namespace ProductionControl Util.WriteIniValue(configPath, "SKIP", "MarkErrorStop", this.ckSkipSizeFailed.Checked ? "1" : "0"); Util.WriteIniValue(configPath, "SKIP", "OpenFlawDistribution", this.cbOpenFlawDistribution.Checked ? "1" : "0"); + Util.WriteIniValue(configPath, "SKIP", "OpenAxisXCalibration", this.cbOpenAxisXCal.Checked ? "1" : "0"); //DEV Utils.Util.WriteIniValue(configPath, "DEV", "Axis0_PulseOutMode", ((int)EnumUtil.GetSelectedItemToEnum(this.cobAxis0PulseOutMode)).ToString()); Utils.Util.WriteIniValue(configPath, "DEV", "Axis1_PulseOutMode", ((int)EnumUtil.GetSelectedItemToEnum(this.cobAxis1PulseOutMode)).ToString()); diff --git a/halftoneproject-master/Code/FrmSysSetting.resx b/halftoneproject-master/Code/FrmSysSetting.resx index 0aadc95..af12abc 100644 --- a/halftoneproject-master/Code/FrmSysSetting.resx +++ b/halftoneproject-master/Code/FrmSysSetting.resx @@ -124,16 +124,16 @@ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIfSURBVFhH7ZdPaxNBGMbfUBCFSsEvILa0l4K3KoptL9JE - es6hhLpmZ2Z33q09hH4Db6IXpR+gtUULBb+AN6lHW8GDR2/iWZEo4p93hslmp5kkO5ulEOgDPzaZmffZ - J7PvbhI4l0MViJIlolYYLqvAk3nj56F6/QKw+A0I/FcKHB8Z55wSuNBjMjp3jXsOcbmYFjL8TJ/gBYh4 - zx+5CyF+0j4P8AtE0ZQ5wxBFyZ00AMcdM1pMXD5OvYQ8NKNDlA0g5EszWkxCPu96ab/AzAxQNgDDV2Y0 - vxg2aeci/ZrjMyvAGv6AMLmq5/pqlACt1iWq+6trlTg+Tb06hPE7mqnoeadGCRCGl6nuG9HW77l8knpZ - yC0975TVA7hvRvMpSSahuvpH1ypZTWjxWs87ZQcYsLCP9G1rmlfgdsary8CdtQOo7bxtZvzE8DrVfs14 - dfEIoFBN9ZE4pgfMyXBoHccPEAS/TX0vngHKZzwDBMH3QnTuiixeAZSJkPeAsSuFiONZ8jmyPP12gBpr - VAlMLE/PS/CLunoTRHLTGxbfIL9a+rXcYTybsEw8A7TpEtwHvjGnG0od86LWR9EtYPK95Xn2TSjR8vTe - ASHXQYgZaOK0Pp5GjbvgD69RPf3I1Y/onAGyP0pt1HeCH66HkEYemLM5pG4dZ1GZDAoQBBdp0dveopJo - NH7SLlfN2fqoXp+gxcvUD+6/XUURuKL74lyWAP4DwL5ll9fZEiMAAAAASUVORK5CYII= + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIeSURBVFhH7ZfLShxBFIaPCJKAIuQFghHdCO5MSFCzES/Z + zyKIduyq6q7TxoXkDdyJbhQfwEswgYAv4E506QVcZJmduE4IJoRcThU1PV2ZmpmunkYQ/OGjZ6rq/P1P + 9emeGbiXQx0QJePEdGG4nAKeDBk/D1UqXcDiQxD4txQ4rhjnnBI4UmfSPhPGPYe4HEsLGX6hT7ALIt7z + R+5AiJ+1zxu8gijqNWdooSgZTQNw3DajxcTlauol5Ccz2kLZAELum9FiEnKz5qX9AjPTRNkADD+Y0fxi + uEA7F+nXHDesAK/xO4TJYz3XUO0EWF5+SHV/dK0Sx/XUq0oYn9BMh553qp0AYdhDdV+JG/2ey7XUy0K+ + 0/NOWT2A781oPiVJN0y++q1rlawmtDjQ807ZAZosbCB925rmFbiV8arRdGftAGo7X5gZPzEcptrrjFcN + jwAK1VSXxBk9YM5bQ+s4XkAQ/DL19XgGKJ+7GSAIvhWieldk8QqgTIScAcYeFSKOB8jn2PL02wFqrHYl + MLE8PS/BT+rqJRDJM29Y/JT8ptOv5Sp3swnLxDPADV2CeeCLg7qh1DEvan0UPQcmTy3P229CiZan9w4I + OQdC9MMCPtHH/1HjLvjbPqqnH7n6EZ0zQPZHqY36TvDD9RDSyI/mbA6pW8dZVCbNAgTBA1p0VF9UErOz + P2iXp8zZGqhS6aTFL6kf3H+7iiJwUvfFvSwB/AOYeWWRyPCtmgAAAABJRU5ErkJggg== diff --git a/halftoneproject-master/Code/Program.cs b/halftoneproject-master/Code/Program.cs index 28cb2fd..2c29ab9 100644 --- a/halftoneproject-master/Code/Program.cs +++ b/halftoneproject-master/Code/Program.cs @@ -43,6 +43,8 @@ namespace ProductionControl Process instance = RunningInstance(); if (instance == null) { + Application.ThreadException += Application_ThreadException; + Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); @@ -80,5 +82,21 @@ namespace ProductionControl //没有其它的例程,返回Null return null; } + + static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e) + { + + Exception ex = e.Exception; + using (StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\Log.txt", true)) + { + sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); + sw.WriteLine("Global捕获到未处理异常:" + ex.GetType().ToString()); + sw.WriteLine("异常信息:" + ex.Message); + sw.WriteLine("异常堆栈:" + ex.StackTrace); + sw.WriteLine(); + } + MessageBox.Show(string.Format("捕获到未处理异常:{0}\r\n异常信息:{1}\r\n异常堆栈:{2}", ex.GetType(), ex.Message, ex.StackTrace)); + + } } } diff --git a/halftoneproject-master/Code/Properties/AssemblyInfo.cs b/halftoneproject-master/Code/Properties/AssemblyInfo.cs index 18d250b..0568ee6 100644 --- a/halftoneproject-master/Code/Properties/AssemblyInfo.cs +++ b/halftoneproject-master/Code/Properties/AssemblyInfo.cs @@ -32,5 +32,5 @@ using System.Runtime.InteropServices; //可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值 //通过使用 "*",如下所示: // [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.2.1.0")] -[assembly: AssemblyFileVersion("1.2.1.0")] +[assembly: AssemblyVersion("1.2.3.0")] +[assembly: AssemblyFileVersion("1.2.3.0")] diff --git a/halftoneproject-master/Code/UI/FrmGetPosByPic.cs b/halftoneproject-master/Code/UI/FrmGetPosByPic.cs index c73d386..900e5c9 100644 --- a/halftoneproject-master/Code/UI/FrmGetPosByPic.cs +++ b/halftoneproject-master/Code/UI/FrmGetPosByPic.cs @@ -178,8 +178,8 @@ namespace ProductionControl.UI private void tsbtnDelectPos_Click(object sender, EventArgs e) { - this.imageBox1.DelectOntPoint(); - this.pickARoi.RemoveAt(pickARoi.Count - 1); + //this.imageBox1.DelectOntPoint(); + //this.pickARoi.RemoveAt(pickARoi.Count - 1); } } } diff --git a/halftoneproject-master/Code/UI/HeightDevProp.cs b/halftoneproject-master/Code/UI/HeightDevProp.cs index d5dfb6d..834aaac 100644 --- a/halftoneproject-master/Code/UI/HeightDevProp.cs +++ b/halftoneproject-master/Code/UI/HeightDevProp.cs @@ -23,7 +23,7 @@ namespace ProductionControl.UI [PropertyOrder(1), Browsable(true), Category("1 设备连接"), DisplayName("IP地址"), Description("IP地址"), ReadOnly(true), JsonIgnore] public string IP { get;private set; } - [PropertyOrder(1), Browsable(true), Category("1 设备连接"), DisplayName("端品号"), Description("端品号"), ReadOnly(true), JsonIgnore] + [PropertyOrder(1), Browsable(true), Category("1 设备连接"), DisplayName("端口号"), Description("端口号"), ReadOnly(true), JsonIgnore] public int Port { get; private set; } // [PropertyOrder(12), Browsable(true), Category("2 数据"), DisplayName("厚度值(um)"), Description("厚度值(um)"), ReadOnly(true), JsonIgnore] diff --git a/halftoneproject-master/Code/UI/UIAxisDev.resx b/halftoneproject-master/Code/UI/UIAxisDev.resx index 39181b1..56f9d43 100644 --- a/halftoneproject-master/Code/UI/UIAxisDev.resx +++ b/halftoneproject-master/Code/UI/UIAxisDev.resx @@ -1,385 +1,385 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - - - 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 - Q3Avr38BbOOdOnShK0wAAAAASUVORK5CYII= - - - - - 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 - BOENt7Qt5r1VNxkAAAAASUVORK5CYII= - - - - - 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 - AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAMxSURBVFhH7VfNaxNREE9FVFQUq2m7u9mkn6YEIn6Agpd6 - afGmhyr4D3gQRKHW7r7ddDFt1IoXQehJ9CCiUMGrHrQXEb1YBEGKepEqhVo/2pKmyc7zvc28Nmk3u2kT - CkJ/MGTzezPzfjtvdjYJFEIx6AmJ2C+VvuzXBi07XsokLftZIdmPig4HMLRySBp0ySTzQyGUlmsygV4M - rwyyCVGpN/MdEz9QiD2g6PagTOxUKWPrSamPhjFFZWAbvsjfkZ1Can2hnBm3uYCQCXGkXNGchLaIYd9q - tWAXUiuwP0XbmxLQyXy64kmIWxbdhEulgaVnFaAHkXKFatgjjq9pP0PKQcyC2ohpD6ha9lPIyOcKcWPX - vGHZ2lDspsdxCQESgcNIuYId1XPh22jARc61WPS0ZCz2z+Lmhd+5qVdmZyIJuOwkWg7h5CdATeTeLCa9 - OvcnbNjD4o79jFXX+WTVGDl5B7ZiyjyEk5+AkJF7L3xXa1yoqEzYoKMBi27GtOULaCC5MeFbqbF+utch - RAjS9whYkxUmKcfqjPS0SnLvQlrutaTnPoSMmVmxprLjcBILwksAP7fVTEqW/FWTBd3xG3QPpnDQlIL6 - 5n44Fzbtx+EEPe+QIshLgGTR7YqemSzcxM1qjan5RpG4XIjgSgUEL0xmogNwHEPKh0jgcwTBsLl0fq7G - JiqbgO7PeoDW4MVKiAReAjpu0327L/1K+z33fD02CEcxLA82jmXWiGyQ3UWmGCLYS0CA0hrWzWNioHgZ - f1o67tNtGBkIWnQn5/lTgFQxRKCnAIZoEqJqwn4qG9kvkjGxIOLcrDFhD2KYI4D3B68CUsUQQX4CBPgb - LmbRMH/rRUzoYeP1Ia+Oasz9XZp29hN0r76AUmi/DnvbEnCsxYKzrSkIIr1+AkphQ8CGgP9HgNwHh5Cq - Kup7YEctmZr3EDAOXIDfz/K1gg2tLRKZWJC03FukisHm+6hTBR0IUlWFpENnPr/9CKliSBo9EtTSP9Fp - WNbBZNZfsRFIsDfgkETob56b///ELVeCNeCpOpKedkRU2Xj5mZBruFVpsCPoriML39ySrNWcu9ephlss - QyDwD5znNAxEqPI/AAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGZSURBVFhH7VTBccMwDPMmbdJFOko26LVeoJtkiMTXZ0fp - KC1BkxGswI5zsfsy7nBRJIigSMnNhg1LYde1x935/XvArv18+np7Dsl6gNG+a38VsRay29ifPw7YcC+V - MZO1L6f2NeyGmBNoKcIrbAuUcE2GbYESOU/tj5x/kGFbcCUyY8yjZ2sk4aaMWmB9OsZSoxLAOi5tPjMk - 6vdoZrIemKFECOhGPGfve/QmG5BQvUcx5AVKdMVoC+BGlkzOg0g4lmXVmCErUKKaeXK/F/YfhhgjGbSD - k/C5iSSgGUCJBrRgIXWtaoOb0tpUK3wDQ4mYCOa6/mt5uaA1UAG0BmOviogFupihRMwsLcxzrODtiWpl - qxRdzFAiZp6aT6jAFVq2AmGaJ0S/fWMFfxlm7GNLVsUCXcxQopppihPWSWCMea7Osq/AmMHDrP/qGf3U - tA5MnR4MWYESKSJwnhy/3mcjP8upy5cMaYESjREn5fIzshq3GPICJZpDGOadUOtjDNuCewM8yrAt+M8E - +LJewM9oVcZHasOGHk3zB26It08saVcbAAAAAElFTkSuQmCC - - - - - iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAeHSURBVFhH1Zd7VFTXFYdRZ+4MOgGlFZZdWHwluNQo8phx - YBiUCPIIIiCERIiVR1CwyGPAmJVIqChCVECUCkSjSISE2qRqSE2TLivWkmp4CZaXGDGigiYNaSrGtL/u - fWdAbrCEZPWf7rW+Nfees8/e5+59zj5nzP6vJFkvfzJVJ2w16IQa4qJBLXwrws/Uxn2sY1L/30mKm7Ap - RTeh9c11Vug6sQT/7E7BwM2X8O8HJ0X4mdu4j3VYl8eYhv94SdXJI1N0wvmanFkYuJ2Jfw0cxrdf5+BB - fxq++WI97t9dK8LP3MZ9rMO6f9phRxMRzrMNk7kfJqlu8qziUAt81RGPB1/twjd3EnHv5nO41xM2OqTD - ujyGx+4LfgwGN3mmyezYxKCT5/82wRoDtzIx0GvA19eexT+urv5B8JiB3jTcu5UBtsU2TeZHF57t8Xgb - cp5Bed2A/rYQ9LcG/ThoLNtgW5WxNInviwTnKy/QAv3tCejvjMLnDYHESgl953zRUeCAc5tscSrGGqei - rHFpy2y05y1C33nfIb2e957CviAreg4kWzGizV0BYjqeM7kbKbxorp7ywpet0ej7OAB9tf4Sml9biFLK - 6dFQJarCJ4pUhilxjCgLUaIkeBIat8/DzT9649iaycj1EYxjydaXrbG4Vu1FqRBqTO6kwtvmUIQ17n4S - idvnAnDrjI+Ec8mzcGClEkdXm6N0lRJFISq8l2SLj7bMwPH107A/QIkjNIlDQUqUh6lQEWaOfD/l0Phe - svl5YxRKnp2KVDfFRpNbo4SGmk1IcxdQl++Mng8DcON9Lwm12xagwF+B0iAFDkb8BG1nvHG3IQJ3LoSj - 76/P4M7FcFyvDcKHm+1QHmqOt8ON5PooJHZunw3BJ3scYdBOaDG5Nkqqu8KzINgKrb/WovOQO7rf8Rzi - SqUHcvwmoYi+sOgZK1w/uwqf/X6FRIdpq9CjfO1UMQJlq41keSkkOl3lHuTDFbsDJ8PgKtOa3IuLL7sq - 1g6X92rQtNMJVys8hji92R47VyiQ7a3Ax8dccbVqqaSf+cvOxdjsYY4dpLOHwp7nT9AvbT2J3qVcZ9HH - 27HTKQ3yLJN73vdCzZktc9G8xwV1rywSI9Hxhk6kNHIaOReQ6TsJXW8tG2ofTvXL81GeNAuVaXMkVL08 - d0inrdhVtN28W42P0ux5ch+Y3FME1EJvXY4jrWBHUan+VQe0Fi1B2wEtsgOt8KqngII1NuL7o7jy5lJ8 - etxLQv1hHT6tWm7UoQ9q+NVi0XbTDidc2O5AZVp2zeTezCxRJ9xvydegPsNBVGIaMhfjMrW9snIqYpzk - KI6bicsFmjFRvMZWHJO2zFJ8b9hmdD74cU0U6UQ34e8m98YJcG7qtz6cgKhME+qqWIaGo+7oPKKnOuA8 - JnJDrZFOuyp5qUp0KLHJE8j/zgQ4BU0F6qEUDCfDzwbbV1pjZ6A1cgj+zQqwRnHkDFH/USR5qLBJK8Dg - YzXCHvfX7XaSpoAX4Z+3P4nmXcZFOJznHRWI18iRsEQQecFFjkhnJU6+OJ/S5PAQ+jKOWNULcxDjLEcc - 6e2PnTnCXvNuF5zNmP+dRUjb8N1fzsDlfZoRA2I0Stoy9DU6CqmrgHRvS9QWqtGU7TRCtyZ9ARJ0KiRo - BKxzUeJC7kgd9vHORjvpNkzTyTz2Bk9B+0E3cfENH8AToDItTiCJJvCS3xScTp0n0WGq4uYg3k0lRiua - FmBp4uMj8s87of2QDnuoEKW7y9Qm90bha1RjkQv+tn+JZFC0WimGPlFnLoZ/g1qOKHKwkZwl6y2Q4mGB - XzgJiKWwc986RzlyIqejJV8tscO0FmlRX+hMJ6LQZHL7UPgweiPCBleopDZmPVyMz7uYY4NehcZSLcoM - 9ojSmIvO1pMzcW1QuPmX22JdJ+LEtoViDRnumGGbV47pURL+U4qmbIPJrVT4OK7f6yhWrsGaEOdphTOv - OYnhbMlTo/WIDmVpc5EdYQuDrxWSlk9GZtg0HE61x6XX3XApx3mEc7bVQYWpju4R//U4ZuELSbaPCl1V - eqpe9BVbF6GD1oW4dQaNUa1ooUIilmvKZycZ5jLLkxteyIYgG20lWnT9Ro8s74mjX0hY+Np0IIxOvfep - jBZTzh5ldIxw1NpKXfHZ6eUoDKYTcKyXU75AlvDRW/0UOst0kjUxVnhMJ1XQ7lOe2B8yhff92C6lg8Kz - zfaldFRo0fPBCvFQGTxQRoN1OCU9f1iBzgoN2Ab/YzKZ/V4ZR0wgzAnLGGdZQpJWuPhWtA1uVHvQ3c4f - 3b/zRDuFlSsaFyOGn7mt+4SnqHOjeikq19kgWSvU0taMJlsKYjzB9kcVVlIRPye4UAQTcV6Py96NU8t7 - C1dZombrbDpmKa8n9fiiPkCEn7mN+/Lo5kvbssffXnaUxvoTDsQ0gj+K7Y8qrDCR+BnhRKwi1hMvEpkz - Jo876PvE+PORjrIba53lffGuwn2GakDvWkfZ9aftx5+1sxxXSLrpRAzhRywkrInBKIwqHCJWYmULggdO - J2YSc4gniLnEPGLBMPid27l/NsH6tsRU4jFCIB7h3MzsP7bAzindw+LMAAAAAElFTkSuQmCC - - - - 332, 17 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + h+BeXv8CTiWdOACz1MoAAAAASUVORK5CYII= + + + + + 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 + BOENt7Qt5r1VNxkAAAAASUVORK5CYII= + + + + + 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 + AAAAAElFTkSuQmCC + + + + + iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAMxSURBVFhH7VfNaxNREE9FVFQUq2m7u9mkn6YEIn6Agpd6 + afGmhyL4D3gQRKHW7r7ddDFt1IoXQehJ9CCiUMGrHrQXEb1YBMGKepEqhVo/2pKmyc7zvc28Nmk3u2kT + CkJ/MGTzezPzfjtvdjYJFEIx6AmJ2C+UvuzXBi37qZRJWvazQrIfFB0OYGjlkDTokknmh0IoLddkAr0Y + XhlkE6JSb+Y7Jr6vEHtA0e1BmdipUsbWk1IfDWOKysA2fJ6/IzuF1PpC6R63uYCQCXGkXNGchLaIYd9s + tWAXUiuwP0XbmxLQyXy64kmIWxbdhEulgaVnFaAHkXKFatgjjq9pP0XKQcyC2ohpD6ha9mPIyOcKcWPX + vGHZ2lDshsdxCQESgcNIuYId1TPh22jABc61WPS0ZCz2z+Lmhd+5qZdnZyIJuOQkWg7h5CdATeReLya9 + MvcnbNjD4o79jFXX+WTVGDl5G7ZiyjyEk5+AkJF7J3xXa1yoqEzYoKMBi27GtOULaCC5MeFbqbF+utsh + RAjS9whYkxUmKcfqjPS0SnJvQ1rulaTn3oeMmVmxprLjcBILwksAP7fVTEqW/GWTBd3x63QPpnDQlIL6 + 5n44GzbtR+EEPeeQIshLgGTR7YqemSzcxM1qjan5RpG4XIjgSgUEz09mogNwHEPKh0jgcwTBsLl0fq7G + JiqbgO7PeoDW4MVKiAReAjpu0X27L/5K+z33fD02CEcxLA82jmXWiGyQ3UGmGCLYS0CA0hrWzWNioHgZ + f1o67tFtGBkIWnQn5/lTgFQxRKCnAIZoEqJqwn4iG9kvkjGxIOLcrDFhD2KYI4D3B68CUsUQQX4CBPgb + LmbRMH/rRUzoYeP1Aa+Oasz9XZp29mN0r76AUmi/BnvbEnCsxYIzrSkIIr1+AkphQ8CGgP9HgNwHh5Cq + Kup7YEctmZr3EDAOXIDfz/K1gg2tLRKZWJC03BukisHm+6hTBR0IUlWFpENnPr/9EKliSBo9EtTSP9Fp + WNbBZNZfsRFIsDfgkETob56b///ELVeCNeCpOpKedkRU2Xj5mZCruFVpsCPoriML39ySrNWcu9ephlss + QyDwD2y3NAccDi03AAAAAElFTkSuQmCC + + + + + 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 + + + + 332, 17 + \ No newline at end of file diff --git a/halftoneproject-master/Code/UI/UILightDev.cs b/halftoneproject-master/Code/UI/UILightDev.cs index d59d39a..29e98f7 100644 --- a/halftoneproject-master/Code/UI/UILightDev.cs +++ b/halftoneproject-master/Code/UI/UILightDev.cs @@ -168,7 +168,7 @@ namespace ProductionControl.UI switch (propertyName) { case "ChannelIndex": - if((int)newValue <1 || (int)newValue >4) + if((int)newValue <1 || (int)newValue >6) { prop.ChannelIndex = (int)oldValue; this.refreshUI(); diff --git a/halftoneproject-master/HalftoneWeb/src/pages/reportRecordSN.vue b/halftoneproject-master/HalftoneWeb/src/pages/reportRecordSN.vue index b158f7d..5725521 100644 --- a/halftoneproject-master/HalftoneWeb/src/pages/reportRecordSN.vue +++ b/halftoneproject-master/HalftoneWeb/src/pages/reportRecordSN.vue @@ -145,7 +145,7 @@ @@ -154,7 +154,7 @@ @@ -774,7 +774,7 @@ const openHistoryView=(id)=>{ const reCheckQualified=(pInfo,orderRow)=> { let upperLimit, lowerLimit console.log('reCheckQualified start...') - orderRow.Qualified=(orderRow.CompareResult!==2) + orderRow.Qualified&=(orderRow.CompareResult!==2) //Tension 1-5 upperLimit = pInfo.TensionBaseValue + pInfo.TensionUpFloatValue lowerLimit = pInfo.TensionBaseValue - pInfo.TensionDownFloatValue diff --git a/halftoneproject-master/Models/Product.cs b/halftoneproject-master/Models/Product.cs index de89e7c..d683440 100644 --- a/halftoneproject-master/Models/Product.cs +++ b/halftoneproject-master/Models/Product.cs @@ -114,6 +114,10 @@ namespace Models //抓取点位 [SugarColumn(IsNullable = true)] public string GetPointList { get; set; } + + //2023-12-18 加入mark干扰判断,是否主栅 + public int MarkDisturb { get; set; } + public int MainGrid { get; set; } } /// /// 结束的批次才加入 diff --git a/更新日志.txt b/更新日志.txt new file mode 100644 index 0000000..4384852 --- /dev/null +++ b/更新日志.txt @@ -0,0 +1,27 @@ +V1.2.0: + 1.料号开始之前选择 + 2.加入图像选点功能,加入14个点位 + 3.加入产品修复异常 + 4.mark识别失败报警暂停 + 5.自动删除图片更新为1天以内 +V1.2.1: + 1.更新无法重新创建产品bug + 2.移动自选点位的功能位置 + 3.加入mark点选择配置 + 4.优化日志 +V1.2.2: + 1.光源通道现在限制4,后期改为6 + 2.未选择料号防呆 + 3.修复图纸比对中的图像浅拷贝,造成图像被覆盖问题。 + 4.加入未知错误记录 + 5.克隆产品之后运行出现显示log日志报错,屏蔽克隆产品功能 + 6.修复无法删除文件夹图片问题 + 7.加入主栅 + 8.加入缺陷大图保存位置,硬盘检测 + 9.加入X轴补偿 + 10.修复图片自动删除bug + 11.加入同SN删除修复台重复图片 +V1.2.3: + 1.修复开启比对,但比对失败当成无比对bug + 2.修复查询显示的时候没有使用缺陷结果,显示结果ok等bug + 3.更新上传图纸Mark点选项 \ No newline at end of file