SettingPage.xaml.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. using CCDCount.DLL;
  2. using CCDCount.MODEL.CameraClass;
  3. using CCDCount.MODEL.ConfigModel;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.IO;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window;
  10. namespace CCDCountWpf.WpfPage
  11. {
  12. /// <summary>
  13. /// SettingPage.xaml 的交互逻辑
  14. /// </summary>
  15. public partial class SettingPage : Page
  16. {
  17. public SettingPage()
  18. {
  19. InitializeComponent();
  20. DataContext = ShowMessageBus.ShowBinding;
  21. Cam1Btn_Click(null, null);
  22. InitFormationItems();
  23. }
  24. private void Page_Loaded(object sender, RoutedEventArgs e)
  25. {
  26. CamNumCoBox.Items.Add("单相机");
  27. CamNumCoBox.Items.Add("双相机");
  28. CamNumCoBox.Items.Add("三相机");
  29. CamNumCoBox.Items.Add("四相机");
  30. CamNumCoBox.SelectedIndex = 0;
  31. if (MessageBus.NowSettingLoadMainThread != null)
  32. {
  33. CamSelectConBox.SelectedValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  34. if(MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode == -1)
  35. {
  36. CheckModel1RadBtn.IsChecked = true;
  37. }
  38. else if(MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode == 0)
  39. {
  40. CheckModel2RadBtn.IsChecked = true;
  41. }
  42. else if (MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode == 1)
  43. {
  44. CheckModel3RadBtn.IsChecked = true;
  45. }
  46. else if (MessageBus.NowSettingLoadMainThread.shuLiConfig.PandingCode == 2)
  47. {
  48. CheckModel4RadBtn.IsChecked = true;
  49. }
  50. }
  51. else
  52. {
  53. CamSelectConBox.SelectedValue = "";
  54. }
  55. }
  56. private void CamNumCoBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  57. {
  58. if(CamNumCoBox.SelectedItem.ToString() == "单相机")
  59. {
  60. Cam1Btn.Visibility = Visibility.Visible;
  61. Cam2Btn.Visibility = Visibility.Collapsed;
  62. Cam3Btn.Visibility = Visibility.Collapsed;
  63. Cam4Btn.Visibility = Visibility.Collapsed;
  64. if(!(MessageBus.SeetingNowLoadInMaThreadsIndex>0&&MessageBus.SeetingNowLoadInMaThreadsIndex < 1))
  65. {
  66. Cam1Btn_Click(null, null);
  67. }
  68. }
  69. else if(CamNumCoBox.SelectedItem.ToString() == "双相机")
  70. {
  71. Cam1Btn.Visibility = Visibility.Visible;
  72. Cam2Btn.Visibility = Visibility.Visible;
  73. Cam3Btn.Visibility = Visibility.Collapsed;
  74. Cam4Btn.Visibility = Visibility.Collapsed;
  75. if (!(MessageBus.SeetingNowLoadInMaThreadsIndex > 0 && MessageBus.SeetingNowLoadInMaThreadsIndex < 2))
  76. {
  77. Cam1Btn_Click(null, null);
  78. }
  79. }
  80. else if(CamNumCoBox.SelectedItem.ToString() == "三相机")
  81. {
  82. Cam1Btn.Visibility = Visibility.Visible;
  83. Cam2Btn.Visibility = Visibility.Visible;
  84. Cam3Btn.Visibility = Visibility.Visible;
  85. Cam4Btn.Visibility = Visibility.Collapsed;
  86. if (!(MessageBus.SeetingNowLoadInMaThreadsIndex > 0 && MessageBus.SeetingNowLoadInMaThreadsIndex < 3))
  87. {
  88. Cam1Btn_Click(null, null);
  89. }
  90. }
  91. else if(CamNumCoBox.SelectedItem.ToString() == "四相机")
  92. {
  93. Cam1Btn.Visibility = Visibility.Visible;
  94. Cam2Btn.Visibility = Visibility.Visible;
  95. Cam3Btn.Visibility = Visibility.Visible;
  96. Cam4Btn.Visibility = Visibility.Visible;
  97. }
  98. }
  99. private void Cam1Btn_Click(object sender, RoutedEventArgs e)
  100. {
  101. if (MessageBus.MainThreadS == null|| MessageBus.MainThreadS.Count<1|| MessageBus.MainThreadS[0] == null)
  102. return;
  103. MessageBus.SeetingNowLoadInMaThreadsIndex = 0;
  104. MessageBus.NowSettingLoadMainThread = MessageBus.MainThreadS[0];
  105. }
  106. private void Cam2Btn_Click(object sender, RoutedEventArgs e)
  107. {
  108. //MessageBus.ShowBondage.ExposureTimeValue = "300";
  109. MessageBox.Show($"NowThread.ETime:{MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue},Thread[0].ETime:{MessageBus.MainThreadS[0].cameraConfig.ExposureTimeValue}");
  110. }
  111. private void CameraSettingBtn_Click(object sender, RoutedEventArgs e)
  112. {
  113. CameraSettingGrid.Visibility = Visibility.Visible;
  114. ShuLiSettingGrid.Visibility = Visibility.Collapsed;
  115. }
  116. private void ShuLiSettingBtn_Click(object sender, RoutedEventArgs e)
  117. {
  118. CameraSettingGrid.Visibility = Visibility.Collapsed;
  119. ShuLiSettingGrid.Visibility = Visibility.Visible;
  120. }
  121. private void CamListFlushBtn_Click(object sender, RoutedEventArgs e)
  122. {
  123. List<CameraInfoClass> CameraInfoList = new List<CameraInfoClass>();
  124. MessageBus.CameraClass.GetCameraList(out CameraInfoList);
  125. if (CameraInfoList.Count > 0)
  126. {
  127. ShowMessageBus.ShowBinding.CameraItems.Clear();
  128. ShowMessageBus.ShowBinding.CameraItems.Add(new CameraCoboxItem() { Name = "请选择相机", SNValue = "" });
  129. foreach (var item in CameraInfoList)
  130. {
  131. ShowMessageBus.ShowBinding.CameraItems.Add(new CameraCoboxItem()
  132. {
  133. Name = item.DeviceName + "_" + item.DeviceSN,
  134. SNValue = item.DeviceSN
  135. });
  136. }
  137. CamSelectConBox.SelectedValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  138. }
  139. }
  140. private void CamSelectConBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  141. {
  142. if(ShowMessageBus.ShowBinding.CameraItems.Count == 0) return;
  143. //string ThisItemSN = ShowMessageBus.ShowBinding.CameraSNNum;
  144. string ThisItemSN = CamSelectConBox.SelectedValue.ToString();
  145. if (MessageBus.NowSettingLoadMainThread == null || ThisItemSN == MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum) return;
  146. if (ThisItemSN != string.Empty && ThisItemSN != null)
  147. {
  148. if (MessageBus.NowSettingLoadMainThread.CameraRunStatic)
  149. {
  150. var confirmResult = MessageBox.Show("检测到正在识别,切换相机需要关闭识别,是否继续切换",
  151. "切换确认", MessageBoxButton.YesNo);
  152. if (confirmResult == MessageBoxResult.No)
  153. {
  154. CamSelectConBox.SelectedValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  155. return;
  156. }
  157. MessageBus.NowSettingLoadMainThread.StopMianThread();
  158. }
  159. if (MessageBus.NowSettingLoadMainThread.ReLoadCamera(ThisItemSN))
  160. {
  161. MessageBus.NowSettingLoadMainThread.GetCameraConfig();
  162. ShowMessageBus.ShowBinding.ImageWidth = MessageBus.NowSettingLoadMainThread.cameraConfig.Width.ToString();
  163. ShowMessageBus.ShowBinding.CamUserName = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName;
  164. ShowMessageBus.ShowBinding.CamOffsetX = MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX.ToString();
  165. ShowMessageBus.ShowBinding.ExposureTimeValue = MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue.ToString();
  166. ShowMessageBus.ShowBinding.AcquistionLineRate = MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue.ToString();
  167. ShowMessageBus.ShowBinding.CameraSNNum = ThisItemSN;
  168. }
  169. else
  170. {
  171. MessageBox.Show("切换相机失败!");
  172. CamSelectConBox.SelectedItem = MessageBus.NowSettingLoadMainThread.cameraConfig.DeviceName + "_" + MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  173. return;
  174. }
  175. }
  176. else
  177. {
  178. if (MessageBus.NowSettingLoadMainThread.CameraRunStatic)
  179. {
  180. var confirmResult = MessageBox.Show("检测到正在识别,切换相机需要关闭识别,是否继续切换",
  181. "切换确认", MessageBoxButton.YesNo);
  182. if (confirmResult == MessageBoxResult.No)
  183. {
  184. CamSelectConBox.SelectedValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  185. return;
  186. }
  187. MessageBus.NowSettingLoadMainThread.StopMianThread();
  188. }
  189. else
  190. {
  191. MessageBus.NowSettingLoadMainThread.DisposeCamera();
  192. }
  193. ShowMessageBus.ShowBinding.ImageWidth = "0";
  194. ShowMessageBus.ShowBinding.CamUserName = string.Empty;
  195. ShowMessageBus.ShowBinding.CamOffsetX = "0";
  196. ShowMessageBus.ShowBinding.ExposureTimeValue = "0";
  197. ShowMessageBus.ShowBinding.AcquistionLineRate = "0";
  198. ShowMessageBus.ShowBinding.CameraSNNum = null;
  199. }
  200. }
  201. private void CheckModel1RadBtn_Checked(object sender, RoutedEventArgs e)
  202. {
  203. ShowMessageBus.ShowBinding.PandingCode = "-1";
  204. WHParaPanel.Visibility = Visibility.Collapsed;
  205. AreaParaPanel.Visibility = Visibility.Collapsed;
  206. }
  207. private void CheckModel2RadBtn_Checked(object sender, RoutedEventArgs e)
  208. {
  209. ShowMessageBus.ShowBinding.PandingCode = "0";
  210. WHParaPanel.Visibility = Visibility.Visible;
  211. AreaParaPanel.Visibility = Visibility.Collapsed;
  212. }
  213. private void CheckModel3RadBtn_Checked(object sender, RoutedEventArgs e)
  214. {
  215. ShowMessageBus.ShowBinding.PandingCode = "1";
  216. WHParaPanel.Visibility = Visibility.Collapsed;
  217. AreaParaPanel.Visibility = Visibility.Visible;
  218. }
  219. private void CheckModel4RadBtn_Checked(object sender, RoutedEventArgs e)
  220. {
  221. ShowMessageBus.ShowBinding.PandingCode = "2";
  222. WHParaPanel.Visibility = Visibility.Visible;
  223. AreaParaPanel.Visibility = Visibility.Visible;
  224. }
  225. //private void SaveAllConfigBtn_Click(object sender, RoutedEventArgs e)
  226. //{
  227. // List<SaveConfigModel> SaveConfig = new List<SaveConfigModel>();
  228. // if(MessageBus.MainThreadS.Count <= 0)
  229. // {
  230. // return;
  231. // }
  232. // foreach (var item in MessageBus.MainThreadS)
  233. // {
  234. // SaveConfig.Add(new SaveConfigModel()
  235. // {
  236. // CameraConfig = item.cameraConfig,
  237. // ShuLiConfigClass = item.shuLiConfig
  238. // });
  239. // }
  240. // if (!Directory.Exists(".\\Config\\")) Directory.CreateDirectory(".\\Config\\");
  241. // {
  242. // XmlStorage.SerializeToXml(SaveConfig, ".\\Config\\CCDCountConfig.xml");
  243. // }
  244. //}
  245. private void ReadFormulationBtn_Click(object sender, RoutedEventArgs e)
  246. {
  247. string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Formulations\\{FormulationCoBox.SelectedItem}.xml";
  248. if (!File.Exists(folderPath))
  249. {
  250. MessageBox.Show("指定文件不存在,请选择一个正确的配方");
  251. return;
  252. }
  253. try
  254. {
  255. FormulationConfigClass formulationConfigClass = null;
  256. formulationConfigClass = XmlStorage.DeserializeFromXml<FormulationConfigClass>(folderPath);
  257. LoadFormulation(formulationConfigClass);
  258. MessageBus.NowSettingLoadMainThread.FormulationName = formulationConfigClass.FormulationName;
  259. MessageBus.NowSettingLoadMainThread.IsLoadFormulation = true;
  260. MessageBox.Show("加载成功");
  261. }
  262. catch (Exception ex)
  263. {
  264. MessageBox.Show($"读取文件时出错:{ex.Message}");
  265. }
  266. }
  267. /// <summary>
  268. /// 初始化配方列表
  269. /// </summary>
  270. private void InitFormationItems()
  271. {
  272. string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Formulations";
  273. if (!Directory.Exists(folderPath))
  274. {
  275. // 创建文件夹
  276. Directory.CreateDirectory(folderPath);
  277. }
  278. try
  279. {
  280. // 获取文件列表(包含子目录)
  281. string[] files = Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories);
  282. ShowMessageBus.ShowBinding.FormulationItems.Clear();
  283. foreach (string file in files)
  284. {
  285. ShowMessageBus.ShowBinding.FormulationItems.Add(Path.GetFileNameWithoutExtension(file));
  286. }
  287. if(ShowMessageBus.ShowBinding.FormulationName!=null&&ShowMessageBus.ShowBinding.FormulationName!=string.Empty)
  288. {
  289. try
  290. {
  291. FormulationCoBox.SelectedItem = ShowMessageBus.ShowBinding.FormulationName;
  292. }
  293. catch { }
  294. }
  295. }
  296. catch
  297. { }
  298. }
  299. private void SaveFormulationBtn_Click(object sender, RoutedEventArgs e)
  300. {
  301. if (string.IsNullOrEmpty(ShowMessageBus.ShowBinding.FormulationName))
  302. {
  303. MessageBox.Show("请输入配方名称!");
  304. return;
  305. }
  306. FormulationConfigClass formulationConfigClass = FormulationClass.InitFormulation(
  307. MessageBus.NowSettingLoadMainThread.cameraConfig, MessageBus.NowSettingLoadMainThread.shuLiConfig);
  308. formulationConfigClass.FormulationName = ShowMessageBus.ShowBinding.FormulationName;
  309. string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Formulations";
  310. string FilePath = folderPath + "\\" + ShowMessageBus.ShowBinding.FormulationName + ".xml";
  311. if (File.Exists(FilePath))
  312. {
  313. var confirmResult = MessageBox.Show("配方已存在,是否覆盖?",
  314. "保存确认", MessageBoxButton.YesNo);
  315. if (confirmResult == MessageBoxResult.No)
  316. {
  317. return;
  318. }
  319. }
  320. if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath);
  321. {
  322. XmlStorage.SerializeToXml(formulationConfigClass , FilePath);
  323. InitFormationItems();
  324. MessageBus.NowSettingLoadMainThread.FormulationName = formulationConfigClass.FormulationName;
  325. MessageBus.NowSettingLoadMainThread.IsLoadFormulation = true;
  326. MessageBox.Show("保存成功");
  327. }
  328. }
  329. /// <summary>
  330. /// 加载配方
  331. /// </summary>
  332. /// <param name="FormulationConfig"></param>
  333. private void LoadFormulation(FormulationConfigClass FormulationConfig)
  334. {
  335. ShowMessageBus.ShowBinding.AcquistionLineRate = FormulationConfig.AcquistionLineRateValue.ToString();
  336. ShowMessageBus.ShowBinding.ExposureTimeValue = FormulationConfig.ExposureTimeValue.ToString();
  337. ShowMessageBus.ShowBinding.Channel = FormulationConfig.Channel.ToString();
  338. ShowMessageBus.ShowBinding.FormulationName = FormulationConfig.FormulationName;
  339. ShowMessageBus.ShowBinding.MAX_OBJECT_LENGTH = FormulationConfig.MAX_Object_LENGTH.ToString();
  340. ShowMessageBus.ShowBinding.MIN_OBJECT_LENGTH = FormulationConfig.MIN_Object_LENGTH.ToString();
  341. ShowMessageBus.ShowBinding.PandingCode = FormulationConfig.PandingCode.ToString();
  342. ShowMessageBus.ShowBinding.RegionThreshold = FormulationConfig.RegionThreshold.ToString();
  343. }
  344. private void ParametricTrainingBtn_Click(object sender, RoutedEventArgs e)
  345. {
  346. var paravalue = MessageBus.NowSettingLoadMainThread.ParameterTrain();
  347. ShowMessageBus.ShowBinding.NoiseFilter = paravalue.NoiseFilterThreshold.ToString();
  348. ShowMessageBus.ShowBinding.MaxArea = ((int)(paravalue.MaxArea*1.1)).ToString();
  349. ShowMessageBus.ShowBinding.MinArea = ((int)(paravalue.MinArea*0.9)).ToString();
  350. ShowMessageBus.ShowBinding.MAX_OBJECT_LENGTH = ((int)(paravalue.MaxLength*1.1)).ToString();
  351. ShowMessageBus.ShowBinding.MIN_OBJECT_LENGTH = ((int)(paravalue.MinLength*0.9)).ToString();
  352. }
  353. }
  354. }