SettingPage.xaml.cs 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372
  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. if (MessageBus.NowSettingLoadMainThread == null || ThisItemSN == MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum) return;
  145. if (ThisItemSN != string.Empty && ThisItemSN != null)
  146. {
  147. if (MessageBus.NowSettingLoadMainThread.CameraRunStatic)
  148. {
  149. var confirmResult = MessageBox.Show("检测到正在识别,切换相机需要关闭识别,是否继续切换",
  150. "切换确认", MessageBoxButton.YesNo);
  151. if (confirmResult == MessageBoxResult.No)
  152. {
  153. CamSelectConBox.SelectedValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  154. return;
  155. }
  156. MessageBus.NowSettingLoadMainThread.StopMianThread();
  157. }
  158. if (MessageBus.NowSettingLoadMainThread.ReLoadCamera(ThisItemSN))
  159. {
  160. MessageBus.NowSettingLoadMainThread.GetCameraConfig();
  161. ShowMessageBus.ShowBinding.ImageWidth = MessageBus.NowSettingLoadMainThread.cameraConfig.Width.ToString();
  162. ShowMessageBus.ShowBinding.CamUserName = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraName;
  163. ShowMessageBus.ShowBinding.CamOffsetX = MessageBus.NowSettingLoadMainThread.cameraConfig.OffsetX.ToString();
  164. ShowMessageBus.ShowBinding.ExposureTimeValue = MessageBus.NowSettingLoadMainThread.cameraConfig.ExposureTimeValue.ToString();
  165. ShowMessageBus.ShowBinding.AcquistionLineRate = MessageBus.NowSettingLoadMainThread.cameraConfig.AcquistionLineRateValue.ToString();
  166. ShowMessageBus.ShowBinding.CameraSNNum = ThisItemSN;
  167. }
  168. else
  169. {
  170. MessageBox.Show("切换相机失败!");
  171. CamSelectConBox.SelectedItem = MessageBus.NowSettingLoadMainThread.cameraConfig.DeviceName + "_" + MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  172. return;
  173. }
  174. }
  175. else
  176. {
  177. if (MessageBus.NowSettingLoadMainThread.CameraRunStatic)
  178. {
  179. var confirmResult = MessageBox.Show("检测到正在识别,切换相机需要关闭识别,是否继续切换",
  180. "切换确认", MessageBoxButton.YesNo);
  181. if (confirmResult == MessageBoxResult.No)
  182. {
  183. CamSelectConBox.SelectedValue = MessageBus.NowSettingLoadMainThread.cameraConfig.CameraSNNum;
  184. return;
  185. }
  186. MessageBus.NowSettingLoadMainThread.StopMianThread();
  187. }
  188. else
  189. {
  190. MessageBus.NowSettingLoadMainThread.DisposeCamera();
  191. }
  192. ShowMessageBus.ShowBinding.ImageWidth = "0";
  193. ShowMessageBus.ShowBinding.CamUserName = string.Empty;
  194. ShowMessageBus.ShowBinding.CamOffsetX = "0";
  195. ShowMessageBus.ShowBinding.ExposureTimeValue = "0";
  196. ShowMessageBus.ShowBinding.AcquistionLineRate = "0";
  197. ShowMessageBus.ShowBinding.CameraSNNum = null;
  198. }
  199. }
  200. private void CheckModel1RadBtn_Checked(object sender, RoutedEventArgs e)
  201. {
  202. ShowMessageBus.ShowBinding.PandingCode = "-1";
  203. WHParaPanel.Visibility = Visibility.Collapsed;
  204. AreaParaPanel.Visibility = Visibility.Collapsed;
  205. }
  206. private void CheckModel2RadBtn_Checked(object sender, RoutedEventArgs e)
  207. {
  208. ShowMessageBus.ShowBinding.PandingCode = "0";
  209. WHParaPanel.Visibility = Visibility.Visible;
  210. AreaParaPanel.Visibility = Visibility.Collapsed;
  211. }
  212. private void CheckModel3RadBtn_Checked(object sender, RoutedEventArgs e)
  213. {
  214. ShowMessageBus.ShowBinding.PandingCode = "1";
  215. WHParaPanel.Visibility = Visibility.Collapsed;
  216. AreaParaPanel.Visibility = Visibility.Visible;
  217. }
  218. private void CheckModel4RadBtn_Checked(object sender, RoutedEventArgs e)
  219. {
  220. ShowMessageBus.ShowBinding.PandingCode = "2";
  221. WHParaPanel.Visibility = Visibility.Visible;
  222. AreaParaPanel.Visibility = Visibility.Visible;
  223. }
  224. //private void SaveAllConfigBtn_Click(object sender, RoutedEventArgs e)
  225. //{
  226. // List<SaveConfigModel> SaveConfig = new List<SaveConfigModel>();
  227. // if(MessageBus.MainThreadS.Count <= 0)
  228. // {
  229. // return;
  230. // }
  231. // foreach (var item in MessageBus.MainThreadS)
  232. // {
  233. // SaveConfig.Add(new SaveConfigModel()
  234. // {
  235. // CameraConfig = item.cameraConfig,
  236. // ShuLiConfigClass = item.shuLiConfig
  237. // });
  238. // }
  239. // if (!Directory.Exists(".\\Config\\")) Directory.CreateDirectory(".\\Config\\");
  240. // {
  241. // XmlStorage.SerializeToXml(SaveConfig, ".\\Config\\CCDCountConfig.xml");
  242. // }
  243. //}
  244. private void ReadFormulationBtn_Click(object sender, RoutedEventArgs e)
  245. {
  246. string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Formulations\\{FormulationCoBox.SelectedItem}.xml";
  247. if (!File.Exists(folderPath))
  248. {
  249. MessageBox.Show("指定文件不存在,请选择一个正确的配方");
  250. return;
  251. }
  252. try
  253. {
  254. FormulationConfigClass formulationConfigClass = null;
  255. formulationConfigClass = XmlStorage.DeserializeFromXml<FormulationConfigClass>(folderPath);
  256. LoadFormulation(formulationConfigClass);
  257. MessageBus.NowSettingLoadMainThread.FormulationName = formulationConfigClass.FormulationName;
  258. MessageBus.NowSettingLoadMainThread.IsLoadFormulation = true;
  259. MessageBox.Show("加载成功");
  260. }
  261. catch (Exception ex)
  262. {
  263. MessageBox.Show($"读取文件时出错:{ex.Message}");
  264. }
  265. }
  266. /// <summary>
  267. /// 初始化配方列表
  268. /// </summary>
  269. private void InitFormationItems()
  270. {
  271. string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Formulations";
  272. if (!Directory.Exists(folderPath))
  273. {
  274. // 创建文件夹
  275. Directory.CreateDirectory(folderPath);
  276. }
  277. try
  278. {
  279. // 获取文件列表(包含子目录)
  280. string[] files = Directory.GetFiles(folderPath, "*.*", SearchOption.AllDirectories);
  281. ShowMessageBus.ShowBinding.FormulationItems.Clear();
  282. foreach (string file in files)
  283. {
  284. ShowMessageBus.ShowBinding.FormulationItems.Add(Path.GetFileNameWithoutExtension(file));
  285. }
  286. if(ShowMessageBus.ShowBinding.FormulationName!=null&&ShowMessageBus.ShowBinding.FormulationName!=string.Empty)
  287. {
  288. try
  289. {
  290. FormulationCoBox.SelectedItem = ShowMessageBus.ShowBinding.FormulationName;
  291. }
  292. catch { }
  293. }
  294. }
  295. catch
  296. { }
  297. }
  298. private void SaveFormulationBtn_Click(object sender, RoutedEventArgs e)
  299. {
  300. if (string.IsNullOrEmpty(ShowMessageBus.ShowBinding.FormulationName))
  301. {
  302. MessageBox.Show("请输入配方名称!");
  303. return;
  304. }
  305. FormulationConfigClass formulationConfigClass = FormulationClass.InitFormulation(
  306. MessageBus.NowSettingLoadMainThread.cameraConfig, MessageBus.NowSettingLoadMainThread.shuLiConfig);
  307. formulationConfigClass.FormulationName = ShowMessageBus.ShowBinding.FormulationName;
  308. string folderPath = $"{AppDomain.CurrentDomain.BaseDirectory}Formulations";
  309. string FilePath = folderPath + "\\" + ShowMessageBus.ShowBinding.FormulationName + ".xml";
  310. if (File.Exists(FilePath))
  311. {
  312. var confirmResult = MessageBox.Show("配方已存在,是否覆盖?",
  313. "保存确认", MessageBoxButton.YesNo);
  314. if (confirmResult == MessageBoxResult.No)
  315. {
  316. return;
  317. }
  318. }
  319. if (!Directory.Exists(folderPath)) Directory.CreateDirectory(folderPath);
  320. {
  321. XmlStorage.SerializeToXml(formulationConfigClass , FilePath);
  322. InitFormationItems();
  323. MessageBus.NowSettingLoadMainThread.FormulationName = formulationConfigClass.FormulationName;
  324. MessageBus.NowSettingLoadMainThread.IsLoadFormulation = true;
  325. MessageBox.Show("保存成功");
  326. }
  327. }
  328. /// <summary>
  329. /// 加载配方
  330. /// </summary>
  331. /// <param name="FormulationConfig"></param>
  332. private void LoadFormulation(FormulationConfigClass FormulationConfig)
  333. {
  334. ShowMessageBus.ShowBinding.AcquistionLineRate = FormulationConfig.AcquistionLineRateValue.ToString();
  335. ShowMessageBus.ShowBinding.ExposureTimeValue = FormulationConfig.ExposureTimeValue.ToString();
  336. ShowMessageBus.ShowBinding.Channel = FormulationConfig.Channel.ToString();
  337. ShowMessageBus.ShowBinding.FormulationName = FormulationConfig.FormulationName;
  338. ShowMessageBus.ShowBinding.MAX_OBJECT_LENGTH = FormulationConfig.MAX_Object_LENGTH.ToString();
  339. ShowMessageBus.ShowBinding.MIN_OBJECT_LENGTH = FormulationConfig.MIN_Object_LENGTH.ToString();
  340. ShowMessageBus.ShowBinding.PandingCode = FormulationConfig.PandingCode.ToString();
  341. ShowMessageBus.ShowBinding.RegionThreshold = FormulationConfig.RegionThreshold.ToString();
  342. }
  343. private void ParametricTrainingBtn_Click(object sender, RoutedEventArgs e)
  344. {
  345. var paravalue = MessageBus.NowSettingLoadMainThread.ParameterTrain();
  346. ShowMessageBus.ShowBinding.NoiseFilter = paravalue.NoiseFilterThreshold.ToString();
  347. ShowMessageBus.ShowBinding.MaxArea = ((int)(paravalue.MaxArea*1.1)).ToString();
  348. ShowMessageBus.ShowBinding.MinArea = ((int)(paravalue.MinArea*0.9)).ToString();
  349. ShowMessageBus.ShowBinding.MAX_OBJECT_LENGTH = ((int)(paravalue.MaxLength*1.1)).ToString();
  350. ShowMessageBus.ShowBinding.MIN_OBJECT_LENGTH = ((int)(paravalue.MinLength*0.9)).ToString();
  351. }
  352. }
  353. }