TrafficManage.xaml.cs 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  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 System.Data;
  15. using System.Data.SqlClient;
  16. using System.Configuration;
  17. using ColorFont;
  18. using AGV_WPF.TrafficDefine;
  19. namespace AGV_WPF
  20. {
  21. /// <summary>
  22. /// TrafficManage.xaml 的交互逻辑
  23. /// </summary>
  24. public partial class TrafficManage : Page
  25. {
  26. public DAL.ZSql sql1 = new DAL.ZSql();
  27. public SolidColorBrush IsVirtualMark = Brushes.Gray;
  28. public SolidColorBrush NotVirtualMark = Brushes.Yellow;
  29. public SolidColorBrush TrafficColor = Brushes.Red;
  30. public SolidColorBrush KeyMarkColor = Brushes.Green;//关键点颜色
  31. public List<Ellipse> pointList = new List<Ellipse>();
  32. public List<Label> pointLableList = new List<Label>();
  33. public int trafficnum = -1;
  34. public int id = -1;
  35. public double MarkDiameter = 2;
  36. public bool IsIDModel = true;
  37. public bool IsIDModel_Key = true;
  38. //可以在此类中设置限制管制区和管制区地标数
  39. public int TRAFFIC_CONAREA_MAX = Convert.ToInt32(ConfigurationManager.AppSettings["TRAFFIC_CONAREA_MAX"]);//可以设置的最大管制区数量
  40. public byte TRAFFIC_CONAREA_MARKNUM_MAX = Convert.ToByte(ConfigurationManager.AppSettings["TRAFFIC_CONAREA_MARKNUM_MAX"]);//管制区最大地标数量
  41. public TrafficManage()
  42. {
  43. InitializeComponent();
  44. }
  45. /// <summary>
  46. /// 页面加载
  47. /// </summary>
  48. /// <param name="sender"></param>
  49. /// <param name="e"></param>
  50. private void Page_Loaded(object sender, RoutedEventArgs e)
  51. {
  52. IsVirtualMark = new SolidColorBrush(Properties.Settings.Default.MarkVirtualColor);
  53. NotVirtualMark = new SolidColorBrush(Properties.Settings.Default.MarkNotColor);
  54. TrafficColor = new SolidColorBrush(Properties.Settings.Default.TrafficColor);
  55. KeyMarkColor = new SolidColorBrush(Properties.Settings.Default.TrafficKeyMarkColor);
  56. MarkDiameter = Properties.Settings.Default.MarkDiameter;
  57. MapInit(@"Image\background.png");
  58. EVirtualMark.Fill = IsVirtualMark;
  59. ENotVirtualMark.Fill = NotVirtualMark;
  60. ETrafficMark.Fill = TrafficColor;
  61. this.dataGrid1.LoadingRow += new EventHandler<DataGridRowEventArgs>(this.DataGridSoftware_LoadingRow);
  62. BindLineCombox();
  63. BindWorkLineCombox();
  64. LoadAllMark();
  65. }
  66. /// <summary>
  67. /// 加载电子地图背景图片
  68. /// </summary>
  69. /// <param name="struri">电子地图图片位置</param>
  70. public void MapInit(string struri)
  71. {
  72. ImageBrush imageBrush = new ImageBrush();
  73. imageBrush.ImageSource = new BitmapImage(new Uri(struri, UriKind.RelativeOrAbsolute));
  74. imageBrush.Stretch = Stretch.Uniform;
  75. imageBrush.AlignmentX = AlignmentX.Left;
  76. canvas.Background = imageBrush;
  77. }
  78. /// <summary>
  79. /// 为表格加入行号
  80. /// </summary>
  81. /// <param name="sender"></param>
  82. /// <param name="e"></param>
  83. private void DataGridSoftware_LoadingRow(object sender, DataGridRowEventArgs e)
  84. {
  85. e.Row.Header = e.Row.GetIndex() + 1;
  86. }
  87. /// <summary>
  88. /// 加载地标
  89. /// </summary>
  90. private void LoadAllMark()
  91. {
  92. DAL.ZSql sql1 = new DAL.ZSql();
  93. sql1.Open("select * from T_Mark Order by WorkLine,Mark");
  94. //加载地图中地标
  95. canvas.Children.Clear();
  96. pointLableList.Clear();
  97. pointList.Clear();
  98. double x = 0, y = 0;
  99. for (int i = 0; i < sql1.Rows.Count; i++)
  100. {
  101. x = Convert.ToDouble(sql1.Rows[i]["XPos"]);
  102. y = Convert.ToDouble(sql1.Rows[i]["YPos"]);
  103. Ellipse markellipse = new Ellipse();
  104. markellipse.Height = MarkDiameter;
  105. markellipse.Width = MarkDiameter;
  106. 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 = x, m_y = y, m_isVirtual = Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]) };
  107. markellipse.ToolTip = sql1.Rows[i]["ID"].ToString() + "\r\nWorkLine:" + sql1.Rows[i]["WorkLine"].ToString() + " Mark:" + sql1.Rows[i]["Mark"];
  108. Canvas.SetLeft(markellipse, x - MarkDiameter/2);
  109. Canvas.SetTop(markellipse, y - MarkDiameter/2);
  110. //设置虚拟点颜色
  111. if (Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]))
  112. {
  113. markellipse.Fill = IsVirtualMark;
  114. }
  115. else
  116. {
  117. markellipse.Fill = NotVirtualMark;
  118. Label marklable = new Label();
  119. marklable.FontSize = 7;
  120. marklable.Foreground = Brushes.Black;
  121. //marklable.Content = sql1.Rows[i]["ID"].ToString();//地标ID
  122. marklable.Content = sql1.Rows[i]["Mark"].ToString(); //地标编号
  123. 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 = x, m_y = y, m_isVirtual = Convert.ToBoolean(sql1.Rows[i]["VirtualMark"]) };
  124. Canvas.SetLeft(marklable, x-10);
  125. Canvas.SetTop(marklable, y-15);
  126. canvas.Children.Add(marklable);
  127. pointLableList.Add(marklable);
  128. }
  129. canvas.Children.Add(markellipse);
  130. pointList.Add(markellipse);
  131. }
  132. sql1.Close();
  133. }
  134. /// <summary>
  135. /// 交通管制区号绑定
  136. /// </summary>
  137. private void BindLineCombox()
  138. {
  139. DAL.ZSql sql1 = new DAL.ZSql();
  140. sql1.Open("select DISTINCT TrafficNum from T_Traffic order by TrafficNum");
  141. cbTraffic.ItemsSource = sql1.m_table.DefaultView;
  142. cbTraffic.DisplayMemberPath = "TrafficNum";
  143. cbTraffic.SelectedValuePath = "TrafficNum";
  144. sql1.Close();
  145. }
  146. //修改日期:2013-12-1
  147. /// <summary>
  148. /// 生产区下拉框绑定
  149. /// </summary>
  150. private void BindWorkLineCombox()
  151. {
  152. DAL.ZSql sql1 = new DAL.ZSql();
  153. sql1.Open("Select DISTINCT WorkLine from T_Mark");
  154. cbWorkLine.ItemsSource = sql1.m_table.DefaultView;
  155. cbWorkLine.DisplayMemberPath = "WorkLine";
  156. cbWorkLine.SelectedValuePath = "WorkLine";
  157. //添加0号路线,表示所有路线都关联
  158. DAL.ZSql sql2 = new DAL.ZSql();
  159. sql2.Open("Select 0 as LineNum union Select DISTINCT LineNum from T_Line");
  160. cbLineNum.ItemsSource = sql2.m_table.DefaultView;
  161. cbLineNum.DisplayMemberPath = "LineNum";
  162. cbLineNum.SelectedValuePath = "LineNum";
  163. sql2.Close();
  164. }
  165. /// <summary>
  166. /// 表格选择不同行消息触发
  167. /// </summary>
  168. /// <param name="sender"></param>
  169. /// <param name="e"></param>
  170. private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
  171. {
  172. DataRowView selectItem = dataGrid1.SelectedItem as DataRowView;
  173. if (selectItem != null)
  174. {
  175. id =Convert.ToInt16(selectItem["ID"].ToString().Trim());
  176. cbWorkLine.Text = string.IsNullOrEmpty(selectItem["WorkLine"].ToString().Trim()) ? "0" : selectItem["WorkLine"].ToString().Trim();
  177. cbLineNum.Text = string.IsNullOrEmpty(selectItem["LineNum"].ToString().Trim()) ? "0" : selectItem["LineNum"].ToString().Trim();
  178. txtMark.Text = string.IsNullOrEmpty(selectItem["Mark"].ToString().Trim()) ? "0" : selectItem["Mark"].ToString().Trim();
  179. }
  180. else
  181. {
  182. cbWorkLine.Text = "";
  183. cbLineNum.Text = "";
  184. txtMark.Text = "";
  185. }
  186. }
  187. /// <summary>
  188. /// 删除交通管制区
  189. /// </summary>
  190. /// <param name="sender"></param>
  191. /// <param name="e"></param>
  192. private void btnDeleteTraffic_Click(object sender, RoutedEventArgs e)
  193. {
  194. string trafficnum = cbTraffic.Text.ToString().Trim();
  195. if (string.IsNullOrEmpty(trafficnum))
  196. {
  197. MessageBox.Show("请输要删除的交通管制区号!");
  198. cbTraffic.Focus();
  199. return;
  200. }
  201. sql1.Open("select * from T_Traffic where TrafficNum=" + trafficnum);
  202. if (sql1.Rows.Count <= 0)
  203. {
  204. MessageBox.Show("不存在此交通管制区号!");
  205. return;
  206. }
  207. if (MessageBox.Show("确认要删除此管制区?","警告",MessageBoxButton.YesNo,MessageBoxImage.Warning) == MessageBoxResult.Yes)
  208. {
  209. sql1.Open("delete T_Traffic where TrafficNum=" + trafficnum);
  210. int num = Convert.ToInt16(trafficnum);
  211. DeleteTraffic(num);
  212. MessageBox.Show("删除交通管制区号成功!");
  213. BindLineCombox();
  214. }
  215. sql1.Close();
  216. }
  217. /// <summary>
  218. /// 删除交通管制区(新管制表)
  219. /// </summary>
  220. /// <param name="sender"></param>
  221. /// <param name="e"></param>
  222. private void DeleteTraffic(int trafficnum)
  223. {
  224. if (trafficnum<=0)
  225. {
  226. MessageBox.Show("请输要删除的交通管制区号!");
  227. cbTraffic.Focus();
  228. return;
  229. }
  230. sql1.Open("select * from BAS_TRAFFIC where TrafficNum=" + trafficnum);
  231. if (sql1.Rows.Count <= 0)
  232. {
  233. MessageBox.Show("不存在此交通管制区号!");
  234. return;
  235. }
  236. if (MessageBox.Show("确认要删除此管制区?", "警告", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes)
  237. {
  238. sql1.Open("delete BAS_TRAFFIC where TrafficNum=" + trafficnum);
  239. }
  240. sql1.Close();
  241. }
  242. /// <summary>
  243. /// 添加交通管制区
  244. /// </summary>
  245. /// <param name="sender"></param>
  246. /// <param name="e"></param>
  247. private void btnAdd_Click(object sender, RoutedEventArgs e)
  248. {
  249. //获取界面数据
  250. string strtraffic = cbTraffic.Text.ToString().Trim();
  251. string strmark = txtMark.Text.ToString().Trim();
  252. string strworkline = cbWorkLine.Text.ToString().Trim();
  253. string strlinenum = cbLineNum.Text.ToString().Trim();
  254. #region 检查验证数据的正确完整性
  255. //验证数据是否填写完整
  256. if (string.IsNullOrEmpty(strmark) || string.IsNullOrEmpty(strworkline) || string.IsNullOrEmpty(strtraffic) || string.IsNullOrEmpty(strlinenum))
  257. {
  258. MessageBox.Show("交通管制区、生产区、路线、地标都不能为空!");
  259. return;
  260. }
  261. //地标卡号验证
  262. sql1.Open("select ID from T_Mark where WorkLine=" + strworkline + " and Mark=" + strmark);
  263. if (sql1.rowcount < 1)
  264. {
  265. MessageBox.Show("输入的地标不存在!");
  266. return;
  267. }
  268. string strmarkid = sql1.Rows[0]["ID"].ToString();
  269. //检查数据是否重复添加
  270. sql1.Open("select * from T_Traffic where MarkID=@markid and TrafficNum=@trafficnum and LineNum=@linenum",
  271. new SqlParameter[]{
  272. new SqlParameter("markid",strmarkid),
  273. new SqlParameter("linenum",strlinenum),
  274. new SqlParameter("trafficnum",strtraffic)
  275. });
  276. if (sql1.Rows.Count > 0)
  277. {
  278. MessageBox.Show("对不起,已存在相同记录!");
  279. return;
  280. }
  281. #endregion
  282. #region 插入管制区与地标卡和路线之间的关系表
  283. sql1.Open("insert into T_Traffic (TrafficNum,MarkID,LineNum) Values (@trafficnum,@markid,@linenum)",
  284. new SqlParameter[]{
  285. new SqlParameter("trafficnum",strtraffic),
  286. new SqlParameter("markid",strmarkid),
  287. new SqlParameter("linenum",strlinenum)
  288. });
  289. sql1.Close();
  290. #endregion
  291. #region 插入新管制表
  292. DAL.ZSql sql2 = new DAL.ZSql();
  293. sql2.Open("select * from BAS_TRAFFIC where TrafficNum="+strtraffic);
  294. if (sql2.Rows.Count > 0)
  295. {
  296. ;
  297. }
  298. else
  299. {
  300. try
  301. {
  302. string sqlstr = string.Format("insert into BAS_TRAFFIC(TrafficNum,TrafficName,MainAgv,EnterTime,IsTraffic) Values ({0},{1},{2},'{3}',{4})", strtraffic, strtraffic, 0, DateTime.Now.ToString("yyyy-MM-dd"), 0);
  303. sql2.Open(sqlstr);
  304. sql2.Close();
  305. }
  306. catch(Exception ex)
  307. {
  308. throw ex;
  309. }
  310. }
  311. #endregion
  312. trafficnum = Convert.ToInt32(strtraffic);
  313. LoadDataGrid(trafficnum.ToString());
  314. BindLineCombox();
  315. MessageBox.Show("添加成功!");
  316. cbTraffic.SelectedValue = strtraffic;
  317. }
  318. /// <summary>
  319. /// 修改交通管制区
  320. /// </summary>
  321. /// <param name="sender"></param>
  322. /// <param name="e"></param>
  323. private void btnModify_Click(object sender, RoutedEventArgs e)
  324. {
  325. if (id <= 0)
  326. {
  327. MessageBox.Show("请在表格中选择要修改的行!");
  328. return;
  329. }
  330. string strtraffic = cbTraffic.Text.ToString().Trim();
  331. string strlinenum = cbLineNum.Text.ToString().Trim();
  332. string strmark = txtMark.Text.ToString().Trim();
  333. string strworkline = cbWorkLine.Text.ToString().Trim();
  334. #region 检查验证数据的正确完整性
  335. //验证数据是否填写完整
  336. if (string.IsNullOrEmpty(strmark) || string.IsNullOrEmpty(strworkline) || string.IsNullOrEmpty(strtraffic) || string.IsNullOrEmpty(strlinenum))
  337. {
  338. MessageBox.Show("交通管制区、生产区、路线、地标都不能为空!");
  339. return;
  340. }
  341. //地标卡号验证
  342. sql1.Open("select ID from T_Mark where WorkLine=" + strworkline + " and Mark=" + strmark);
  343. if (sql1.rowcount < 1)
  344. {
  345. MessageBox.Show("输入的地标不存在!");
  346. return;
  347. }
  348. string strmarkid = sql1.Rows[0]["ID"].ToString();
  349. //检查数据是否重复添加
  350. sql1.Open("select * from T_Traffic where MarkID=@markid and TrafficNum=@trafficnum and LineNum=@linenum",
  351. new SqlParameter[]{
  352. new SqlParameter("markid",strmarkid),
  353. new SqlParameter("linenum",strlinenum),
  354. new SqlParameter("trafficnum",strtraffic)
  355. });
  356. if (sql1.Rows.Count > 0)
  357. {
  358. MessageBox.Show("对不起,已存在相同记录!");
  359. return;
  360. }
  361. #endregion
  362. #region 更新管制区数据关联表
  363. sql1.Open("update T_Traffic set MarkID=@markid,linenum=@linenum,Mark=@mark where ID=@id",
  364. new SqlParameter[]{
  365. new SqlParameter("markid",strmarkid),
  366. new SqlParameter("linenum",strlinenum),
  367. new SqlParameter("mark",strmark),
  368. new SqlParameter("id",id)
  369. });
  370. sql1.Close();
  371. #endregion
  372. LoadDataGrid(trafficnum.ToString());
  373. MessageBox.Show("修改成功!");
  374. }
  375. /// <summary>
  376. /// 删除管制区中点
  377. /// </summary>
  378. /// <param name="sender"></param>
  379. /// <param name="e"></param>
  380. private void btnDelete_Click(object sender, RoutedEventArgs e)
  381. {
  382. string strtraffic = cbTraffic.Text.ToString().Trim();
  383. string strmark = txtMark.Text.ToString().Trim();
  384. string strworkline = cbWorkLine.Text.ToString().Trim();
  385. string strlinenum = cbLineNum.Text.ToString();
  386. #region 检查验证数据的正确完整性
  387. //验证数据是否填写完整
  388. if (string.IsNullOrEmpty(strmark) || string.IsNullOrEmpty(strworkline) || string.IsNullOrEmpty(strtraffic) || string.IsNullOrEmpty(strlinenum))
  389. {
  390. MessageBox.Show("交通管制区、生产区、路线、地标都不能为空!");
  391. return;
  392. }
  393. //地标卡号验证
  394. sql1.Open("select ID from T_Mark where WorkLine=" + strworkline + " and Mark=" + strmark);
  395. if (sql1.rowcount < 1)
  396. {
  397. MessageBox.Show("输入的地标不存在!");
  398. return;
  399. }
  400. #endregion
  401. string strmarkid = sql1.Rows[0]["ID"].ToString();
  402. sql1.Open("delete from T_Traffic where TrafficNum=@trafficnum and MarkID=@markid and linenum=@linenum",
  403. new SqlParameter[]{
  404. new SqlParameter("trafficnum",strtraffic),
  405. new SqlParameter("markid",strmarkid),
  406. new SqlParameter("linenum",strlinenum)
  407. });
  408. LoadDataGrid(strtraffic);
  409. sql1.Close();
  410. MessageBox.Show("删除成功!");
  411. }
  412. /// <summary>
  413. /// 交通管制区号下拉框选择消息响应
  414. /// </summary>
  415. /// <param name="sender"></param>
  416. /// <param name="e"></param>
  417. private void cbTraffic_SelectionChanged(object sender, SelectionChangedEventArgs e)
  418. {
  419. if (cbTraffic.SelectedValue != null)
  420. {
  421. trafficnum = Convert.ToUInt16(cbTraffic.SelectedValue.ToString().Trim());
  422. LoadDataGrid(trafficnum.ToString());
  423. }
  424. }
  425. void UpdateMark()
  426. {
  427. for (int i = 0; i < pointList.Count;i++ )
  428. {
  429. MarkInfo info = pointList[i].Tag as MarkInfo;
  430. if (info != null)
  431. {
  432. pointList[i].Height = MarkDiameter;
  433. pointList[i].Width = MarkDiameter;
  434. Canvas.SetLeft(pointList[i], info.m_x - MarkDiameter/2);
  435. Canvas.SetTop(pointList[i], info.m_y - MarkDiameter/2);
  436. if (info.m_isVirtual)//虚拟点
  437. {
  438. pointList[i].Fill = IsVirtualMark;
  439. }
  440. else
  441. {
  442. pointList[i].Fill = NotVirtualMark;
  443. }
  444. }
  445. }
  446. for (int i = 0; i < pointLableList.Count;i++ )
  447. {
  448. MarkInfo info = pointLableList[i].Tag as MarkInfo;
  449. if (info != null)
  450. {
  451. pointLableList[i].Foreground = Brushes.Black;
  452. Canvas.SetLeft(pointLableList[i], info.m_x - 4);
  453. Canvas.SetTop(pointLableList[i], info.m_y - 7);
  454. }
  455. }
  456. }
  457. /// <summary>
  458. /// 加载数据表格
  459. /// </summary>
  460. /// <param name="paratrafficnum">交通管制编号</param>
  461. private void LoadDataGrid(string paratrafficnum)
  462. {
  463. DAL.ZSql sql2 = new DAL.ZSql();
  464. sql2.Open(string.Format("select A.ID,A.TrafficNum,A.MarkID,B.Mark,B.WorkLine,B.XPos,B.YPos,A.LineNum from T_Traffic A right join T_Mark B on B.ID=A.MarkID where TrafficNum={0}", paratrafficnum));
  465. LoadAllMark();
  466. UpdateMark();
  467. double x, y;
  468. for (int i = 0; i < sql2.Rows.Count; i++)
  469. {
  470. if (!string.IsNullOrEmpty(sql2.Rows[i]["MarkID"].ToString()) && !string.IsNullOrEmpty(sql2.Rows[i]["XPos"].ToString()) && !string.IsNullOrEmpty(sql2.Rows[i]["YPos"].ToString()))
  471. {
  472. x = Convert.ToDouble(sql2.Rows[i]["XPos"]);
  473. y = Convert.ToDouble(sql2.Rows[i]["YPos"]);
  474. int index = pointList.FindIndex(c => ((MarkInfo)c.Tag).m_id.ToString() == sql2.Rows[i]["MarkID"].ToString());
  475. if(index != -1)
  476. {
  477. Ellipse markellipse = pointList[index];
  478. markellipse.Height = MarkDiameter ;
  479. markellipse.Width = MarkDiameter;
  480. markellipse.Fill = TrafficColor;
  481. markellipse.ToolTip = "MarkID:" + sql2.Rows[i]["MarkID"].ToString() + "\r\nWorkLine:" + sql2.Rows[i]["WorkLine"].ToString() + " Mark:" + sql2.Rows[i]["Mark"];
  482. Canvas.SetLeft(markellipse, x - MarkDiameter/2);
  483. Canvas.SetTop(markellipse, y - MarkDiameter/2);
  484. }
  485. int index2 = pointLableList.FindIndex(c => ((MarkInfo)c.Tag).m_id.ToString() == sql2.Rows[i]["MarkID"].ToString());
  486. if(index2 != -1)
  487. {
  488. Label marklable = pointLableList[index2];
  489. marklable.FontSize = 10;
  490. marklable.Foreground = TrafficColor;
  491. //marklable.Content = sql2.Rows[i]["MarkID"].ToString();//地标ID
  492. marklable.Content = sql2.Rows[i]["Mark"].ToString(); //地标编号
  493. Canvas.SetLeft(marklable, x - 14);
  494. Canvas.SetTop(marklable, y -20);
  495. }
  496. }
  497. }
  498. dataGrid1.ItemsSource = sql2.m_table.DefaultView;
  499. sql2.Close();
  500. }
  501. bool MapZoomInOut = false;
  502. Point lastpoint = new Point(0, 0);
  503. Point OffsetPoint = new Point(0, 0);
  504. /// <summary>
  505. /// 画布中鼠标左键消息
  506. /// </summary>
  507. /// <param name="sender"></param>
  508. /// <param name="e"></param>
  509. private void canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  510. {
  511. MapZoomInOut = true;
  512. lastpoint.X = e.GetPosition(null).X + OffsetPoint.X;
  513. lastpoint.Y = e.GetPosition(null).Y + OffsetPoint.Y;
  514. this.Cursor = Cursors.Hand;
  515. }
  516. /// <summary>
  517. /// 鼠标移出画布消息
  518. /// </summary>
  519. /// <param name="sender"></param>
  520. /// <param name="e"></param>
  521. private void canvas_MouseLeave(object sender, MouseEventArgs e)
  522. {
  523. MapZoomInOut = false;
  524. }
  525. /// <summary>
  526. /// 鼠标左键弹起消息
  527. /// </summary>
  528. /// <param name="sender"></param>
  529. /// <param name="e"></param>
  530. private void canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
  531. {
  532. if (MapZoomInOut)
  533. {
  534. MapZoomInOut = false;
  535. OffsetPoint = canvas.Offset;
  536. }
  537. }
  538. /// <summary>
  539. /// 鼠标滚轮消息
  540. /// </summary>
  541. /// <param name="sender"></param>
  542. /// <param name="e"></param>
  543. private void canvas_MouseWheel(object sender, MouseWheelEventArgs e)
  544. {
  545. canvas.Scale += e.Delta / 1000.0;
  546. //最大放大十倍
  547. if (canvas.Scale > 10)
  548. {
  549. canvas.Scale = 10;
  550. }
  551. //缩小可以小到3倍
  552. if (canvas.Scale < 0.3)
  553. {
  554. canvas.Scale = 0.3;
  555. }
  556. }
  557. /// <summary>
  558. /// 画布中鼠标移动消息
  559. /// </summary>
  560. /// <param name="sender"></param>
  561. /// <param name="e"></param>
  562. private void canvas_MouseMove(object sender, MouseEventArgs e)
  563. {
  564. if (MapZoomInOut)
  565. {
  566. Point newpoint = e.GetPosition(null);
  567. canvas.Offset = new Point(lastpoint.X - newpoint.X, lastpoint.Y - newpoint.Y);
  568. }
  569. }
  570. private void ENotVirtualMark_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  571. {
  572. ColorFont.ColorDialog fntDialog = new ColorFont.ColorDialog(NotVirtualMark, MarkDiameter);
  573. if (fntDialog.ShowDialog() == true)
  574. {
  575. NotVirtualMark = fntDialog.selectedColor;
  576. MarkDiameter = fntDialog.selectedSize;
  577. ENotVirtualMark.Fill = fntDialog.selectedColor;
  578. LoadAllMark();
  579. }
  580. }
  581. /// <summary>
  582. /// 虚拟点颜色设置
  583. /// </summary>
  584. /// <param name="sender"></param>
  585. /// <param name="e"></param>
  586. private void EVirtualMark_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  587. {
  588. ColorFont.ColorDialog fntDialog = new ColorFont.ColorDialog(IsVirtualMark, MarkDiameter);
  589. if (fntDialog.ShowDialog() == true)
  590. {
  591. IsVirtualMark = fntDialog.selectedColor;
  592. MarkDiameter = fntDialog.selectedSize;
  593. EVirtualMark.Fill = fntDialog.selectedColor;
  594. LoadAllMark();
  595. }
  596. }
  597. /// <summary>
  598. /// 非虚拟点颜色设置
  599. /// </summary>
  600. /// <param name="sender"></param>
  601. /// <param name="e"></param>
  602. private void ETrafficMark_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
  603. {
  604. ColorFont.ColorDialog fntDialog = new ColorFont.ColorDialog(TrafficColor, MarkDiameter);
  605. if (fntDialog.ShowDialog() == true)
  606. {
  607. TrafficColor = fntDialog.selectedColor;
  608. ETrafficMark.Fill = fntDialog.selectedColor;
  609. MarkDiameter = fntDialog.selectedSize;
  610. if (cbTraffic.SelectedValue != null)
  611. {
  612. trafficnum = Convert.ToUInt16(cbTraffic.SelectedValue.ToString().Trim());
  613. LoadDataGrid(trafficnum.ToString());
  614. }
  615. }
  616. }
  617. /// <summary>
  618. /// 页面卸载消息
  619. /// </summary>
  620. /// <param name="sender"></param>
  621. /// <param name="e"></param>
  622. private void Page_Unloaded(object sender, RoutedEventArgs e)
  623. {
  624. Properties.Settings.Default.MarkVirtualColor = IsVirtualMark.Color;
  625. Properties.Settings.Default.MarkNotColor = NotVirtualMark.Color;
  626. Properties.Settings.Default.MarkDiameter = MarkDiameter;
  627. Properties.Settings.Default.TrafficColor = TrafficColor.Color;
  628. Properties.Settings.Default.TrafficKeyMarkColor = KeyMarkColor.Color;
  629. Properties.Settings.Default.Save();
  630. if (MessageBox.Show("是否更新管制区数据?", "提示", MessageBoxButton.YesNo, MessageBoxImage.Information) == MessageBoxResult.Yes)
  631. TrafficManager.Traffic.InitTrafficAreas();
  632. }
  633. }
  634. }