using GeBoShi.SysCtrl; using HZH_Controls.Controls; using Models; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Security.Policy; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using static System.Windows.Forms.VisualStyles.VisualStyleElement; namespace GeBoShi.UI.Product { public partial class ProductInfoFrm : Form { Service.ProductService service = new Service.ProductService(); Models.Product model = new Models.Product(); public ProductInfoFrm(Models.Product m = null) { InitializeComponent(); UIStyle.SetUIStyle(this); this.uiTitel1.FatherForm = this; #region dataGridView设置 dataGridView1.AllowUserToAddRows = dataGridView1.AllowUserToDeleteRows = false;//用户添加删除行 dataGridView2.AllowUserToAddRows = dataGridView2.AllowUserToDeleteRows = false; dataGridView1.AllowUserToResizeRows = dataGridView2.AllowUserToResizeRows = false;//用户调整行大小 //dataGridView1.AllowUserToResizeColumns = false;//用户调整列大小 //显示行号与列宽度自动调整 dataGridView1.RowHeadersVisible = dataGridView2.RowHeadersVisible = true; dataGridView1.RowHeadersWidth = dataGridView2.RowHeadersWidth = 50; //dataGridView1.ColumnHeadersHeightSizeMode = dataGridView2.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing; dataGridView1.RowHeadersWidthSizeMode = dataGridView2.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders;//数据量过百绑定太变 dataGridView1.RowTemplate.Height = dataGridView2.RowTemplate.Height = 30; #endregion initData(); if (m != null) { model = m; //显示模型 foreach (string onnxFile in this.cmbDefectModelFile.Items) if (!string.IsNullOrWhiteSpace(model.ModelName) && onnxFile.ToLower() == model.ModelName.ToLower()) this.cmbDefectModelFile.SelectedItem = model.ModelName; txtName.Text = model.Name; cmbClasses.Text = model.Material; tbColorName.Text = model.ColorName; int[] rgb = new int[3]; if (!string.IsNullOrEmpty(model.ColorValue)) { for (int i = 0; i < rgb.Length; i++) rgb[i] = Convert.ToInt32(model.ColorValue.Split(',')[i]); tbColorName.ForeColor = Color.FromArgb(rgb[0], rgb[1], rgb[2]); } tbSpec.Text = model.Spec; TrackBarLightValue.Value = model.LightValue; TrackBarExposureTime.Value = (int)model.ExposureTime; TrackBarGain.Value = (int)model.Gain; TrackBarTensionValue.Value = (int)model.TensionValue; numStopDis.Value = (decimal)model.ThicknessDetectionStopDis; numReelLen.Value = (decimal)model.residueWarnningLen; numDefectAreaLimit.Value = (decimal)model.DefectAreaLimit; numDefectCntLength.Value = (decimal)model.DefectCntLength; numDefectCountLimit.Value = (decimal)model.DefectCountLimit; tbWarnDefect.Text = model.WarnDefect; cbGetHD.Checked = model.OpenThicknessDetection; numStopDis.Value = (int)model.ThicknessDetectionStopDis; } } private void initData() { //模型文件 string strDefectModelFile = ConfMgr.Instance.SysConfigParams.AIModelPath; if(!Directory.Exists(strDefectModelFile)) { MessageBox.Show("模型路径错误:" + strDefectModelFile, "警告"); return; } string[] onnxFiles = Directory.GetFiles(strDefectModelFile, "*.trt"); //标签文件 string[] labelFiles = Directory.GetFiles(strDefectModelFile, "*.json"); string errorStr = ""; foreach (string onnxFile in onnxFiles) { string onlyName; onlyName = Path.GetFileName(onnxFile); cmbDefectModelFile.Items.Add(onlyName); string findname = onlyName.Replace(".trt", ".json"); //存在对应label文件 if (labelFiles.Count(p => Path.GetFileName(p) == findname) <= 0) { errorStr += $"{onlyName},"; } } if (!string.IsNullOrEmpty(errorStr)) MessageBox.Show("模型缺少词典文件:" + errorStr, "警告"); //加载材质 string configPath = ConfMgr.Instance.ConfigDir + $"\\material.json"; if (File.Exists(configPath)) { string lsTmp = File.ReadAllText(configPath); JArray defectItemList = JArray.Parse(lsTmp); cmbClasses.Items.Clear(); foreach (JObject item in defectItemList) { string name = item.Value("name"); cmbClasses.Items.Add(name); } } else MessageBox.Show("模型材质文件:" + configPath, "警告"); } private void cmbClasses_SelectedIndexChanged(object sender, EventArgs e) { } private void ProductInfoFrm_Load(object sender, EventArgs e) { } private void ProductInfoFrm_SizeChanged(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Maximized) { this.WindowState = FormWindowState.Normal; this.Top = 0; this.Left = 0; this.Width = SystemInformation.WorkingArea.Width; this.Height = SystemInformation.WorkingArea.Height; } } private void tsbtnExit_Click(object sender, EventArgs e) { this.Close(); } private void tsbtnSave_Click(object sender, EventArgs e) { try { if (this.cmbClasses.SelectedIndex < 0) throw new Exception("请选择材质!"); if (string.IsNullOrEmpty(this.txtName.Text)) throw new Exception("请填写名称!"); if (string.IsNullOrEmpty(this.tbColorName.Text)) throw new Exception("请填写颜色!"); if (this.cmbDefectModelFile.SelectedIndex < 0) throw new Exception("请选择模型!"); model.Name = txtName.Text; model.Material = cmbClasses.Text; model.ColorName = tbColorName.Text; model.ModelName = cmbDefectModelFile.Text; model.Spec = tbSpec.Text; model.LightValue = (int)TrackBarLightValue.Value; model.ExposureTime = (double)TrackBarExposureTime.Value; model.Gain = (double)TrackBarGain.Value; model.TensionValue = (double)TrackBarTensionValue.Value; model.OpenThicknessDetection = cbGetHD.Checked; model.ThicknessDetectionStopDis = (int)numStopDis.Value; model.DefectAreaLimit = (int)numDefectAreaLimit.Value; model.DefectCntLength = (double)numDefectCntLength.Value; model.DefectCountLimit = (int)numDefectCountLimit.Value; model.WarnDefect = tbWarnDefect.Text; model.residueWarnningLen = (double)numReelLen.Value; //缺陷阈值 if (model.QualifiedLimitList == null) model.QualifiedLimitList = new List(); else model.QualifiedLimitList.Clear(); QualifiedLimit qualifiedLimit = new QualifiedLimit(); string configPath = ConfMgr.Instance.SysConfigParams.AIModelPath + $"\\{tbLabelFile.Text}"; string lsTmp = File.ReadAllText(configPath); JArray defectItemList = JArray.Parse(lsTmp); for (int i = 0; i < dataGridView1.Rows.Count; i++) { string code2 = dataGridView1.Rows[i].Cells["Code"].Value.ToString(); string nameCode = defectItemList.FirstOrDefault(x => x.Value("code") == code2).Value("name"); qualifiedLimit = new Models.QualifiedLimit() { Code = dataGridView1.Rows[i].Cells["Code"].Value.ToString(), ZXD = Utils.IsDecimal(dataGridView1.Rows[i].Cells["ZXD"].Value) ? Convert.ToDouble(dataGridView1.Rows[i].Cells["ZXD"].Value) : 0, Area = Utils.IsDecimal(dataGridView1.Rows[i].Cells["Area"].Value) ? Convert.ToDouble(dataGridView1.Rows[i].Cells["Area"].Value) : 0, ContrastLower = Utils.IsDecimal(dataGridView1.Rows[i].Cells["DBDL"].Value) ? Utils.PercentToContrast(Convert.ToDouble(dataGridView1.Rows[i].Cells["DBDL"].Value)) : 0, ContrastTop = Utils.IsDecimal(dataGridView1.Rows[i].Cells["DBDH"].Value) ? Utils.PercentToContrast(Convert.ToDouble(dataGridView1.Rows[i].Cells["DBDH"].Value)) : 0, IsOR = Convert.ToBoolean(dataGridView1.Rows[i].Cells["OrAnd"].Value), NameCode = nameCode, DefectWarnLength = Utils.IsNumber(dataGridView1.Rows[i].Cells["DefectLength"].Value) ? Convert.ToInt32(dataGridView1.Rows[i].Cells["DefectLength"].Value) : 0, DefectWarnCnt = Utils.IsDecimal(dataGridView1.Rows[i].Cells["DefectWarn"].Value) ? Convert.ToInt32(dataGridView1.Rows[i].Cells["DefectWarn"].Value) : 0, ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code, CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code }; if (qualifiedLimit.ContrastLower + qualifiedLimit.ContrastTop > 0 && qualifiedLimit.ContrastTop < qualifiedLimit.ContrastLower) throw new Exception($"检测标准中第{i + 1}行中对比度上限值({qualifiedLimit.ContrastTop})不可小于下限值({qualifiedLimit.ContrastLower})!"); model.QualifiedLimitList.Add(qualifiedLimit); } //产品等级 if (model.GradeLimitList == null) model.GradeLimitList = new List(); else model.GradeLimitList.Clear(); for (int i = 0; i < dataGridView2.Rows.Count; i++) { model.GradeLimitList.Add( new Models.GradeLimit() { Code = dataGridView2.Rows[i].Cells["Code2"].Value.ToString(), A = Utils.IsNumber(dataGridView2.Rows[i].Cells["A"].Value) ? Convert.ToInt32(dataGridView2.Rows[i].Cells["A"].Value) : 0, B = Utils.IsNumber(dataGridView2.Rows[i].Cells["B"].Value) ? Convert.ToInt32(dataGridView2.Rows[i].Cells["B"].Value) : 0, C = Utils.IsNumber(dataGridView2.Rows[i].Cells["C"].Value) ? Convert.ToInt32(dataGridView2.Rows[i].Cells["C"].Value) : 0, D = Utils.IsNumber(dataGridView2.Rows[i].Cells["D"].Value) ? Convert.ToInt32(dataGridView2.Rows[i].Cells["D"].Value) : 0, E = Utils.IsNumber(dataGridView2.Rows[i].Cells["E"].Value) ? Convert.ToInt32(dataGridView2.Rows[i].Cells["E"].Value) : 0, ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code, CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code }); } // model.ModifyUserCode = SysMgr.Instance.UserMgr.LoginUser.Code; bool result; if (model.Id == 0) { model.CreateUserCode = SysMgr.Instance.UserMgr.LoginUser.Code; result = service.InsertNav(model); } else { result = service.UpdateNav(model); } if (!result) throw new Exception("数据保存失败!"); else MessageBox.Show("保存成功!", "保存"); } catch (Exception ex) { MessageBox.Show("保存出错:" + ex.Message, "警告"); } } private void cmbDefectModelFile_TextChanged(object sender, EventArgs e) { try { tbLabelFile.Text = cmbDefectModelFile.Text.Replace(".trt", ".json"); //加载缺陷 string configPath = ConfMgr.Instance.SysConfigParams.AIModelPath + $"\\{tbLabelFile.Text}"; string lsTmp = File.ReadAllText(configPath); JArray defectItemList = JArray.Parse(lsTmp); //加行 dataGridView1.Rows.Clear(); dataGridView2.Rows.Clear(); cbDefectName.Items.Clear(); foreach (JObject item in defectItemList) { string code = item.Value("code"); string name = item.Value("name"); //color = item.Value("color"); dataGridView1.Rows.Add(); dataGridView1.Rows[dataGridView1.RowCount - 1].HeaderCell.Value = name; dataGridView1[0, dataGridView1.RowCount - 1].Value = code; dataGridView2.Rows.Add(); dataGridView2.Rows[dataGridView2.RowCount - 1].HeaderCell.Value = name; dataGridView2[0, dataGridView2.RowCount - 1].Value = code; cbDefectName.Items.Add(name); } //模型是否是产品模型 if (model.ModelName == cmbDefectModelFile.Text) { //加载参数 string code; QualifiedLimit item1; for (int i = 0; i < dataGridView1.Rows.Count; i++) { code = dataGridView1.Rows[i].Cells["Code"].Value.ToString(); item1 = model.QualifiedLimitList.FirstOrDefault(m => m.Code == code); if (item1 != null) { dataGridView1.Rows[i].Cells["ZXD"].Value = item1.ZXD; dataGridView1.Rows[i].Cells["Area"].Value = item1.Area; dataGridView1.Rows[i].Cells["DBDH"].Value = Utils.ContrastToPercent(item1.ContrastTop); dataGridView1.Rows[i].Cells["DBDL"].Value = Utils.ContrastToPercent(item1.ContrastLower); dataGridView1.Rows[i].Cells["OrAnd"].Value = item1.IsOR; dataGridView1.Rows[i].Cells["DefectLength"].Value = item1.DefectWarnLength; dataGridView1.Rows[i].Cells["DefectWarn"].Value = item1.DefectWarnCnt; } } GradeLimit item2; for (int i = 0; i < dataGridView2.Rows.Count; i++) { code = dataGridView2.Rows[i].Cells["Code2"].Value.ToString(); item2 = model.GradeLimitList.FirstOrDefault(m => m.Code == code); if (item2 != null) { dataGridView2.Rows[i].Cells["A"].Value = item2.A; dataGridView2.Rows[i].Cells["B"].Value = item2.B; dataGridView2.Rows[i].Cells["C"].Value = item2.C; dataGridView2.Rows[i].Cells["D"].Value = item2.D; dataGridView2.Rows[i].Cells["E"].Value = item2.E; } } } } catch (Exception ex) { MessageBox.Show("载入出错:" + ex.Message, "警告"); } } private void btnColor_Click(object sender, EventArgs e) { ColorDialog dlg = new ColorDialog(); DialogResult result = dlg.ShowDialog(); if(result == DialogResult.OK) { // 获取用户所选颜色 Color selectedColor = dlg.Color; // 在 label1 中显示所选颜色的 RGB 值 tbColorName.ForeColor = selectedColor; } } private void btnClearDefect_Path_Click(object sender, EventArgs e) { tbWarnDefect.Text = ""; } private void btnAddWarn_Click(object sender, EventArgs e) { if(tbWarnDefect.Text == "") { tbWarnDefect.Text += cbDefectName.Text; } else tbWarnDefect.Text += $",{cbDefectName.Text}"; } private void TrackBarLightValue_ValueChanged(object sender, EventArgs e) { UCTrackBar trackBar = (UCTrackBar)sender; if(trackBar.Name == "TrackBarLightValue") { numericUpDown1.Value = (decimal)trackBar.Value; } else if (trackBar.Name == "TrackBarExposureTime") { numericUpDown2.Value = (decimal)trackBar.Value; } else if (trackBar.Name == "TrackBarGain") { numericUpDown3.Value = (decimal)trackBar.Value; } else if (trackBar.Name == "TrackBarTensionValue") { numericUpDown4.Value = (decimal)trackBar.Value; } } private void numericUpDown1_ValueChanged(object sender, EventArgs e) { NumericUpDown num = (NumericUpDown)sender; if (num.Name == "numericUpDown1") { TrackBarLightValue.Value = (float)num.Value > TrackBarLightValue.MaxValue? TrackBarLightValue.MaxValue : (float)num.Value; } else if (num.Name == "numericUpDown2") { TrackBarExposureTime.Value = (float)num.Value > TrackBarExposureTime.MaxValue ? TrackBarExposureTime.MaxValue : (float)num.Value; } else if (num.Name == "numericUpDown3") { TrackBarGain.Value = (float)num.Value > TrackBarGain.MaxValue ? TrackBarGain.MaxValue : (float)num.Value; } else if (num.Name == "numericUpDown4") { TrackBarTensionValue.Value = (float)num.Value > TrackBarTensionValue.MaxValue ? TrackBarTensionValue.MaxValue : (float)num.Value; } } } }