diff --git a/DHSoftware/Languages/Localizer_en-US.cs b/DHSoftware/Languages/Localizer_en-US.cs index 1664da8..c30ea43 100644 --- a/DHSoftware/Languages/Localizer_en-US.cs +++ b/DHSoftware/Languages/Localizer_en-US.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace DHSoftware.Languages +namespace DHSoftware.Languages { public class Localizer_enus : AntdUI.ILocalization { @@ -14,126 +8,183 @@ namespace DHSoftware.Languages { case "search": return "Search"; + case "welcome": return "Welcome to the AntdUI Demo"; + case "home": return "Home"; + case "closeall": return "Close all tabs"; + #region systemset + case "systemset": return "System Settings"; + case "baseset": return "Basic Settings"; + case "messageconfig": return "Message configuration"; + case "animationon": return "Turn on animation"; + case "shadowon": return "Enable shadow"; + case "scrollbarhide": return "Hide scrollbar"; + case "showinwindow": return "Show in window"; + case "windowOffsetXY": return "WindowOffsetXY"; + case "tip": return "Tip"; + case "switchsuccess": return "Switch successful."; - #endregion + + #endregion systemset #region Button + case "Button.Text": return "Button"; + case "Button.Description": return "To trigger an operation."; + case "type": return "Type"; + case "wave": return "Wave"; + case "loading": return "Loading"; + case "ghost": return "Ghost"; + case "border": return "Border"; + case "icon": return "Icon"; + case "arrow": return "Arrow"; + case "join": return "Join"; + case "gradient": return "Gradient"; + case "toggle": return "Toggle"; - #endregion + + #endregion Button #region FloatButton + case "FloatButton.Text": return "FloatButton"; + case "FloatButton.Description": return "A button that floats at the top of the page."; + case "FloatButton.Tip": return "FloatButton does not have a toolbox control and is called code."; + case "control_option": return "Control Options"; + case "button_option": return "Button Options"; + case "open": return "Open"; + case "close": return "Close"; + case "reset": return "Reset"; - #endregion + + #endregion FloatButton #region Icon + case "Icon.Text": return "Icon"; + case "Icon.Description": return "Semantic vector graphics."; + case "Icon.Tip": return "Icon does not have a toolbox control and is used for Svg property assignments."; + case "outlined": return "Outlined"; + case "filled": return "Filled"; + case "directionalicon": return "Directional icons"; + case "suggestionicon": return "Suggestion Icon"; + case "editingicon": return "Editing Icons"; + case "dataicon": return "Data icons"; + case "brand": return "Brand and logo"; + case "universal": return "Universal Icons for Websites"; + case "copysuccess": return "Copy successful!"; + case "copyfail": return "Copy failed!"; - #endregion + + #endregion Icon #region Divider + case "Divider.Text": return "Divider"; + case "Divider.Description": return "A divider line separates different content."; + case "basicusage": return "Basic Usage"; + case "vertical": return "Vertical"; + case "horizontal": return "Horizontal"; - #endregion + + #endregion Divider + default: return null; - } } } -} +} \ No newline at end of file diff --git a/DHSoftware/LoginWindow.cs b/DHSoftware/LoginWindow.cs index b4a6b85..e9ace4f 100644 --- a/DHSoftware/LoginWindow.cs +++ b/DHSoftware/LoginWindow.cs @@ -1,26 +1,23 @@ using AntdUI; using DHSoftware.Models; using DHSoftware.Services; + namespace DHSoftware { - - - public partial class LoginWindow : AntdUI.Window { - public LoginWindow() { - InitializeComponent(); button_ok.Click += Button_ok_Click; button_cancel.Click += Button_cancel_Click; - } + /// /// 窗体对象实例 /// private static LoginWindow _instance; + internal static LoginWindow Instance { get @@ -30,6 +27,7 @@ namespace DHSoftware return _instance; } } + private void Button_cancel_Click(object? sender, EventArgs e) { this.Dispose(); @@ -37,8 +35,8 @@ namespace DHSoftware private void Button_ok_Click(object? sender, EventArgs e) { - if (string.IsNullOrWhiteSpace(iptName.Text)) - { + if (string.IsNullOrWhiteSpace(iptName.Text)) + { AntdUI.Message.warn(this, "用户名不能为空!", autoClose: 3); return; } @@ -47,9 +45,8 @@ namespace DHSoftware AntdUI.Message.warn(this, "密码不能为空!", autoClose: 3); return; } - if(AuthService.Login(iptName.Text, iptPwd.Text)) + if (AuthService.Login(iptName.Text, iptPwd.Text)) { - if (this.Owner is MainWindow parent) { List UserPermissions = AuthService.GetUserPermissions(); @@ -87,10 +84,9 @@ namespace DHSoftware parent.Deleteschememe = false; } - - parent.LoginName=iptName.Text; + parent.LoginName = iptName.Text; } - this.Dispose(); + this.Dispose(); } else { @@ -100,7 +96,6 @@ namespace DHSoftware private void LoginWindow_Load(object sender, EventArgs e) { - } } -} +} \ No newline at end of file diff --git a/DHSoftware/MainWindow.cs b/DHSoftware/MainWindow.cs index eafd942..35d54a4 100644 --- a/DHSoftware/MainWindow.cs +++ b/DHSoftware/MainWindow.cs @@ -36,16 +36,12 @@ using ResultState = DH.Commons.Base.ResultState; namespace DHSoftware { - - - public partial class MainWindow : AntdUI.Window { - - - Dictionary> _cameraRelatedDetectionDict = null; + private Dictionary> _cameraRelatedDetectionDict = null; private string _loginName; + public string LoginName { get { return _loginName; } @@ -55,7 +51,9 @@ namespace DHSoftware UpdateLabel(); } } + private bool _ShowConfig; + public bool ShowConfig { get { return _ShowConfig; } @@ -66,48 +64,51 @@ namespace DHSoftware } } + private bool _addscheme; - private bool _addscheme; - public bool Addscheme - { - get { return _addscheme; } - set - { - _addscheme = value; - UpdateScheme(); - } - } - private bool _deletescheme; - public bool Deleteschememe + public bool Addscheme + { + get { return _addscheme; } + set { - get { return _deletescheme; } - set - { - _deletescheme = value; + _addscheme = value; UpdateScheme(); - } } - private bool _loadscheme; - public bool Loadscheme + } + + private bool _deletescheme; + + public bool Deleteschememe + { + get { return _deletescheme; } + set { - get { return _loadscheme; } - set - { - _loadscheme = value; + _deletescheme = value; UpdateScheme(); - } } + } + + private bool _loadscheme; + + public bool Loadscheme + { + get { return _loadscheme; } + set + { + _loadscheme = value; + UpdateScheme(); + } + } private void UpdateScheme() { - if (this.InvokeRequired) { this.Invoke(new Action(UpdateScheme)); return; } - if (Loadscheme) + if (Loadscheme) { btnDeleteProject.Visible = true; } @@ -142,6 +143,7 @@ namespace DHSoftware } lbName.Text = _loginName; } + private void UpdateConfig() { if (ShowConfig) @@ -163,29 +165,29 @@ namespace DHSoftware } segmented1.Items.Remove(itemToHide); } - } + public MainWindow() { InitializeComponent(); - + //refreshTimer.Start(); //初始化数据 InitData(); //绑定事件 BindEventHandler(); UserConfigFrm userControlFrm = new UserConfigFrm(); - + userControlFrm.Window = this; userControlFrm.Dock = DockStyle.Fill; tabPage2.Controls.Add(userControlFrm); - } /// /// 窗体对象实例 /// private static MainWindow _instance; + internal static MainWindow Instance { get @@ -195,12 +197,13 @@ namespace DHSoftware return _instance; } } - SegmentedItem itemToHide; + + private SegmentedItem itemToHide; + private void InitData() { itemToHide = segmented1.Items[4]; segmented1.Items.Remove(itemToHide); - } public void LoadScheme() @@ -215,7 +218,7 @@ namespace DHSoftware //如果是空,新增默认数据 if (list == null || list.Count <= 0) { - list = new() { CurrentScheme }; + list = new() { CurrentScheme }; //显示到方案列表 sltProjects.Items.Clear(); @@ -241,7 +244,7 @@ namespace DHSoftware //加载当前方案配置 ConfigHelper.LoadConfig(); } - catch (Exception ex) + catch (Exception ex) { AntdUI.Message.error(this, ex.Message, autoClose: 3); } @@ -277,7 +280,6 @@ namespace DHSoftware // cam.CameraConnect(); cam.OnHImageOutput += OnCameraHImageOutput; } - } } } @@ -291,7 +293,6 @@ namespace DHSoftware var plcBase = ConfigModel.PLCBaseList[i]; if (plcBase.PLCType == EnumPLCType.信捷XC网口) { - PLC.IP = plcBase.IP; PLC.Enable = plcBase.Enable; PLC.PLCName = plcBase.PLCName; @@ -300,7 +301,6 @@ namespace DHSoftware PLC.PLCConnect(); } } - } } @@ -311,7 +311,6 @@ namespace DHSoftware if (ConfigModel.DetectionList.Count > 0) { - for (int i = 0; i < ConfigModel.DetectionList.Count; i++) { DetectionConfig detectionConfig = ConfigModel.DetectionList[i]; @@ -329,7 +328,6 @@ namespace DHSoftware } DetectionConfigs.ForEach(detection => { - detection.CameraCollects.ForEach(cam => { List Dets = new List @@ -344,14 +342,11 @@ namespace DHSoftware { _cameraRelatedDetectionDict[cam.CameraSourceId].Add(detection.Id); } - - } ); }); string inferenceDevice = "CPU"; - // _visionEngine = new SimboVisionDriver(); _visionEngine.DetectionConfigs = DetectionConfigs; @@ -360,16 +355,13 @@ namespace DHSoftware _visionEngine.Init(); CtrlVisionRunBase ctrlVisionRun = new CtrlVisionRunBase(_visionEngine); tabImgDisplay.Controls.Add(ctrlVisionRun); - - } + private void BindEventHandler() { - btnAddProject.Click += BtnAddProject_Click; btnDeleteProject.Click += BtnDeleteProject_Click; btnLoadProject.Click += BtnLoadProject_Click; - } private void BtnDeleteProject_Click(object? sender, EventArgs e) @@ -400,19 +392,15 @@ namespace DHSoftware SchemeHelper.SetCurrentScheme(SystemModel.CurrentScheme); //加载当前方案配置 ConfigHelper.LoadConfig(); - - } else { sltProjects.SelectedIndex = -1; // 清空选择 AntdUI.Modal.open(this, "空方案警告!", "当前方案全部删除,需重启程序!", TType.Warn); - } - } } - catch (Exception ex) + catch (Exception ex) { AntdUI.Message.error(this, ex.Message, autoClose: 3); } @@ -436,7 +424,8 @@ namespace DHSoftware ConfigHelper.LoadConfig(); AntdUI.Message.success(this, $"载入方案{SystemModel.CurrentScheme}成功!", autoClose: 3); } - catch (Exception ex) { + catch (Exception ex) + { AntdUI.Message.error(this, ex.Message, autoClose: 3); } } @@ -481,23 +470,20 @@ namespace DHSoftware { AntdUI.Message.error(this, ex.Message, autoClose: 3); } - - } - - - - + } public List HKCameras { get; } = new List(); public List Cameras { get; } = new List(); public Dictionary Dectection { get; } = new Dictionary(); public XinJEPLCTcpNet PLC { get; } = XinJEPLCTcpNet.Instance; - SLDMotion sLDMotion = new SLDMotion(); + private SLDMotion sLDMotion = new SLDMotion(); + private void MainWindow_Load(object sender, EventArgs e) { - } + private bool _isClosing = false; // 状态标志 + private void MainWindow_FormClosing(object sender, FormClosingEventArgs e) { if (_isClosing) return; @@ -509,34 +495,30 @@ namespace DHSoftware this.Hide(); // 显示关闭界面 - CloseWindow.Instance.Show(); + CloseWindow.Instance.Show(); Thread.Sleep(200); try + { + // 执行关闭操作 + foreach (var camera in Cameras) { - // 执行关闭操作 - foreach (var camera in Cameras) - { - camera.CameraDisConnect(); - } - foreach (var camera in HKCameras) - { - camera.CameraDisConnect(); - } - PLC.PLCDisConnect(); - CloseWindow.Instance.Close();// 关闭提示窗口 - //Application.Exit(); - System.Environment.Exit(0); - - + camera.CameraDisConnect(); + } + foreach (var camera in HKCameras) + { + camera.CameraDisConnect(); + } + PLC.PLCDisConnect(); + CloseWindow.Instance.Close();// 关闭提示窗口 + //Application.Exit(); + System.Environment.Exit(0); } catch (Exception ex) - { - CloseWindow.Instance.Close(); - + { + CloseWindow.Instance.Close(); + System.Environment.Exit(0); - } - } private void segmented1_SelectIndexChanged(object sender, EventArgs e) @@ -550,40 +532,49 @@ namespace DHSoftware case 0: // "启动" (Start) HandleStartButton(); break; + case 1: // "停止" (Stop) HandleStopButton(); break; + case 2: // "复位" (Reset) HandleResetButton(); break; + case 3: // "设置" (Settings) HandleLoginButton(); break; + case 4: // "登录" (Login) HandleSettingsButton(); break; + default: break; } segmented1.SelectIndex = -1; } + public bool CurrentMachine = false; public volatile int ProductNum_Total = 0; public volatile int ProductNum_OK = 0; private readonly object _cameraSummaryLock = new object(); public SimboVisionDriver? _visionEngine = null; - + public PLCBase? _PLCConfig = null; - List DetectionConfigs = new List(); - List SimboStationMLEngineList = new List(); - Dictionary HalconToolDict = new Dictionary(); + private List DetectionConfigs = new List(); + private List SimboStationMLEngineList = new List(); + private Dictionary HalconToolDict = new Dictionary(); public List RecongnitionLabelList { get; set; } = new List(); public DateTime startTime; + private void HandleStartButton() { StartProcess(); } + private static int currentRegister = 411; // 初始为 D411 + private void StartProcess() { //计数清零 @@ -591,7 +582,6 @@ namespace DHSoftware //吹气点位归置 currentRegister = 411; - if (_PLCConfig?.Enable == true) { PLC.CountToZero(); @@ -606,12 +596,12 @@ namespace DHSoftware }); //PrepareBatchNO(); - // isInPositionChecking = false; + // isInPositionChecking = false; //isFullTrayChecking = false; //队列清空 - // var temp = new List(); - // temp.AddRange(XKRSPLCConfig.TriggerConfigCollection); - // temp.AddRange(XKRSPLCConfig.SnapshotTriggerConfigCollection); + // var temp = new List(); + // temp.AddRange(XKRSPLCConfig.TriggerConfigCollection); + // temp.AddRange(XKRSPLCConfig.SnapshotTriggerConfigCollection); //temp.ForEach(t => //{ @@ -632,22 +622,20 @@ namespace DHSoftware // return new ProcessResponse(false); //} + // _diskInfoListInOrder = XKRSPLCConfig.DiskInfoList.OrderBy(u => u.DiskSequence).ToList(); + // var axisNumList = _diskInfoListInOrder.Select(u => u.DiskAxisNum).ToList(); - // _diskInfoListInOrder = XKRSPLCConfig.DiskInfoList.OrderBy(u => u.DiskSequence).ToList(); - // var axisNumList = _diskInfoListInOrder.Select(u => u.DiskAxisNum).ToList(); + /// PrepareMLEngine(); - /// PrepareMLEngine(); - - - // if (_PLCConfig?.Enable == true) - //挡料电机操作 - // _PLC.FeedingMotor(_PLCConfig.CunToZeroSpeed, _PLCConfig.CunPos, _PLCConfig.CunSpeed, _PLCConfig.CunDirection); + // if (_PLCConfig?.Enable == true) + //挡料电机操作 + // _PLC.FeedingMotor(_PLCConfig.CunToZeroSpeed, _PLCConfig.CunPos, _PLCConfig.CunSpeed, _PLCConfig.CunDirection); //流程开启操作配置 - // ProcessInitialAction(); - // if (_PLC?Enabled == true) - //皮带 - // _PLC.Belt(true); + // ProcessInitialAction(); + // if (_PLC?Enabled == true) + //皮带 + // _PLC.Belt(true); //DeviceCollection.ForEach(d => //{ @@ -659,15 +647,18 @@ namespace DHSoftware // } //}); _productLists.Clear(); - #region 虚拟相机 + + #region 虚拟相机 + //mOfflineImageTimer = new System.Timers.Timer(); //mOfflineImageTimer.Elapsed += OnEmitSerialPortAsync; //mOfflineImageTimer.Interval = 1000; //mOfflineImageTimer.Start(); - #endregion - var settings = _visionEngine.DetectionConfigs.Where(u => u.IsEnabled && u.IsAddStation ).ToList(); + #endregion 虚拟相机 + + var settings = _visionEngine.DetectionConfigs.Where(u => u.IsEnabled && u.IsAddStation).ToList(); if (settings != null) { settings = settings.Where(s => s.IsEnabled).ToList(); @@ -680,7 +671,6 @@ namespace DHSoftware } } - // _MGSCameraList = DeviceCollection //.OfType() // 直接筛选出 MGSCameraDriver 类型的元素 //.Where(camera => camera.IConfig != null && camera.IConfig.IsEnabled) // 进一步筛选 IConfig 不为 null 且 IsEnabled 为 true @@ -694,7 +684,6 @@ namespace DHSoftware _productLists.Add(products); } - // 转盘操作 // if (_PLC?.IIConfig?.IsEnabled == true) @@ -703,7 +692,6 @@ namespace DHSoftware if (itemSpeed != null) { PLC.TurntableOpen(Convert.ToInt32(itemSpeed.Value), true); - } Thread.Sleep(500); @@ -715,12 +703,11 @@ namespace DHSoftware // _PLC.Vibratory(true); //} - //InitialOEEStatistic(); - // MachineState = MachineState.Running; - + // MachineState = MachineState.Running; } + private void PrepareMLEngine() { //if (_visionEngine == null) @@ -733,9 +720,6 @@ namespace DHSoftware // throw new ProcessException($"未能获取检测设备"); //} - - - //相机模组 //_cameraRelatedDetectionDict = new(); @@ -756,7 +740,6 @@ namespace DHSoftware // _cameraRelatedDetectionDict[cam.CameraSourceId].Add(detection.Id); // } - // }); //}); @@ -766,8 +749,6 @@ namespace DHSoftware #if false private void HandleStartButton2() { - - CurrentMachine = true; //_visionEngine.Start(); @@ -798,8 +779,6 @@ namespace DHSoftware RecongnitionLabelList.Add(recongnition2); RecongnitionLabelList.Add(recongnition3); - - var det1 = new DetectionConfig("相机1", ModelType.目标检测, @"D:\PROJECTS\X015\Vision\Cam1.onnx", false, "Cam1"); var det2 = new DetectionConfig("相机2", ModelType.目标检测, @"D:\PROJECTS\X015\Vision\Cam2.onnx", false, "Cam2"); var det3 = new DetectionConfig("相机3", ModelType.目标检测, @"D:\PROJECTS\X015\Vision\Cam3.onnx", false, "Cam3"); @@ -827,7 +806,6 @@ namespace DHSoftware float Conf = 0.5f; - det1.CameraCollects = CameraCollects; det1.ModelconfThreshold = Conf; det1.ModelWidth = 640; @@ -864,8 +842,6 @@ namespace DHSoftware det4.ShowLocation.X = 4; det4.ShowLocation.Y = 1; - - det5.CameraCollects = CameraCollects5; det5.ModelconfThreshold = Conf; det5.ModelWidth = 640; @@ -926,8 +902,6 @@ namespace DHSoftware camera.CameraConnect(); camera.OnHImageOutput += OnCameraHImageOutput; HKCameras.Add(camera); - - } #else //Do3ThinkCamera do3ThinkCamera1 = new Do3ThinkCamera(); @@ -939,7 +913,6 @@ namespace DHSoftware // Cameras.Add(do3ThinkCamera1); for (int i = 1; i <= 8; i++) { - Do3ThinkCamera cam = new Do3ThinkCamera(); if (i == 1) { @@ -956,13 +929,10 @@ namespace DHSoftware cam.OnHImageOutput += OnCameraHImageOutput; } - #endif - DetectionConfigs.ForEach(detection => { - detection.CameraCollects.ForEach(cam => { List Dets = new List @@ -977,15 +947,11 @@ namespace DHSoftware { _cameraRelatedDetectionDict[cam.CameraSourceId].Add(detection.Id); } - - } ); }); string inferenceDevice = "CPU"; - - _visionEngine = new SimboVisionDriver(); _visionEngine.DetectionConfigs = DetectionConfigs; @@ -1016,12 +982,9 @@ namespace DHSoftware sLDMotion.IODefinitionCollection = new List(); Motion(sLDMotion.IODefinitionCollection); - - sLDMotion.SnapshotSettings = new List(); int[] cameraPositions = { 24161, 33608, 39702, 45701 }; - sLDMotion.SnapshotSettings.Add(new SnapshotSetting { IsEnabled = true, @@ -1040,8 +1003,6 @@ namespace DHSoftware }); } - - sLDMotion.BlowSettings = new List(); int[] BlowPositions = { 61353, 68566 }; sLDMotion.BlowSettings.Add(new BlowSetting @@ -1065,8 +1026,6 @@ namespace DHSoftware //sna1.CameraPosition = 17000; //sna1.StationNumber = 0; - - // sLDMotion.SnapshotSettings.Add(sna1); sLDMotion.AxisSettings.Add(axis1); sLDMotion.Init(); @@ -1114,11 +1073,11 @@ namespace DHSoftware } #endif - private uint PieceCount = 0; private List> _productLists = new List>(); private int ProductListMulti = 2; private int ProductBaseCount = 0; + private int PieceNumberToIndex(uint pn) { // 物料编号,取余 集合数量 @@ -1126,7 +1085,9 @@ namespace DHSoftware int ret = (int)(pn % (ProductBaseCount * ProductListMulti)); return ret; } - DateTime _ctTime = DateTime.Now; + + private DateTime _ctTime = DateTime.Now; + public async void MainMotion_NewPieces(int axisIndex, uint pieceNumber) { //if (MachineState != MachineState.Running && MachineState != MachineState.Warning) @@ -1134,10 +1095,8 @@ namespace DHSoftware // return; //} - PieceCount++; - int index = PieceNumberToIndex(pieceNumber); // productDatas.Add(pData); //转盘2 的物料是不是重新覆盖之前的pDta @@ -1150,14 +1109,12 @@ namespace DHSoftware Task.Run(() => { //this.BeginInvoke(new MethodInvoker(delegate () { richTextBox1.AppendText(logStr); })); - }); DateTime dtNow = DateTime.Now; UpdateCT(null, (float)(dtNow - _ctTime).TotalSeconds); _ctTime = dtNow; - - } + public async Task UpdateCT(object objData, float ctTime) { await Task.Run(() => @@ -1165,6 +1122,7 @@ namespace DHSoftware //OnUpdateCT?.Invoke(objData, ctTime); }); } + /// /// 相机回调 /// @@ -1173,7 +1131,6 @@ namespace DHSoftware /// private void OnCameraHImageOutput(DateTime dt, CameraBase camera, Mat imageSet) { - //if (camera.CameraName.Equals("cam1", StringComparison.OrdinalIgnoreCase)) //{ // Console.WriteLine(); @@ -1230,7 +1187,6 @@ namespace DHSoftware localImageSet.Dispose(); this.BeginInvoke(new MethodInvoker(delegate () { - int currentScrollPosition = richTextBox1.GetPositionFromCharIndex(richTextBox1.TextLength).Y; richTextBox1.AppendText(productNumber + "提前推出" + camera.CameraName); @@ -1252,11 +1208,9 @@ namespace DHSoftware if (!_cameraRelatedDetectionDict.ContainsKey(camera.CameraName)) { - localImageSet.Dispose(); this.BeginInvoke(new MethodInvoker(delegate () { - int currentScrollPosition = richTextBox1.GetPositionFromCharIndex(richTextBox1.TextLength).Y; richTextBox1.AppendText(productNumber + "提前推出" + camera.CameraName); @@ -1276,33 +1230,23 @@ namespace DHSoftware return; } - double totalTime = 0.0; List resultStates = new List(); List? detectionDict = _cameraRelatedDetectionDict[camera.CameraName]; - for (int i = 0; i < detectionDict.Count; i++) { string detectionId = detectionDict[i]; - - - - // 1. 预处理 using (Mat inferenceImage = localImageSet.Clone()) // 仅在此处克隆,确保推理过程中 Mat 有独立副本 { - DetectStationResult temp1=_visionEngine.RunInference(inferenceImage, detectionId); + DetectStationResult temp1 = _visionEngine.RunInference(inferenceImage, detectionId); resultStates.Add(temp1.ResultState); product.ResultCollection.Add(temp1); - - } - - } product.InferenceOne(); @@ -1311,14 +1255,12 @@ namespace DHSoftware if (!product.InferenceFinished()) { - return; } ProductNum_Total++; CalculateOEE(); this.BeginInvoke(new MethodInvoker(delegate () { - int currentScrollPosition = richTextBox1.GetPositionFromCharIndex(richTextBox1.TextLength).Y; richTextBox1.AppendText($"统计结果成功,{productNumber} 吹气!\n"); @@ -1327,22 +1269,18 @@ namespace DHSoftware richTextBox1.SelectionStart = richTextBox1.TextLength; richTextBox1.ScrollToCaret(); })); + #region 6. 统计产品结果 + product.ProductResult = product.ResultCollection.Any(u => u.ResultState != ResultState.OK) ? ResultState.B_NG : ResultState.OK; product.ProductLabelCategory = product.ProductResult.GetEnumDescription(); product.ProductLabel = product.ProductResult.GetEnumDescription(); - #endregion - #region 7.产品吹气 - #endregion + #endregion 6. 统计产品结果 - - - - - // 出列 + // 出列 ProductData temp = null; int tryTimes = 10; @@ -1362,7 +1300,6 @@ namespace DHSoftware $"当前队列产品数量:{tmpDic.Count}"; this.BeginInvoke(new MethodInvoker(delegate () { - int currentScrollPosition = richTextBox1.GetPositionFromCharIndex(richTextBox1.TextLength).Y; richTextBox1.AppendText(logStr); @@ -1381,7 +1318,6 @@ namespace DHSoftware $"当前队列产品数量:{tmpDic.Count}"; this.BeginInvoke(new MethodInvoker(delegate () { - int currentScrollPosition = richTextBox1.GetPositionFromCharIndex(richTextBox1.TextLength).Y; richTextBox1.AppendText(logStr); @@ -1396,7 +1332,6 @@ namespace DHSoftware { sw.WriteLine(logStr); } - } catch (Exception) { } finally @@ -1407,10 +1342,8 @@ namespace DHSoftware } // UpdateCT((float)(dtNow - _ctTime).TotalSeconds); - //_ctTime = dtNow; + //_ctTime = dtNow; // }); - - } catch (Exception ex) { @@ -1418,18 +1351,11 @@ namespace DHSoftware product?.Dispose(); } } - }); } - public void SetResult() { - - - - - //// detectResult.IsPreTreatDone = detectResult.VisionImageSet.PreTreatedFlag ////2024-02-29 目标检测不能全是NG //if (IsPreTreatNG || IsObjectDetectNG) @@ -1437,25 +1363,25 @@ namespace DHSoftware // return; //} - - //if (IsPreTreatDone && IsMLDetectDone && IsAfterTreatDone) //{ // ResultState = ResultState.OK; // ResultLabel = ResultState.OK.GetEnumDescription(); //} - } + private void HandleStopButton() { Cameras.Clear(); Dectection.Clear(); // Add the code for the "停止" button click here - PLC.TurntableStop(); + PLC.TurntableStop(); CurrentMachine = true; sLDMotion.Stop(); } + public int UPH = 0; + public void CalculateOEE() { TimeSpan timeSpan = DateTime.Now - startTime; @@ -1466,10 +1392,8 @@ namespace DHSoftware { label1.Text = UPH.ToString(); })); - - - } + private void HandleResetButton() { // Add the code for the "复位" button click here @@ -1481,19 +1405,17 @@ namespace DHSoftware // Add the code for the "设置" button click here SettingWindow.Instance.Show(); - } private void HandleLoginButton() { // Add the code for the "登录" button click here - LoginWindow.Instance.Owner = this; - LoginWindow.Instance.Show(); + LoginWindow.Instance.Owner = this; + LoginWindow.Instance.Show(); } private void splitter1_SplitterMoved(object sender, SplitterEventArgs e) { - } } -} +} \ No newline at end of file diff --git a/DHSoftware/Models/DataModel.cs b/DHSoftware/Models/DataModel.cs index 2d36f4c..dafd868 100644 --- a/DHSoftware/Models/DataModel.cs +++ b/DHSoftware/Models/DataModel.cs @@ -1,16 +1,12 @@ using AntdUI; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace DHSoftware.Models { public class DataModel { } - public class DefectRow:NotifyProperty + + public class DefectRow : NotifyProperty { private bool selected = false; public string LabelId { get; set; } @@ -35,4 +31,4 @@ namespace DHSoftware.Models } } } -} +} \ No newline at end of file diff --git a/DHSoftware/Models/DataUtil.cs b/DHSoftware/Models/DataUtil.cs index cec7af6..eb23c3e 100644 --- a/DHSoftware/Models/DataUtil.cs +++ b/DHSoftware/Models/DataUtil.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; - -namespace AntdUIDemo.Models +namespace AntdUIDemo.Models { public class DataUtil { @@ -220,9 +218,5 @@ namespace AntdUIDemo.Models { "Chat", "MessageOutlined" }, { "Other", "SettingOutlined" } }; - - } - - -} +} \ No newline at end of file diff --git a/DHSoftware/Models/Entities.cs b/DHSoftware/Models/Entities.cs index d5984be..4215e1d 100644 --- a/DHSoftware/Models/Entities.cs +++ b/DHSoftware/Models/Entities.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using SqlSugar; +using SqlSugar; namespace DHSoftware.Models { @@ -65,4 +60,4 @@ namespace DHSoftware.Models [SugarColumn(IsPrimaryKey = true)] public string PermissionCode { get; set; } } -} +} \ No newline at end of file diff --git a/DHSoftware/Models/FileName.cs b/DHSoftware/Models/FileName.cs index 1a9389c..1d93e34 100644 --- a/DHSoftware/Models/FileName.cs +++ b/DHSoftware/Models/FileName.cs @@ -1,20 +1,9 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - - -namespace DHSoftware.Models +namespace DHSoftware.Models { public class Camera { public string DeviceName { get; set; } public string Alias { get; set; } public string ImagePath { get; set; } - } - - - } +} \ No newline at end of file diff --git a/DHSoftware/Models/MenuItems.cs b/DHSoftware/Models/MenuItems.cs index f7f9b3d..e61531c 100644 --- a/DHSoftware/Models/MenuItems.cs +++ b/DHSoftware/Models/MenuItems.cs @@ -6,4 +6,4 @@ public string Text { get; set; } = string.Empty; public string Tag { get; set; } = null; } -} +} \ No newline at end of file diff --git a/DHSoftware/Services/AuthService.cs b/DHSoftware/Services/AuthService.cs index 9e11686..e586688 100644 --- a/DHSoftware/Services/AuthService.cs +++ b/DHSoftware/Services/AuthService.cs @@ -1,15 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using DHSoftware.Models; +using DHSoftware.Models; using DHSoftware.Utils; using SqlSugar; namespace DHSoftware.Services { - public static class AuthService { public static User CurrentUser { get; private set; } @@ -37,11 +31,11 @@ namespace DHSoftware.Services using (var db = DatabaseUtil.GetDatabase()) { - return db.Queryable() - .InnerJoin((ur, rp) => ur.RoleId == rp.RoleId) - .Where((ur, rp) => ur.UserId == CurrentUser.Id) - .Where((ur, rp) => rp.PermissionCode == permissionCode) - .Any(); + return db.Queryable() + .InnerJoin((ur, rp) => ur.RoleId == rp.RoleId) + .Where((ur, rp) => ur.UserId == CurrentUser.Id) + .Where((ur, rp) => rp.PermissionCode == permissionCode) + .Any(); } } @@ -67,4 +61,4 @@ namespace DHSoftware.Services .ExecuteCommand(); } } -} +} \ No newline at end of file diff --git a/DHSoftware/Utils/AdaptiveHelper.cs b/DHSoftware/Utils/AdaptiveHelper.cs index 15f77cd..c69617a 100644 --- a/DHSoftware/Utils/AdaptiveHelper.cs +++ b/DHSoftware/Utils/AdaptiveHelper.cs @@ -1,18 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using AntdUI; - -namespace DHSoftware.Utils +namespace DHSoftware.Utils { public static class AdaptiveHelper { #region 控件大小随窗体大小等比例缩放 - - public static void setTag(Control cons) { foreach (Control con in cons.Controls) @@ -35,15 +26,13 @@ namespace DHSoftware.Utils con.Height = Convert.ToInt32(Convert.ToSingle(mytag[1]) * newy); //高度 con.Left = Convert.ToInt32(Convert.ToSingle(mytag[2]) * newx); //左边距 con.Top = Convert.ToInt32(Convert.ToSingle(mytag[3]) * newy); //顶边距 - var currentSize = Convert.ToSingle(mytag[4]) * newy; //字体大小 + var currentSize = Convert.ToSingle(mytag[4]) * newy; //字体大小 if (currentSize > 0) con.Font = new Font(con.Font.Name, currentSize, con.Font.Style, con.Font.Unit); con.Focus(); if (con.Controls.Count > 0) setControls(newx, newy, con); } } - - - #endregion + #endregion 控件大小随窗体大小等比例缩放 } -} +} \ No newline at end of file diff --git a/DHSoftware/Utils/DataBaseUtil.cs b/DHSoftware/Utils/DataBaseUtil.cs index bc048cc..5c3a96c 100644 --- a/DHSoftware/Utils/DataBaseUtil.cs +++ b/DHSoftware/Utils/DataBaseUtil.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using DHSoftware.Models; +using DHSoftware.Models; using SqlSugar; namespace DHSoftware.Utils @@ -153,4 +148,4 @@ namespace DHSoftware.Utils } } } -} +} \ No newline at end of file diff --git a/DHSoftware/Utils/HashHelper.cs b/DHSoftware/Utils/HashHelper.cs index c3749b6..202baa0 100644 --- a/DHSoftware/Utils/HashHelper.cs +++ b/DHSoftware/Utils/HashHelper.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Security.Cryptography; +using System.Security.Cryptography; using System.Text; -using System.Threading.Tasks; namespace DHSoftware.Utils { @@ -20,4 +16,4 @@ namespace DHSoftware.Utils } } } -} +} \ No newline at end of file diff --git a/DHSoftware/Utils/ThemeHelper.cs b/DHSoftware/Utils/ThemeHelper.cs index 7bc2147..bba023d 100644 --- a/DHSoftware/Utils/ThemeHelper.cs +++ b/DHSoftware/Utils/ThemeHelper.cs @@ -1,5 +1,4 @@ using Microsoft.Win32; -using System.Drawing; namespace DHSoftware.Utils { @@ -45,4 +44,4 @@ namespace DHSoftware.Utils } } } -} +} \ No newline at end of file diff --git a/DHSoftware/Views/SettingWindow.cs b/DHSoftware/Views/SettingWindow.cs index 35b584c..b015f75 100644 --- a/DHSoftware/Views/SettingWindow.cs +++ b/DHSoftware/Views/SettingWindow.cs @@ -4,25 +4,26 @@ using DH.Commons.Helper; using DH.Commons.Models; using DHSoftware.Utils; using DH.Commons.Base; + namespace DHSoftware.Views { public partial class SettingWindow : Window { private UserControl currControl; - public SettingWindow() { InitializeComponent(); BindEventHandler(); InitData(); - } + /// /// 窗体对象实例 /// private static SettingWindow _instance; + internal static SettingWindow Instance { get @@ -32,159 +33,153 @@ namespace DHSoftware.Views return _instance; } } + private void BindEventHandler() { Resize += SettingWindow1_Resize; btnAdd.SelectedValueChanged += btnAdd_SelectedValueChanged; btnSave.Click += BtnSave_Click; menu1.SelectChanged += Menu1_SelectChanged; - } private void Menu1_SelectChanged(object sender, MenuSelectEventArgs e) { - - MenuItem clickedItem = e.Value; + MenuItem clickedItem = e.Value; - if (clickedItem != null) + if (clickedItem != null) + { + if (clickedItem.PARENTITEM == null) { - if (clickedItem.PARENTITEM == null) - { - return; - } - - switch (clickedItem.PARENTITEM.Text) - { - case "相机设置": - foreach (var tab in tabs1.Pages) - { - if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}") - { - isUpdatingTabs = true; - tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage - isUpdatingTabs = false; - currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null; - return; - } - } - //先获取是否存在该名称的配置 - //如果没有新建项 - CameraBase? CameraBase = ConfigModel.CameraBaseList.Where(c => c.CameraName == clickedItem.Text).FirstOrDefault(); - if (CameraBase == null) - { - CameraBase = new CameraBase(); - } - UserControl control = null; - control = new CameraControl(this, CameraBase); - if (control != null) - { - //容器添加控件,需要调整dpi - control.Dock = DockStyle.Fill; - AutoDpi(control); - AntdUI.TabPage tabPage = new AntdUI.TabPage() - { - Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}", - ReadOnly = false, - - }; - tabPage.Controls.Add(control); - tabs1.Pages.Add(tabPage); - isUpdatingTabs = true; - tabs1.SelectedTab = tabPage; - isUpdatingTabs = false; - currControl = control; - } - break; - case "工位设置": - // 检查是否已存在同名 TabPage - foreach (var tab in tabs1.Pages) - { - if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}") - { - isUpdatingTabs = true; - tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage - isUpdatingTabs = false; - currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null; - return; - } - } - DetectionConfig? detectionConfig = ConfigModel.DetectionList.Where(c => c.Name == clickedItem.Text).FirstOrDefault(); - if (detectionConfig == null) - { - detectionConfig = new DetectionConfig(); - } - UserControl control1 = null; - control1 = new DetectControl(this, detectionConfig); - if (control1 != null) - { - //容器添加控件,需要调整dpi - control1.Dock = DockStyle.Fill; - AutoDpi(control1); - AntdUI.TabPage tabPage = new AntdUI.TabPage() - { - Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}", - ReadOnly = false, - - }; - tabPage.Controls.Add(control1); - tabs1.Pages.Add(tabPage); - isUpdatingTabs = true; - tabs1.SelectedTab = tabPage; - isUpdatingTabs = false; - currControl = control1; - } - break; - - case "运控设置": - foreach (var tab in tabs1.Pages) - { - if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}") - { - isUpdatingTabs = true; - tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage - isUpdatingTabs = false; - currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null; - return; - } - } - //先获取是否存在该名称的配置 - //如果没有新建项 - PLCBase? pLCBase = ConfigModel.PLCBaseList.Where(c => c.PLCName == clickedItem.Text).FirstOrDefault(); - if (pLCBase == null) - { - pLCBase = new PLCBase(); - } - UserControl control2 = null; - control = new MotionControl(this, pLCBase); - if (control != null) - { - //容器添加控件,需要调整dpi - control.Dock = DockStyle.Fill; - AutoDpi(control); - AntdUI.TabPage tabPage = new AntdUI.TabPage() - { - Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}", - ReadOnly = false, - - }; - tabPage.Controls.Add(control); - tabs1.Pages.Add(tabPage); - isUpdatingTabs = true; - tabs1.SelectedTab = tabPage; - isUpdatingTabs = false; - currControl = control; - } - break; - - - } + return; } - + switch (clickedItem.PARENTITEM.Text) + { + case "相机设置": + foreach (var tab in tabs1.Pages) + { + if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}") + { + isUpdatingTabs = true; + tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage + isUpdatingTabs = false; + currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null; + return; + } + } + //先获取是否存在该名称的配置 + //如果没有新建项 + CameraBase? CameraBase = ConfigModel.CameraBaseList.Where(c => c.CameraName == clickedItem.Text).FirstOrDefault(); + if (CameraBase == null) + { + CameraBase = new CameraBase(); + } + UserControl control = null; + control = new CameraControl(this, CameraBase); + if (control != null) + { + //容器添加控件,需要调整dpi + control.Dock = DockStyle.Fill; + AutoDpi(control); + AntdUI.TabPage tabPage = new AntdUI.TabPage() + { + Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}", + ReadOnly = false, + }; + tabPage.Controls.Add(control); + tabs1.Pages.Add(tabPage); + isUpdatingTabs = true; + tabs1.SelectedTab = tabPage; + isUpdatingTabs = false; + currControl = control; + } + break; + + case "工位设置": + // 检查是否已存在同名 TabPage + foreach (var tab in tabs1.Pages) + { + if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}") + { + isUpdatingTabs = true; + tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage + isUpdatingTabs = false; + currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null; + return; + } + } + DetectionConfig? detectionConfig = ConfigModel.DetectionList.Where(c => c.Name == clickedItem.Text).FirstOrDefault(); + if (detectionConfig == null) + { + detectionConfig = new DetectionConfig(); + } + UserControl control1 = null; + control1 = new DetectControl(this, detectionConfig); + if (control1 != null) + { + //容器添加控件,需要调整dpi + control1.Dock = DockStyle.Fill; + AutoDpi(control1); + AntdUI.TabPage tabPage = new AntdUI.TabPage() + { + Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}", + ReadOnly = false, + }; + tabPage.Controls.Add(control1); + tabs1.Pages.Add(tabPage); + isUpdatingTabs = true; + tabs1.SelectedTab = tabPage; + isUpdatingTabs = false; + currControl = control1; + } + break; + + case "运控设置": + foreach (var tab in tabs1.Pages) + { + if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}") + { + isUpdatingTabs = true; + tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage + isUpdatingTabs = false; + currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null; + return; + } + } + //先获取是否存在该名称的配置 + //如果没有新建项 + PLCBase? pLCBase = ConfigModel.PLCBaseList.Where(c => c.PLCName == clickedItem.Text).FirstOrDefault(); + if (pLCBase == null) + { + pLCBase = new PLCBase(); + } + UserControl control2 = null; + control = new MotionControl(this, pLCBase); + if (control != null) + { + //容器添加控件,需要调整dpi + control.Dock = DockStyle.Fill; + AutoDpi(control); + AntdUI.TabPage tabPage = new AntdUI.TabPage() + { + Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}", + ReadOnly = false, + }; + tabPage.Controls.Add(control); + tabs1.Pages.Add(tabPage); + isUpdatingTabs = true; + tabs1.SelectedTab = tabPage; + isUpdatingTabs = false; + currControl = control; + } + break; + } + } } private float x; //定义当前窗体的宽度 private float y; //定义当前窗体的高度 + private void InitData() { btnAdd.Items.Clear(); @@ -196,68 +191,60 @@ namespace DHSoftware.Views y = Height; AdaptiveHelper.setTag(this); - - if (ConfigModel.CameraBaseList.Count > 0) + if (ConfigModel.CameraBaseList.Count > 0) + { + var workstationItem = FindMenuItem(menu1.Items, "相机设置"); + + if (workstationItem != null) { - var workstationItem = FindMenuItem(menu1.Items, "相机设置"); - - if (workstationItem != null) + foreach (var item in ConfigModel.CameraBaseList) { - foreach (var item in ConfigModel.CameraBaseList) - { - var newItem = new MenuItem(); - newItem.Text = item.CameraName; - newItem.IconSvg = "VideoCameraOutlined"; - workstationItem.Sub.Add(newItem); - - } - } - } - if (ConfigModel.DetectionList.Count > 0) - { - var workstationItem = FindMenuItem(menu1.Items, "工位设置"); - - if (workstationItem != null) - { - foreach (var item in ConfigModel.DetectionList) - { - var newItem = new MenuItem(); - newItem.Text = item.Name; - newItem.IconSvg = "AppstoreOutlined"; - workstationItem.Sub.Add(newItem); - - } - } - } - - if (ConfigModel.PLCBaseList.Count > 0) - { - var workstationItem = FindMenuItem(menu1.Items, "运控设置"); - - if (workstationItem != null) - { - foreach (var item in ConfigModel.PLCBaseList) - { - var newItem = new MenuItem(); - newItem.Text = item.PLCName; - newItem.IconSvg = "ControlOutlined"; - workstationItem.Sub.Add(newItem); - - } + var newItem = new MenuItem(); + newItem.Text = item.CameraName; + newItem.IconSvg = "VideoCameraOutlined"; + workstationItem.Sub.Add(newItem); } } } - + if (ConfigModel.DetectionList.Count > 0) + { + var workstationItem = FindMenuItem(menu1.Items, "工位设置"); + + if (workstationItem != null) + { + foreach (var item in ConfigModel.DetectionList) + { + var newItem = new MenuItem(); + newItem.Text = item.Name; + newItem.IconSvg = "AppstoreOutlined"; + workstationItem.Sub.Add(newItem); + } + } + } + + if (ConfigModel.PLCBaseList.Count > 0) + { + var workstationItem = FindMenuItem(menu1.Items, "运控设置"); + + if (workstationItem != null) + { + foreach (var item in ConfigModel.PLCBaseList) + { + var newItem = new MenuItem(); + newItem.Text = item.PLCName; + newItem.IconSvg = "ControlOutlined"; + workstationItem.Sub.Add(newItem); + } + } + } + } private void BtnSave_Click(object? sender, EventArgs e) { - - ConfigHelper.SaveConfig(); - AntdUI.Message.success(this, "保存成功!", autoClose: 3); - + ConfigHelper.SaveConfig(); + AntdUI.Message.success(this, "保存成功!", autoClose: 3); } - private void SettingWindow1_Resize(object? sender, EventArgs e) { var newx = Width / x; @@ -265,13 +252,6 @@ namespace DHSoftware.Views AdaptiveHelper.setControls(newx, newy, this); } - - - - - - - // 递归查找菜单项 private MenuItem FindMenuItem(MenuItemCollection items, string targetText) { @@ -287,17 +267,12 @@ namespace DHSoftware.Views return null; } - - - bool isUpdatingTabs = false; - + private bool isUpdatingTabs = false; private void menu1_MouseDown(object sender, MouseEventArgs e) { - - if (e.Button == MouseButtons.Right) + if (e.Button == MouseButtons.Right) { - // 转换坐标到控件内部坐标系(考虑滚动条) Point clickPoint = new Point(e.X, e.Y + menu1.ScrollBar.Value); @@ -315,7 +290,7 @@ namespace DHSoftware.Views { case "相机设置": var menulist = new AntdUI.IContextMenuStripItem[] - { + { new AntdUI.ContextMenuStripItem("重命名", "") { IconSvg = "RetweetOutlined" @@ -324,7 +299,6 @@ namespace DHSoftware.Views { IconSvg = "DeleteOutlined" } - }; AntdUI.ContextMenuStrip.open(menu1, it => { @@ -346,6 +320,7 @@ namespace DHSoftware.Views } ConfigModel.CameraBaseList.RemoveAll(c => c.CameraName == clickedItem.Text); break; + case "重命名": // 保存原始名称用于查找 string originalName = clickedItem.Text; @@ -374,7 +349,7 @@ namespace DHSoftware.Views return; } - clickedItem.Text= newName; + clickedItem.Text = newName; var camera = ConfigModel.CameraBaseList.FirstOrDefault(c => c.CameraName.Equals(originalName, StringComparison.OrdinalIgnoreCase)); camera.CameraName = newName; @@ -393,9 +368,9 @@ namespace DHSoftware.Views } break; } - }, menulist); break; + case "工位设置": var menulist1 = new AntdUI.IContextMenuStripItem[] { new AntdUI.ContextMenuStripItem("重命名", "") @@ -406,7 +381,6 @@ namespace DHSoftware.Views { IconSvg = "DeleteOutlined" } - }; AntdUI.ContextMenuStrip.open(menu1, it => { @@ -427,6 +401,7 @@ namespace DHSoftware.Views } ConfigModel.DetectionList.RemoveAll(c => c.Name == clickedItem.Text); break; + case "重命名": // 保存原始名称用于查找 string originalName = clickedItem.Text; @@ -479,7 +454,7 @@ namespace DHSoftware.Views case "运控设置": var menulist2 = new AntdUI.IContextMenuStripItem[] - { + { new AntdUI.ContextMenuStripItem("重命名", "") { IconSvg = "RetweetOutlined" @@ -488,13 +463,12 @@ namespace DHSoftware.Views { IconSvg = "DeleteOutlined" } - }; AntdUI.ContextMenuStrip.open(menu1, it => { - switch (it.Text) - { - case "删除运控": + switch (it.Text) + { + case "删除运控": menu1.Remove(clickedItem); foreach (var tab in tabs1.Pages) { @@ -512,7 +486,8 @@ namespace DHSoftware.Views ConfigModel.PLCBaseList.RemoveAll(c => c.PLCName == clickedItem.Text); break; - case "重命名": + + case "重命名": var form = new AddMotionControl(this, "重命名运动控制操作") { Size = new Size(300, 200) }; AntdUI.Modal.open(new AntdUI.Modal.Config(this, "", form, TType.None) @@ -553,23 +528,15 @@ namespace DHSoftware.Views } } - - break; + break; } - - - - }, menulist2); break; - - } } - } + } } - private MenuItem FindClickedItem(MenuItemCollection items, Point clickPoint) { foreach (MenuItem item in items) @@ -590,20 +557,17 @@ namespace DHSoftware.Views return null; } - - private void btnAdd_SelectedValueChanged(object sender, ObjectNEventArgs e) { string selectedValue = e.Value.ToString(); - switch (selectedValue) + switch (selectedValue) { case "相机设置": var workstationItem = FindMenuItem(menu1.Items, "相机设置"); if (workstationItem != null) { - - var form = new AddCameraControl(this,"新增相机操作") { Size = new Size(300, 200) }; + var form = new AddCameraControl(this, "新增相机操作") { Size = new Size(300, 200) }; AntdUI.Modal.open(new AntdUI.Modal.Config(this, "", form, TType.None) { BtnHeight = 0, @@ -627,14 +591,14 @@ namespace DHSoftware.Views } } break; + case "工位设置": // 查找工位设置项 - var workstationItem1= FindMenuItem(menu1.Items, "工位设置"); + var workstationItem1 = FindMenuItem(menu1.Items, "工位设置"); if (workstationItem1 != null) { - - var form = new AddCubicleControl(this,"新增工位操作") { Size = new Size(300, 200) }; + var form = new AddCubicleControl(this, "新增工位操作") { Size = new Size(300, 200) }; AntdUI.Modal.open(new AntdUI.Modal.Config(this, "", form, TType.None) { BtnHeight = 0, @@ -647,7 +611,7 @@ namespace DHSoftware.Views if (!workstationItem1.Sub.Cast().Any(m => m.Text == newItem.Text)) { workstationItem1.Sub.Add(newItem); - DetectionConfig detection = new DetectionConfig(); + DetectionConfig detection = new DetectionConfig(); detection.Name = form.CubicleName; ConfigModel.DetectionList.Add(detection); } @@ -658,13 +622,13 @@ namespace DHSoftware.Views } } break; + case "运控设置": var workstationItem2 = FindMenuItem(menu1.Items, "运控设置"); if (workstationItem2 != null) { - - var form = new AddMotionControl(this,"新增运动控制操作") { Size = new Size(300, 200) }; + var form = new AddMotionControl(this, "新增运动控制操作") { Size = new Size(300, 200) }; AntdUI.Modal.open(new AntdUI.Modal.Config(this, "", form, TType.None) { BtnHeight = 0, @@ -691,5 +655,4 @@ namespace DHSoftware.Views } } } -} - +} \ No newline at end of file