GuanDianXian.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using WWPipeLine.MapBasic.Conditions;
  11. using WWPipeLine.MapBasic;
  12. using WeifenLuo.WinFormsUI.Docking;
  13. using SuperMap.Data;
  14. using SuperMap.Mapping;
  15. namespace WWPipeLine.MapTools.Conditions.EditGuanWang
  16. {
  17. public partial class GuanDianXian : ConditionPanel
  18. {
  19. Point2D newPoint = new Point2D(0, 0);
  20. GeoPoint newGeoPoint = null;
  21. Recordset _rdSelect = null;
  22. string yuanBSM = string.Empty;
  23. Recordset rdJSLKqsdh = null;
  24. Recordset rdJSLKzddh = null;
  25. public GuanDianXian()
  26. {
  27. this.ConditionPanelName = "点线联动";
  28. InitializeComponent();
  29. uilbRemark.Text = "首先在选择一个需要改动的管点。然后双击确认新管点位置。\r\n 点击“新管线预览”,确认无误后点击确定。";
  30. }
  31. protected override void OnLoad(EventArgs e)
  32. {
  33. ComsStatic.SetLayersIsSelectableFalse(ComsStatic.dvJSJDPT.Name, true);
  34. MapControl.MouseDoubleClick += MapControl_MouseDoubleClick;
  35. MapControl.GeometrySelected += MapControl_GeometrySelected;
  36. }
  37. private void MapControl_GeometrySelected(object sender, SuperMap.UI.GeometrySelectedEventArgs e)
  38. {
  39. Selection[] _selection = MapControl.Map.FindSelection(true);
  40. _rdSelect = _selection[0].ToRecordset();
  41. DatasetVector _dv = _rdSelect.Dataset as DatasetVector;
  42. if (_dv.Name != ComsStatic.dvJSJDPT.Name || _selection.Length != 1 || _selection[0].Count != 1)
  43. {
  44. Sunny.UI.UIMessageTip.ShowError("仅可以选择节点图层,仅可以选择一个节点"); return;
  45. }
  46. _rdSelect.MoveFirst();
  47. StringBuilder sb = new StringBuilder();
  48. yuanBSM = _rdSelect.GetFieldValue("bsm").ToString();
  49. sb.AppendFormat("{0}:{1}\r\n", "标识码", yuanBSM);
  50. sb.AppendFormat("{0}:{1}\r\n", "附属物", _rdSelect.GetFieldValue("fsw"));
  51. sb.AppendFormat("{0}:{1}\r\n", "X", _rdSelect.GetFieldValue("x"));
  52. sb.AppendFormat("{0}:{1}\r\n", "Y", _rdSelect.GetFieldValue("y"));
  53. uilbStart.Text = "原节点:" + sb.ToString();
  54. }
  55. private void MapControl_MouseDoubleClick(object sender, MouseEventArgs e)
  56. {
  57. newPoint = MapControl.Map.PixelToMap(new Point(e.X, e.Y));
  58. newGeoPoint = new GeoPoint(newPoint.X, newPoint.Y);
  59. int index = MapControl.Map.TrackingLayer.IndexOf("MapControl_MouseDoubleClick");
  60. if (index > -1) MapControl.Map.TrackingLayer.Remove(index);
  61. MapControl.Map.TrackingLayer.Add(newGeoPoint, "MapControl_MouseDoubleClick");
  62. StringBuilder sb = new StringBuilder();
  63. sb.AppendFormat("{0}:{1} ", "X", ComsStatic.StringToDouble(newPoint.X));
  64. sb.AppendFormat("{0}:{1}\r\n", "Y", ComsStatic.StringToDouble(newPoint.Y));
  65. uilbEnd.Text = "新节点:" + sb.ToString();
  66. }
  67. public override object Do(DockPanel dockPanel = null)
  68. {
  69. EditHistory m_EditHistory = new EditHistory();
  70. IsShowResultWindow = false;
  71. if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint == null || (rdJSLKqsdh is null && rdJSLKzddh is null))
  72. {
  73. Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点,然后点击“新管线预览”"); return false;
  74. }
  75. try
  76. {
  77. //1 增加新 节点
  78. Recordset rddvJSJDPT = ComsStatic.dvJSJDPT.GetRecordset(false, CursorType.Dynamic);
  79. m_EditHistory.Add(EditType.AddNew, rddvJSJDPT, true);
  80. rddvJSJDPT.AddNew(newGeoPoint);
  81. rddvJSJDPT.SetFieldValue("x", newGeoPoint.X);
  82. rddvJSJDPT.SetFieldValue("y", newGeoPoint.Y);
  83. Int32 objID = Int32.Parse(ComsStatic.GetMaxValue(ComsStatic.dvJSJDPT, "OBJECTID").ToString()) + 1;
  84. string _duandian = "JSJDPT" + objID;
  85. rddvJSJDPT.SetFieldValue("ms", 0);
  86. rddvJSJDPT.SetFieldValue("lrrq", DateTime.Now.ToLocalTime());
  87. rddvJSJDPT.SetFieldValue("enabled", 1);
  88. rddvJSJDPT.SetFieldValue("wth", _duandian);
  89. rddvJSJDPT.SetFieldValue("bsm", _duandian);
  90. rddvJSJDPT.SetFieldValue("fldm", "供水节点");
  91. rddvJSJDPT.SetFieldValue("objectid", objID);
  92. rddvJSJDPT.SetFieldValue("cqbh", "管线联动");
  93. if (rddvJSJDPT.Update())
  94. {
  95. }
  96. else
  97. {
  98. ComsStatic.EditHistoryUndo(m_EditHistory);
  99. Sunny.UI.UIMessageTip.ShowError("新节点新增 操作失败!"); return false;
  100. }
  101. if (rdJSLKqsdh.RecordCount > 0)//2 更改原管线的节点 起始点号
  102. {
  103. rdJSLKqsdh.MoveFirst();
  104. while (!rdJSLKqsdh.IsEOF)
  105. {
  106. rddvJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKqsdh.GetFieldValue("zddh")));
  107. Point2D p = new Point2D(ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("Y")));
  108. GeoLine newLine = new GeoLine(new Point2Ds(newPoint, p));
  109. m_EditHistory.Add(EditType.Modify, rdJSLKqsdh, true);
  110. rdJSLKqsdh.Edit();
  111. rdJSLKqsdh.SetFieldValue("qsdh", _duandian);
  112. rdJSLKqsdh.SetGeometry(newLine);
  113. if (rdJSLKqsdh.Update())
  114. { }
  115. else
  116. {
  117. ComsStatic.EditHistoryUndo(m_EditHistory);
  118. Sunny.UI.UIMessageTip.ShowError("终点点号不变,更新起始点号 操作失败!"); return false;
  119. }
  120. rdJSLKqsdh.MoveNext();
  121. }
  122. }
  123. if (rdJSLKzddh.RecordCount > 0)//3 更改原管线的节点 终点点号
  124. {
  125. rdJSLKzddh.MoveFirst();
  126. while (!rdJSLKzddh.IsEOF)
  127. {
  128. rddvJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKzddh.GetFieldValue("qsdh")));
  129. Point2D p = new Point2D(ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("Y")));
  130. GeoLine newLine = new GeoLine(new Point2Ds(p, newPoint));
  131. m_EditHistory.Add(EditType.Modify, rdJSLKzddh, true);
  132. rdJSLKzddh.Edit();
  133. rdJSLKzddh.SetFieldValue("zddh", _duandian);
  134. rdJSLKzddh.SetGeometry(newLine);
  135. if (rdJSLKzddh.Update())
  136. { }
  137. else
  138. {
  139. ComsStatic.EditHistoryUndo(m_EditHistory);
  140. Sunny.UI.UIMessageTip.ShowError("起始管点不变,更新终点管点 操作失败!"); return false;
  141. }
  142. rdJSLKzddh.MoveNext();
  143. }
  144. }
  145. //4 删除 原节点
  146. m_EditHistory.Add(EditType.Delete, _rdSelect, true);
  147. if (_rdSelect.DeleteAll())
  148. { }
  149. else
  150. {
  151. ComsStatic.EditHistoryUndo(m_EditHistory);
  152. Sunny.UI.UIMessageTip.ShowError("原节点删除失败!"); return false;
  153. }
  154. }
  155. catch
  156. {
  157. ComsStatic.EditHistoryUndo(m_EditHistory);
  158. Sunny.UI.UIMessageTip.ShowError("点线联动出错!"); return false;
  159. }
  160. MapControl.Map.Refresh();
  161. return true;
  162. }
  163. private void uibtnLianjie_Click(object sender, EventArgs e)//生成新的管线
  164. {
  165. if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint is null)
  166. {
  167. Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点"); return;
  168. }
  169. ComsStatic.TrackingLayerRemove("newLine");
  170. GeoLine newLine = null;
  171. rdJSLKqsdh = ComsStatic.QueryRecordsetDynamic(ComsStatic.dvJSLK, string.Format(" qsdh='{0}' ", yuanBSM));
  172. rdJSLKzddh = ComsStatic.QueryRecordsetDynamic(ComsStatic.dvJSLK, string.Format(" zddh='{0}' ", yuanBSM));
  173. Recordset rdJSJDPT = null;
  174. if (rdJSLKqsdh.RecordCount == 0 && rdJSLKzddh.RecordCount == 0) { Sunny.UI.UIMessageTip.ShowError("原节点未查询到管线信息!"); return; }
  175. if (rdJSLKqsdh.RecordCount != 0)
  176. {
  177. rdJSLKqsdh.MoveFirst();
  178. while (!rdJSLKqsdh.IsEOF)
  179. {
  180. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKqsdh.GetFieldValue("zddh")));
  181. Point2D p = new Point2D(ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("Y")));
  182. newLine = new GeoLine(new Point2Ds(newPoint, p));
  183. newLine.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  184. MapControl.Map.TrackingLayer.Add(newLine, "newLine");
  185. rdJSLKqsdh.MoveNext();
  186. }
  187. }
  188. if (rdJSLKzddh.RecordCount != 0)
  189. {
  190. rdJSLKzddh.MoveFirst();
  191. while (!rdJSLKzddh.IsEOF)
  192. {
  193. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKzddh.GetFieldValue("qsdh")));
  194. Point2D p = new Point2D(ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("Y")));
  195. newLine = new GeoLine(new Point2Ds(newPoint, p));
  196. newLine.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  197. MapControl.Map.TrackingLayer.Add(newLine, "newLine");
  198. rdJSLKzddh.MoveNext();
  199. }
  200. }
  201. MapControl.Map.Refresh();
  202. }
  203. private void uiButton2_Click(object sender, EventArgs e)
  204. {
  205. MapControl.Map.TrackingLayer.Clear(); MapControl.Map.RefreshEx(MapControl.Map.ViewBounds);
  206. rdJSLKqsdh = null; rdJSLKzddh = null; _rdSelect = null; newGeoPoint = null; yuanBSM = string.Empty;
  207. }
  208. public override void AfterClose()
  209. {
  210. ComsStatic.RecordsetDispose(_rdSelect); ComsStatic.RecordsetDispose(rdJSLKqsdh); ComsStatic.RecordsetDispose(rdJSLKzddh);
  211. MapControl.MouseDoubleClick -= MapControl_MouseDoubleClick;
  212. MapControl.GeometrySelected -= MapControl_GeometrySelected;
  213. base.AfterClose();
  214. }
  215. }
  216. }