GuanDianXian.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  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; GeoLine newLineqsdh = null;
  24. Recordset rdJSLKzddh = null; GeoLine newLinezddh = null;
  25. public GuanDianXian()
  26. {
  27. this.ConditionPanelName = "点线联动";
  28. InitializeComponent();
  29. this.SetSize(500, 185);
  30. IsShowResultWindow = false;
  31. }
  32. protected override void OnLoad(EventArgs e)
  33. {
  34. ComsStatic.SetLayersIsSelectableFalse(ComsStatic.dvJSJDPT.Name, true);
  35. MapControl.MouseDoubleClick += MapControl_MouseDoubleClick;
  36. MapControl.GeometrySelected += MapControl_GeometrySelected;
  37. }
  38. private void MapControl_GeometrySelected(object sender, SuperMap.UI.GeometrySelectedEventArgs e)
  39. {
  40. Selection[] _selection = MapControl.Map.FindSelection(true);
  41. _rdSelect = _selection[0].ToRecordset();
  42. if (_rdSelect.Dataset.Name != ComsStatic.dvJSJDPT.Name || _selection.Length != 1 || _selection[0].Count != 1)
  43. {
  44. Sunny.UI.UIMessageTip.ShowError("仅可以选择节点图层,仅可以选择一个节点"); return;
  45. }
  46. _rdSelect.MoveFirst();
  47. yuanBSM = _rdSelect.GetFieldValue("bsm").ToString();
  48. uilbStart.Text = string.Format("新节点坐标({0},{1}),标识码:{2}", Math.Round(newPoint.X, 2), Math.Round(newPoint.Y, 2), yuanBSM);
  49. }
  50. private void MapControl_MouseDoubleClick(object sender, MouseEventArgs e)
  51. {
  52. newPoint = MapControl.Map.PixelToMap(new Point(e.X, e.Y));
  53. newGeoPoint = new GeoPoint(newPoint.X, newPoint.Y);
  54. newGeoPoint.Style = ComsStatic.geoStyle_Red_Mark5mm;
  55. int index = MapControl.Map.TrackingLayer.IndexOf("MapControl_MouseDoubleClick");
  56. if (index > -1) MapControl.Map.TrackingLayer.Remove(index);
  57. MapControl.Map.TrackingLayer.Add(newGeoPoint, "MapControl_MouseDoubleClick");
  58. uilbEnd.Text = string.Format("新节点坐标({0},{1})", Math.Round(newPoint.X, 2), Math.Round(newPoint.Y, 2));
  59. }
  60. public override object Do(DockPanel dockPanel = null)
  61. {
  62. if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint == null || (rdJSLKqsdh is null && rdJSLKzddh is null))
  63. {
  64. Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点,然后点击“新管线预览”"); return false;
  65. }
  66. EditHistory m_EditHistory = new EditHistory();
  67. try
  68. {
  69. //1 增加新 节点
  70. Recordset rddvJSJDPT = ComsStatic.dvJSJDPT.GetRecordset(true, CursorType.Dynamic);
  71. m_EditHistory.Add(EditType.AddNew, rddvJSJDPT, false);
  72. rddvJSJDPT.AddNew(newGeoPoint);
  73. rddvJSJDPT.SetFieldValue("x", newGeoPoint.X);
  74. rddvJSJDPT.SetFieldValue("y", newGeoPoint.Y);
  75. Int32 objID = ComsStatic.GetMaxValueInt(ComsStatic.dvJSJDPT, "OBJECTID") + 1;
  76. string _duandian = "JSJDPT" + objID;
  77. rddvJSJDPT.SetFieldValue("ms", 0);
  78. rddvJSJDPT.SetFieldValue("lrrq", DateTime.Now.ToLocalTime());
  79. rddvJSJDPT.SetFieldValue("enabled", 1);
  80. rddvJSJDPT.SetFieldValue("bsm", _duandian);
  81. rddvJSJDPT.SetFieldValue("fldm", "供水节点");
  82. rddvJSJDPT.SetFieldValue("objectid", objID);
  83. rddvJSJDPT.SetFieldValue("cqbh", "管线联动");
  84. if (rddvJSJDPT.Update())
  85. {
  86. Commons.LogHelper.Error(string.Format("管线联动-新增管线节点成功!新增的OBJECTID是{0}。", objID));
  87. }
  88. else
  89. {
  90. ComsStatic.EditHistoryUndo(m_EditHistory);
  91. ComsStatic.ShowErrorLog("新节点新增 操作失败!"); return false;
  92. }
  93. if (rdJSLKqsdh.RecordCount > 0)//2 更改原管线的节点 起始点号
  94. {
  95. rdJSLKqsdh.MoveFirst();
  96. while (!rdJSLKqsdh.IsEOF)
  97. {
  98. m_EditHistory.Add(EditType.Modify, rdJSLKqsdh, false);
  99. rdJSLKqsdh.Edit();
  100. rdJSLKqsdh.SetFieldValue("qsdh", _duandian);
  101. rdJSLKqsdh.SetGeometry(newLineqsdh);
  102. if (rdJSLKqsdh.Update())
  103. {
  104. Commons.LogHelper.Error(string.Format("管线联动-更改原管线的起始点号成功!管线的SMID是{0}。", rdJSLKqsdh.GetFieldValue("smid")));
  105. }
  106. else
  107. {
  108. ComsStatic.EditHistoryUndo(m_EditHistory);
  109. ComsStatic.ShowErrorLog("终点点号不变,更新起始点号 操作失败!"); return false;
  110. }
  111. rdJSLKqsdh.MoveNext();
  112. }
  113. }
  114. if (rdJSLKzddh.RecordCount > 0)//3 更改原管线的节点 终点点号
  115. {
  116. rdJSLKzddh.MoveFirst();
  117. while (!rdJSLKzddh.IsEOF)
  118. {
  119. m_EditHistory.Add(EditType.Modify, rdJSLKzddh, false);
  120. rdJSLKzddh.Edit();
  121. rdJSLKzddh.SetFieldValue("zddh", _duandian);
  122. rdJSLKzddh.SetGeometry(newLinezddh);
  123. if (rdJSLKzddh.Update())
  124. {
  125. Commons.LogHelper.Error(string.Format("管线联动-更改原管线的终点点号成功!管线的SMID是{0}。", rdJSLKqsdh.GetFieldValue("smid")));
  126. }
  127. else
  128. {
  129. ComsStatic.EditHistoryUndo(m_EditHistory);
  130. ComsStatic.ShowErrorLog("起始管点不变,更新终点管点 操作失败!"); return false;
  131. }
  132. rdJSLKzddh.MoveNext();
  133. }
  134. }
  135. //4 删除 原节点
  136. m_EditHistory.Add(EditType.Delete, _rdSelect, false);
  137. if (_rdSelect.Delete())
  138. {
  139. Commons.LogHelper.Error(string.Format("管线联动-删除原节点成功!原节点的SMID是{0}。", yuanBSM));
  140. ComsStatic.ShowOKLog("点线联动操作成功");
  141. }
  142. else
  143. {
  144. ComsStatic.EditHistoryUndo(m_EditHistory);
  145. ComsStatic.ShowErrorLog("原节点删除失败!"); return false;
  146. }
  147. }
  148. catch (Exception e)
  149. {
  150. ComsStatic.EditHistoryUndo(m_EditHistory);
  151. ComsStatic.ShowErrorLog("点线联动出错!", e.Message); return false;
  152. }
  153. return true;
  154. }
  155. private void uibtnLianjie_Click(object sender, EventArgs e)//生成新的管线
  156. {
  157. if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint is null)
  158. {
  159. Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点"); return;
  160. }
  161. ComsStatic.TrackingLayerRemove("newLine");
  162. rdJSLKqsdh = ComsStatic.QueryRecordsetDynamic(ComsStatic.dvJSLK, string.Format(" qsdh='{0}' ", yuanBSM));
  163. rdJSLKzddh = ComsStatic.QueryRecordsetDynamic(ComsStatic.dvJSLK, string.Format(" zddh='{0}' ", yuanBSM));
  164. Recordset rdJSJDPT = null;
  165. if (rdJSLKqsdh.RecordCount == 0 && rdJSLKzddh.RecordCount == 0) { Sunny.UI.UIMessageTip.ShowError("原节点未查询到管线信息!"); return; }
  166. if (rdJSLKqsdh.RecordCount != 0)
  167. {
  168. rdJSLKqsdh.MoveFirst();
  169. while (!rdJSLKqsdh.IsEOF)
  170. {
  171. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}' ", rdJSLKqsdh.GetFieldValue("zddh")));
  172. Point2D p = new Point2D(ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("Y")));
  173. newLineqsdh = new GeoLine(new Point2Ds(newPoint, p));
  174. newLineqsdh.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  175. MapControl.Map.TrackingLayer.Add(newLineqsdh, "newLine");
  176. rdJSLKqsdh.MoveNext();
  177. }
  178. }
  179. if (rdJSLKzddh.RecordCount != 0)
  180. {
  181. rdJSLKzddh.MoveFirst();
  182. while (!rdJSLKzddh.IsEOF)
  183. {
  184. rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKzddh.GetFieldValue("qsdh")));
  185. Point2D p = new Point2D(ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("Y")));
  186. newLinezddh = new GeoLine(new Point2Ds(p, newPoint));
  187. newLinezddh.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  188. MapControl.Map.TrackingLayer.Add(newLinezddh, "newLine");
  189. rdJSLKzddh.MoveNext();
  190. }
  191. }
  192. MapControl.Map.Refresh();
  193. }
  194. private void uiButton2_Click(object sender, EventArgs e)
  195. {
  196. MapControl.Map.TrackingLayer.Clear(); MapControl.Map.RefreshEx(MapControl.Map.ViewBounds);
  197. rdJSLKqsdh = null; rdJSLKzddh = null; _rdSelect = null; newGeoPoint = null; yuanBSM = string.Empty;
  198. }
  199. public override void AfterClose()
  200. {
  201. ComsStatic.RecordsetDispose(_rdSelect); ComsStatic.RecordsetDispose(rdJSLKqsdh); ComsStatic.RecordsetDispose(rdJSLKzddh);
  202. MapControl.MouseDoubleClick -= MapControl_MouseDoubleClick;
  203. MapControl.GeometrySelected -= MapControl_GeometrySelected;
  204. base.AfterClose();
  205. }
  206. }
  207. }