MarkManage.xaml.cs 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Data;
  8. using System.Windows.Documents;
  9. using System.Windows.Input;
  10. using System.Windows.Media;
  11. using System.Windows.Media.Imaging;
  12. using System.Windows.Navigation;
  13. using System.Windows.Shapes;
  14. using DAL;
  15. using System.Data;
  16. using System.Data.SqlClient;
  17. using ColorFont;
  18. namespace AGV_WPF
  19. {
  20. /// <summary>
  21. /// MarkManage.xaml 的交互逻辑
  22. /// </summary>
  23. public partial class MarkManage : Page
  24. {
  25. public DAL.ZSql sql = new DAL.ZSql();
  26. public SolidColorBrush IsVirtualMark = Brushes.OrangeRed;
  27. public SolidColorBrush NotVirtualMark = Brushes.Yellow;
  28. public int id = -1;
  29. public bool IsQuickAdd = false;
  30. public bool IsQuickGet = false;
  31. public double MarkDiameter = 4;
  32. public Ellipse SelectedMark = new Ellipse();
  33. public List<Ellipse> pointList = new List<Ellipse>();
  34. public List<Label> pointLableList = new List<Label>();
  35. public MarkManage()
  36. {
  37. InitializeComponent();
  38. SelectedMark.Height = MarkDiameter * 2;
  39. SelectedMark.Width = MarkDiameter * 2;
  40. SelectedMark.Fill = Brushes.Brown;
  41. canvas.Children.Add(SelectedMark);
  42. }
  43. /// <summary>
  44. /// 页面加载
  45. /// </summary>
  46. /// <param name="sender"></param>
  47. /// <param name="e"></param>
  48. private void Page_Loaded(object sender, RoutedEventArgs e)
  49. {
  50. MapInit(@"Image\background.png");
  51. IsVirtualMark = new SolidColorBrush(Properties.Settings.Default.MarkVirtualColor);
  52. NotVirtualMark = new SolidColorBrush(Properties.Settings.Default.MarkNotColor);
  53. MarkDiameter = Properties.Settings.Default.MarkDiameter;
  54. EVirtualMark.Fill = IsVirtualMark;
  55. ENotVirtualMark.Fill = NotVirtualMark;
  56. LoadData();
  57. }
  58. void AddEllipse(int id,double x,double y,int mark,int workLine,bool isVirtual)
  59. {
  60. var values = from s in pointList where s.Tag.ToString() == id.ToString() select s;
  61. if (values.Count() == 0)
  62. {
  63. Ellipse markellipse = new Ellipse();
  64. markellipse.Tag = new MarkInfo() { m_id = id, m_workline = workLine, m_mark = mark, m_x = x, m_y = y, m_isVirtual = isVirtual };
  65. markellipse.Height = MarkDiameter;
  66. markellipse.Width = MarkDiameter;
  67. //markellipse.ToolTip = "ID:" + id+ "\r\nWorkLine:" + workLine + " Mark:" + mark;
  68. markellipse.ToolTip = string.Format("ID:{0}\r\nWorkLine:{1} Mark:{2}", id, workLine, mark);
  69. Canvas.SetLeft(markellipse, x - MarkDiameter / 2);
  70. Canvas.SetTop(markellipse, y - MarkDiameter / 2);
  71. //设置虚拟点颜色
  72. if (isVirtual)
  73. {
  74. markellipse.Fill = IsVirtualMark;
  75. }
  76. else
  77. {
  78. //非虚拟点加入ID显示
  79. markellipse.Fill = NotVirtualMark;
  80. Label marklable = new Label();
  81. marklable.FontSize = 10;
  82. marklable.Foreground = Brushes.Black;
  83. //marklable.Content = id.ToString();
  84. marklable.Content = mark.ToString();
  85. marklable.Tag = new MarkInfo() { m_id = id, m_workline = workLine, m_mark = mark, m_x = x, m_y = y, m_isVirtual = isVirtual };
  86. Canvas.SetLeft(marklable, x - 14);
  87. Canvas.SetTop(marklable, y - 20);
  88. canvas.Children.Add(marklable);
  89. pointLableList.Add(marklable);
  90. }
  91. canvas.Children.Add(markellipse);
  92. pointList.Add(markellipse);
  93. DAL.ZSql sql1 = new DAL.ZSql();
  94. sql1.Open("select * from T_Mark Order by WorkLine,Mark");
  95. dataGrid1.ItemsSource = sql1.m_table.DefaultView;
  96. sql1.Close();
  97. }
  98. }
  99. void UpdateEllipse(int id, double x, double y, int mark, int workLine, bool isVirtual)
  100. {
  101. int index = pointList.FindIndex(c => ((MarkInfo)c.Tag).m_id == id);
  102. if (index != -1)
  103. {
  104. Ellipse markellipse = pointList[index];
  105. markellipse.Tag = new MarkInfo() { m_id = id, m_workline = workLine, m_mark = mark, m_x = x, m_y = y, m_isVirtual = isVirtual };
  106. markellipse.Height = MarkDiameter;
  107. markellipse.Width = MarkDiameter;
  108. //markellipse.ToolTip = "ID:" + id+ "\r\nWorkLine:" + workLine + " Mark:" + mark;
  109. markellipse.ToolTip = string.Format("ID:{0}\r\nWorkLine:{1} Mark:{2}", id, workLine, mark);
  110. Canvas.SetLeft(markellipse, x - MarkDiameter / 2);
  111. Canvas.SetTop(markellipse, y - MarkDiameter / 2);
  112. //设置虚拟点颜色
  113. if (isVirtual)
  114. {
  115. markellipse.Fill = IsVirtualMark;
  116. }
  117. else
  118. {
  119. int index2 = pointLableList.FindIndex(c => c.Tag.ToString() == id.ToString());
  120. if (index2 != -1)
  121. {
  122. //非虚拟点加入ID显示
  123. markellipse.Fill = NotVirtualMark;
  124. Label marklable = pointLableList[index2];
  125. marklable.FontSize = 10;
  126. marklable.Foreground = Brushes.Black;
  127. //marklable.Content = id.ToString();
  128. marklable.Content = mark.ToString();
  129. marklable.Tag = new MarkInfo() { m_id = id, m_workline = workLine, m_mark = mark, m_x = x, m_y = y, m_isVirtual = isVirtual };
  130. Canvas.SetLeft(marklable, x - 14);
  131. Canvas.SetTop(marklable, y - 20);
  132. }
  133. }
  134. DAL.ZSql sql1 = new DAL.ZSql();
  135. sql1.Open("select * from T_Mark Order by WorkLine,Mark");
  136. dataGrid1.ItemsSource = sql1.m_table.DefaultView;
  137. sql1.Close();
  138. }
  139. }
  140. void DeleteEllipse(int id)
  141. {
  142. int index = pointList.FindIndex(c => ((MarkInfo)c.Tag).m_id == id);
  143. if (index != -1)
  144. {
  145. canvas.Children.Remove(pointList[index]);
  146. pointList.RemoveAt(index);
  147. }
  148. int index2 = pointLableList.FindIndex(c => ((MarkInfo)c.Tag).m_id == id);
  149. if (index2 != -1)
  150. {
  151. canvas.Children.Remove(pointLableList[index2]);
  152. pointLableList.RemoveAt(index2);
  153. }
  154. if (index != -1 || index2 != -1)
  155. {
  156. DAL.ZSql sql1 = new DAL.ZSql();
  157. sql1.Open("select * from T_Mark Order by WorkLine,Mark");
  158. dataGrid1.ItemsSource = sql1.m_table.DefaultView;
  159. sql1.Close();
  160. }
  161. }
  162. private void LoadData()
  163. {
  164. DAL.ZSql sql1 = new DAL.ZSql();
  165. sql1.Open("select * from T_Mark Order by WorkLine,Mark");
  166. //加载地图中地标
  167. canvas.Children.Clear();
  168. pointLableList.Clear();
  169. pointList.Clear();
  170. double x = 0, y = 0;
  171. for (int i = 0; i < sql1.Rows.Count; i++)
  172. {
  173. x = Convert.ToDouble(sql1.Rows[i]["XPos"]);
  174. y = Convert.ToDouble(sql1.Rows[i]["YPos"]);
  175. Ellipse markellipse = new Ellipse();
  176. markellipse.Tag = new MarkInfo() { m_id = Convert.ToInt32(sql1.Rows[i]["ID"]), m_workline = Convert.ToInt32(sql1.Rows[i]["WorkLine"]), m_mark = Convert.ToInt32(sql1.Rows[i]["Mark"]), m_x = Convert.ToDouble(sql1.Rows[i]["XPos"]), m_y = Convert.ToDouble(sql1.Rows[i]["YPos"]), m_isVirtual = Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]) };
  177. markellipse.Height = MarkDiameter;
  178. markellipse.Width = MarkDiameter;
  179. markellipse.ToolTip = "ID:" + sql1.Rows[i]["ID"].ToString() + "\r\nWorkLine:" + sql1.Rows[i]["WorkLine"].ToString() + " Mark:" + sql1.Rows[i]["Mark"];
  180. Canvas.SetLeft(markellipse, x - MarkDiameter / 2);
  181. Canvas.SetTop(markellipse, y - MarkDiameter / 2);
  182. //设置虚拟点颜色
  183. if (Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]))
  184. {
  185. markellipse.Fill = IsVirtualMark;
  186. }
  187. else
  188. {
  189. //非虚拟点加入ID显示
  190. markellipse.Fill = NotVirtualMark;
  191. Label marklable = new Label();
  192. marklable.FontSize = 7;
  193. marklable.Foreground = Brushes.Black;
  194. //marklable.Content = sql1.Rows[i]["ID"].ToString(); //显示地标ID
  195. marklable.Content = sql1.Rows[i]["Mark"].ToString(); //文字显示地标号
  196. marklable.Tag = new MarkInfo() { m_id = Convert.ToInt32(sql1.Rows[i]["ID"]), m_workline = Convert.ToInt32(sql1.Rows[i]["WorkLine"]), m_mark = Convert.ToInt32(sql1.Rows[i]["Mark"]), m_x = Convert.ToDouble(sql1.Rows[i]["XPos"]), m_y = Convert.ToDouble(sql1.Rows[i]["YPos"]), m_isVirtual = Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]) };
  197. Canvas.SetLeft(marklable, x -10);
  198. Canvas.SetTop(marklable, y - 15);
  199. canvas.Children.Add(marklable);
  200. pointLableList.Add(marklable);
  201. }
  202. //地标都显示出来
  203. canvas.Children.Add(markellipse);
  204. pointList.Add(markellipse);
  205. }
  206. //加载表格
  207. dataGrid1.ItemsSource = sql1.m_table.DefaultView;
  208. sql1.Close();
  209. }
  210. /// <summary>
  211. /// 加载电子地图背景图片
  212. /// </summary>
  213. /// <param name="struri">电子地图图片位置</param>
  214. public void MapInit(string struri)
  215. {
  216. ImageBrush imageBrush = new ImageBrush();
  217. imageBrush.ImageSource = new BitmapImage(new Uri(struri, UriKind.RelativeOrAbsolute));
  218. imageBrush.Stretch = Stretch.Uniform;
  219. imageBrush.AlignmentX = AlignmentX.Left;
  220. canvas.Background = imageBrush;
  221. }
  222. /// <summary>
  223. /// 加载表格中数据
  224. /// </summary>
  225. private void LoadData2()
  226. {
  227. DAL.ZSql sql1 = new DAL.ZSql();
  228. sql1.Open("select * from T_Mark Order by WorkLine,Mark");
  229. //加载地图中地标
  230. canvas.Children.Clear();
  231. double x = 0, y = 0;
  232. for (int i = 0; i < sql1.Rows.Count; i++)
  233. {
  234. x = Convert.ToDouble(sql1.Rows[i]["XPos"]);
  235. y = Convert.ToDouble(sql1.Rows[i]["YPos"]);
  236. Ellipse markellipse = new Ellipse();
  237. markellipse.Height = MarkDiameter;
  238. markellipse.Width = MarkDiameter;
  239. markellipse.ToolTip = "ID:" + sql1.Rows[i]["ID"].ToString() + "\r\nWorkLine:" + sql1.Rows[i]["WorkLine"].ToString() + " Mark:" + sql1.Rows[i]["Mark"];
  240. Canvas.SetLeft(markellipse, x - MarkDiameter / 2);
  241. Canvas.SetTop(markellipse, y - MarkDiameter / 2);
  242. //设置虚拟点颜色
  243. if (Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]))
  244. {
  245. markellipse.Fill = IsVirtualMark;
  246. }
  247. else
  248. {
  249. //非虚拟点加入ID显示
  250. markellipse.Fill = NotVirtualMark;
  251. Label marklable = new Label();
  252. marklable.FontSize = 10;
  253. marklable.Foreground = Brushes.Black;
  254. //marklable.Content = sql1.Rows[i]["ID"].ToString();
  255. marklable.Content = sql1.Rows[i]["Mark"].ToString();
  256. Canvas.SetLeft(marklable, x - 14);
  257. Canvas.SetTop(marklable, y - 20);
  258. canvas.Children.Add(marklable);
  259. }
  260. //地标都显示出来
  261. canvas.Children.Add(markellipse);
  262. }
  263. //加载表格
  264. dataGrid1.ItemsSource = sql1.m_table.DefaultView;
  265. sql1.Close();
  266. }
  267. /// <summary>
  268. /// 添加记录
  269. /// </summary>
  270. /// <param name="sender"></param>
  271. /// <param name="e"></param>
  272. private void AddRecord_Click(object sender, RoutedEventArgs e)
  273. {
  274. string txtworkline = tbWorkLine.Text.Trim();
  275. string txtmark = tbMark.Text.Trim();
  276. string txtxpos = tbXPos.Text.Trim();
  277. string txtypos = tbYPos.Text.Trim();
  278. if (string.IsNullOrEmpty(txtworkline) || string.IsNullOrEmpty(txtmark) ||
  279. string.IsNullOrEmpty(txtxpos) || string.IsNullOrEmpty(txtypos))
  280. {
  281. MessageBox.Show("对不起,您输入信息不全!");
  282. return;
  283. }
  284. sql.Open("select * from T_Mark where WorkLine=" + txtworkline + " and Mark=" + txtmark);
  285. if (sql.Rows.Count > 0)
  286. {
  287. MessageBox.Show("已存在此记录!");
  288. return;
  289. }
  290. int i = sql.Open("insert into T_Mark (WorkLine,Mark,XPos,YPos,VirtualMark) Values (@workline,@mark,@xpos,@ypos,@virtualmark)",
  291. new SqlParameter[]{
  292. new SqlParameter("workline",txtworkline),
  293. new SqlParameter("mark",txtmark),
  294. new SqlParameter("xpos",txtxpos),
  295. new SqlParameter("ypos",txtypos),
  296. new SqlParameter("virtualmark", Convert.ToBoolean(rbIsVirtual.IsChecked)?"1":"0")
  297. });
  298. if (i >= 0)
  299. {
  300. MessageBox.Show("添加记录成功!");
  301. //LoadData();
  302. {
  303. sql.Open("select * from T_Mark where WorkLine=" + txtworkline + " and Mark=" + txtmark);
  304. if (sql.Rows.Count > 0)
  305. {
  306. int id = int.Parse(sql.Rows[0]["ID"].ToString());
  307. double x = double.Parse(sql.Rows[0]["XPos"].ToString());
  308. double y = double.Parse(sql.Rows[0]["YPos"].ToString());
  309. int mark = int.Parse(sql.Rows[0]["Mark"].ToString());
  310. int workline = int.Parse(sql.Rows[0]["WorkLine"].ToString());
  311. bool isVirtual = bool.Parse(sql.Rows[0]["VirtualMark"].ToString());
  312. AddEllipse(id, x, y, mark, workline, isVirtual);
  313. }
  314. }
  315. }
  316. }
  317. /// <summary>
  318. /// 修改记录
  319. /// </summary>
  320. /// <param name="sender"></param>
  321. /// <param name="e"></param>
  322. private void ModifyRecord_Click(object sender, RoutedEventArgs e)
  323. {
  324. //修改日期:2014-04-04
  325. //不能修改地标
  326. // if (id <= 0)
  327. // {
  328. // MessageBox.Show("对不起,请选择修改记录!");
  329. // return;
  330. // }
  331. string txtworkline = tbWorkLine.Text.Trim();
  332. string txtmark = tbMark.Text.Trim();
  333. string txtxpos = tbXPos.Text.Trim();
  334. string txtypos = tbYPos.Text.Trim();
  335. if (string.IsNullOrEmpty(txtworkline) || string.IsNullOrEmpty(txtmark) ||
  336. string.IsNullOrEmpty(txtxpos) || string.IsNullOrEmpty(txtypos))
  337. {
  338. MessageBox.Show("对不起,不能输入为空信息!");
  339. return;
  340. }
  341. //修改日期:2014-01-02
  342. //修改日期:2014-04-04
  343. //不能修改地标
  344. sql.Open("select * from T_Mark where WorkLine=" + txtworkline + " and Mark=" + txtmark);
  345. if (sql.Rows.Count < 1)
  346. {
  347. MessageBox.Show("您需要修改的地标不存在,请重新输入!");
  348. return;
  349. }
  350. //修改日期:2014-04-04
  351. //不能修改地标
  352. // int i = sql.Open("update T_Mark set WorkLine=@workline,Mark=@mark,XPos=@xpos,YPos=@ypos,VirtualMark=@virtualmark where ID=@id", new SqlParameter[]{
  353. // new SqlParameter("id",id.ToString()),
  354. // new SqlParameter("workline",txtworkline),
  355. // new SqlParameter("mark",txtmark),
  356. // new SqlParameter("xpos",txtxpos),
  357. // new SqlParameter("ypos",txtypos),
  358. // new SqlParameter("virtualmark", Convert.ToBoolean(rbIsVirtual.IsChecked)?"1":"0")
  359. // });
  360. // if (i >= 0)
  361. // {
  362. // MessageBox.Show("修改记录成功!");
  363. // LoadData();
  364. // }
  365. int i = sql.Open("update T_Mark set XPos=@xpos,YPos=@ypos,VirtualMark=@virtualmark where WorkLine=@workline and Mark=@mark", new SqlParameter[]{
  366. new SqlParameter("workline",txtworkline),
  367. new SqlParameter("mark",txtmark),
  368. new SqlParameter("xpos",txtxpos),
  369. new SqlParameter("ypos",txtypos),
  370. new SqlParameter("virtualmark", Convert.ToBoolean(rbIsVirtual.IsChecked)?"1":"0")
  371. });
  372. if (i >= 0)
  373. {
  374. MessageBox.Show("修改记录成功!");
  375. //LoadData();
  376. {
  377. sql.Open("select * from T_Mark where WorkLine=" + txtworkline + " and Mark=" + txtmark);
  378. if (sql.Rows.Count > 0)
  379. {
  380. int id = int.Parse(sql.Rows[0]["ID"].ToString());
  381. double x = double.Parse(sql.Rows[0]["XPos"].ToString());
  382. double y = double.Parse(sql.Rows[0]["YPos"].ToString());
  383. int mark = int.Parse(sql.Rows[0]["Mark"].ToString());
  384. int workline = int.Parse(sql.Rows[0]["WorkLine"].ToString());
  385. bool isVirtual = bool.Parse(sql.Rows[0]["VirtualMark"].ToString());
  386. UpdateEllipse(id, x, y, mark, workline, isVirtual);
  387. }
  388. }
  389. }
  390. }
  391. /// <summary>
  392. /// 删除记录
  393. /// </summary>
  394. /// <param name="sender"></param>
  395. /// <param name="e"></param>
  396. private void DeleteRecord_Click(object sender, RoutedEventArgs e)
  397. {
  398. if (id > 0)
  399. {
  400. int i = sql.Open("delete from T_Mark where ID=" + id.ToString());
  401. if (i >= 0)
  402. {
  403. MessageBox.Show("删除记录成功!");
  404. //LoadData();
  405. {
  406. DeleteEllipse(id);
  407. }
  408. }
  409. sql.Close();
  410. }
  411. }
  412. /// <summary>
  413. /// 删除全部记录
  414. /// </summary>
  415. /// <param name="sender"></param>
  416. /// <param name="e"></param>
  417. private void DeleteAll_Click(object sender, RoutedEventArgs e)
  418. {
  419. if (MessageBox.Show("确认要删除此全部地标?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
  420. {
  421. int i = sql.Open("Truncate Table T_Mark");
  422. if (i >= 0)
  423. {
  424. MessageBox.Show("删除记录成功!");
  425. sql.Open("Truncate Table T_Line");
  426. sql.Open("Truncate Table T_Traffic");
  427. /*
  428. sql.Open("DELETE FROM T_Line");
  429. sql.Open("DELETE FROM T_Traffic");*/
  430. LoadData();
  431. }
  432. }
  433. }
  434. /// <summary>
  435. /// 表格选择不同行消息触发
  436. /// </summary>
  437. /// <param name="sender"></param>
  438. /// <param name="e"></param>
  439. private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
  440. {
  441. DataRowView selectItem = dataGrid1.SelectedItem as DataRowView;
  442. if (selectItem != null)
  443. {
  444. id = Convert.ToInt16(selectItem["ID"].ToString().Trim());
  445. tbWorkLine.Text = selectItem["WorkLine"].ToString().Trim();
  446. tbMark.Text = selectItem["Mark"].ToString().Trim();
  447. tbXPos.Text = selectItem["XPos"].ToString().Trim();
  448. tbYPos.Text = selectItem["YPos"].ToString().Trim();
  449. if (Convert.ToBoolean(selectItem["VirtualMark"]))
  450. {
  451. rbIsVirtual.IsChecked = true;
  452. }
  453. else
  454. {
  455. rbNotVirtual.IsChecked = true;
  456. }
  457. canvas.Children.Remove(SelectedMark);
  458. Canvas.SetLeft(SelectedMark, Convert.ToInt16(selectItem["XPos"]) - SelectedMark.Width / 2);
  459. Canvas.SetTop(SelectedMark, Convert.ToInt16(selectItem["YPos"]) - SelectedMark.Width / 2);
  460. canvas.Children.Add(SelectedMark);
  461. }
  462. else
  463. {
  464. tbWorkLine.Text = "";
  465. tbMark.Text = "";
  466. tbXPos.Text = "";
  467. tbYPos.Text = "";
  468. }
  469. }
  470. /// <summary>
  471. /// 快速添加
  472. /// </summary>
  473. /// <param name="sender"></param>
  474. /// <param name="e"></param>
  475. private void btnQuickAdd_Click(object sender, RoutedEventArgs e)
  476. {
  477. if (string.IsNullOrEmpty(tbWorkLine.Text.Trim()))
  478. {
  479. MessageBox.Show("请输入要添加的生产区号。");
  480. return;
  481. }
  482. IsQuickAdd = true;
  483. tbMark.IsEnabled = false;
  484. tbXPos.IsEnabled = false;
  485. tbYPos.IsEnabled = false;
  486. rbNotVirtual.IsChecked = true;
  487. sql.Open("Select Max(Mark) As MaxValue from T_Mark where WorkLine=" + tbWorkLine.Text.Trim());
  488. if (sql.Rows.Count <= 0)
  489. {
  490. MessageBox.Show("不存在此生产区号,请重新输入。");
  491. return;
  492. }
  493. if (string.IsNullOrEmpty(sql.Rows[0]["MaxValue"].ToString()))
  494. {
  495. tbMark.Text = "1";
  496. }
  497. else
  498. {
  499. tbMark.Text = (Convert.ToUInt32(sql.Rows[0]["MaxValue"]) + 1).ToString();
  500. }
  501. }
  502. bool MapZoomInOut = false;
  503. Point lastpoint = new Point(0, 0);
  504. Point OffsetPoint = new Point(0, 0);
  505. /// <summary>
  506. /// 画布中鼠标移动消息
  507. /// </summary>
  508. /// <param name="sender"></param>
  509. /// <param name="e"></param>
  510. private void canvas_MouseMove(object sender, MouseEventArgs e)
  511. {
  512. if (IsQuickAdd || IsQuickGet)
  513. {
  514. Point point=Mouse.GetPosition(canvas);
  515. tbXPos.Text = point.X.ToString("F2");
  516. tbYPos.Text = point.Y.ToString("F2");
  517. return;
  518. }
  519. if (MapZoomInOut)
  520. {
  521. Point newpoint = e.GetPosition(null);
  522. canvas.Offset = new Point(lastpoint.X - newpoint.X, lastpoint.Y - newpoint.Y);
  523. }
  524. }
  525. /// <summary>
  526. /// 画布中鼠标右键消息
  527. /// </summary>
  528. /// <param name="sender"></param>
  529. /// <param name="e"></param>
  530. private void Page_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
  531. {
  532. this.Cursor = Cursors.Arrow;
  533. IsQuickAdd = false;
  534. IsQuickGet = false;
  535. tbMark.IsEnabled = true;
  536. tbXPos.IsEnabled = true;
  537. tbYPos.IsEnabled = true;
  538. }
  539. /// <summary>
  540. /// 快速添加
  541. /// </summary>
  542. /// <param name="sender"></param>
  543. /// <param name="e"></param>
  544. private void btnQuickGet_Click(object sender, RoutedEventArgs e)
  545. {
  546. IsQuickGet = true;
  547. }
  548. /// <summary>
  549. /// 画布中鼠标左键消息
  550. /// </summary>
  551. /// <param name="sender"></param>
  552. /// <param name="e"></param>
  553. private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  554. {
  555. if (IsQuickGet)
  556. {
  557. IsQuickGet = false;
  558. this.Cursor = Cursors.Arrow;
  559. }
  560. else if (IsQuickAdd)
  561. {
  562. string strworkline = tbWorkLine.Text.Trim();
  563. if (string.IsNullOrEmpty(tbMark.Text.Trim()) || string.IsNullOrEmpty(strworkline))
  564. {
  565. MessageBox.Show("请输入生产区和地标号!");
  566. return;
  567. }
  568. uint i = Convert.ToUInt32(tbMark.Text.Trim());
  569. sql.Open("insert into T_Mark (WorkLine,Mark,XPos,YPos,VirtualMark) Values (@workline,@mark,@xpos,@ypos,@virtualmark)",
  570. new SqlParameter[]{
  571. new SqlParameter("workline",tbWorkLine.Text.Trim()),
  572. new SqlParameter("mark",i.ToString()),
  573. new SqlParameter("xpos",tbXPos.Text.Trim()),
  574. new SqlParameter("ypos",tbYPos.Text.Trim()),
  575. new SqlParameter("virtualmark", Convert.ToBoolean(rbIsVirtual.IsChecked)?"1":"0")
  576. });
  577. //LoadData();
  578. {
  579. sql.Open("select * from T_Mark where WorkLine=" + tbWorkLine.Text.Trim() + " and Mark=" + i.ToString());
  580. if (sql.Rows.Count > 0)
  581. {
  582. int id = int.Parse(sql.Rows[0]["ID"].ToString());
  583. double x = double.Parse(sql.Rows[0]["XPos"].ToString());
  584. double y = double.Parse(sql.Rows[0]["YPos"].ToString());
  585. int mark = int.Parse(sql.Rows[0]["Mark"].ToString());
  586. int workline = int.Parse(sql.Rows[0]["WorkLine"].ToString());
  587. bool isVirtual = bool.Parse(sql.Rows[0]["VirtualMark"].ToString());
  588. AddEllipse(id, x, y, mark, workline, isVirtual);
  589. }
  590. }
  591. tbMark.Text = (i + 1).ToString();
  592. tbWorkLine.Text = strworkline;
  593. }
  594. else
  595. {
  596. MapZoomInOut = true;
  597. lastpoint.X = e.GetPosition(null).X + OffsetPoint.X;
  598. lastpoint.Y = e.GetPosition(null).Y + OffsetPoint.Y;
  599. this.Cursor = Cursors.Hand;
  600. }
  601. }
  602. /// <summary>
  603. /// 鼠标移动到画布消息
  604. /// </summary>
  605. /// <param name="sender"></param>
  606. /// <param name="e"></param>
  607. private void canvas_MouseEnter(object sender, MouseEventArgs e)
  608. {
  609. if (IsQuickAdd || IsQuickGet)
  610. {
  611. this.Cursor = Cursors.Cross;
  612. }
  613. }
  614. /// <summary>
  615. /// 鼠标移出画布消息
  616. /// </summary>
  617. /// <param name="sender"></param>
  618. /// <param name="e"></param>
  619. private void canvas_MouseLeave(object sender, MouseEventArgs e)
  620. {
  621. if (IsQuickAdd || IsQuickGet)
  622. {
  623. this.Cursor = Cursors.Arrow;
  624. }
  625. MapZoomInOut = false;
  626. }
  627. /// <summary>
  628. /// 鼠标左键弹起消息
  629. /// </summary>
  630. /// <param name="sender"></param>
  631. /// <param name="e"></param>
  632. private void canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  633. {
  634. if (MapZoomInOut)
  635. {
  636. MapZoomInOut = false;
  637. OffsetPoint = canvas.Offset;
  638. }
  639. if (!(IsQuickAdd || IsQuickGet))
  640. {
  641. this.Cursor = Cursors.Arrow;
  642. }
  643. }
  644. /// <summary>
  645. /// 鼠标滚轮消息
  646. /// </summary>
  647. /// <param name="sender"></param>
  648. /// <param name="e"></param>
  649. private void canvas_MouseWheel(object sender, MouseWheelEventArgs e)
  650. {
  651. canvas.Scale += e.Delta / 1000.0;
  652. //最大放大十倍
  653. if (canvas.Scale > 10)
  654. {
  655. canvas.Scale = 10;
  656. }
  657. //缩小可以小到3倍
  658. if (canvas.Scale < 0.3)
  659. {
  660. canvas.Scale = 0.3;
  661. }
  662. }
  663. /// <summary>
  664. /// 非虚拟点颜色设置
  665. /// </summary>
  666. /// <param name="sender"></param>
  667. /// <param name="e"></param>
  668. private void ENotVirtualMark_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  669. {
  670. ColorFont.ColorDialog fntDialog = new ColorFont.ColorDialog(NotVirtualMark, MarkDiameter);
  671. if (fntDialog.ShowDialog() == true)
  672. {
  673. NotVirtualMark = fntDialog.selectedColor;
  674. MarkDiameter = fntDialog.selectedSize;
  675. ENotVirtualMark.Fill = fntDialog.selectedColor;
  676. LoadData();
  677. }
  678. }
  679. /// <summary>
  680. /// 虚拟点颜色设置
  681. /// </summary>
  682. /// <param name="sender"></param>
  683. /// <param name="e"></param>
  684. private void EVirtualMark_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  685. {
  686. ColorFont.ColorDialog fntDialog = new ColorFont.ColorDialog(IsVirtualMark, MarkDiameter);
  687. if (fntDialog.ShowDialog() == true)
  688. {
  689. IsVirtualMark = fntDialog.selectedColor;
  690. MarkDiameter = fntDialog.selectedSize;
  691. EVirtualMark.Fill = fntDialog.selectedColor;
  692. LoadData();
  693. }
  694. }
  695. /// <summary>
  696. /// 页面卸载消息
  697. /// </summary>
  698. /// <param name="sender"></param>
  699. /// <param name="e"></param>
  700. private void Page_Unloaded(object sender, RoutedEventArgs e)
  701. {
  702. Properties.Settings.Default.MarkVirtualColor = IsVirtualMark.Color;
  703. Properties.Settings.Default.MarkNotColor = NotVirtualMark.Color;
  704. Properties.Settings.Default.MarkDiameter = MarkDiameter;
  705. Properties.Settings.Default.Save();
  706. }
  707. }
  708. public class MarkInfo
  709. {
  710. public int m_id;
  711. public int m_workline;
  712. public int m_mark;
  713. public double m_x;
  714. public double m_y;
  715. public bool m_isVirtual;
  716. }
  717. }