GuanDianXian.cs 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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. this.SetSize(300, 200);
  30. IsShowResultWindow = false;
  31. }
  32. protected override void OnLoad(EventArgs e)
  33. {
  34. ComsStatic.SetLayersIsSelectableFalse(ComsStatic.gsGuanXian.Name, false);
  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.ToLower().Contains("dv") || _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})", ComsStatic.StringToDouble(_rdSelect.GetFieldValue("x"), 2), ComsStatic.StringToDouble(_rdSelect.GetFieldValue("y"), 2));
  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. MapControl.Map.TrackingLayer.Clear();
  56. MapControl.Map.TrackingLayer.Add(newGeoPoint, "MapControl_MouseDoubleClick");
  57. MapControl.Map.RefreshTrackingLayer();
  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.gsGuanDian.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. rddvJSJDPT.SetFieldValue("lrrq", DateTime.Now.ToLocalTime());
  76. Int32 objID = ComsStatic.GetMaxValueInt(ComsStatic.gsGuanDian, "objectid") + 1;
  77. string _duandian = ComsStatic.dvJDDatasetName + objID;
  78. rddvJSJDPT.SetFieldValue("objectid", objID);
  79. rddvJSJDPT.SetFieldValue("bsm", _duandian);
  80. rddvJSJDPT.SetFieldValue("fldm", ComsStatic.dvJDCaption);
  81. rddvJSJDPT.SetFieldValue("cqbh", "管线联动");
  82. if (rddvJSJDPT.Update())
  83. {
  84. Commons.LogHelper.Info(string.Format("管线联动-新增管线节点成功!新增的OBJECTID是{0}。", objID));
  85. (ComsStatic.Datasource.Datasets[ComsStatic.dvJDDatasetName] as DatasetVector).Append(rddvJSJDPT);
  86. }
  87. else
  88. {
  89. ComsStatic.EditHistoryUndo(m_EditHistory);
  90. ComsStatic.ShowErrorLog("新节点新增 操作失败!"); return false;
  91. }
  92. Recordset rdJSJDPT = null;
  93. if (rdJSLKqsdh.RecordCount > 0)//2 更改原管线的节点 起始点号
  94. {
  95. rdJSLKqsdh.MoveFirst();
  96. while (!rdJSLKqsdh.IsEOF)
  97. {
  98. rdJSJDPT = ComsStatic.gsGuanDian.Query(string.Format(" bsm='{0}' ", rdJSLKqsdh.GetFieldValue("zddh")), CursorType.Static);
  99. if (rdJSJDPT.RecordCount != 1) continue;
  100. Point2D p = ComsStatic.GetPoint2D(rdJSJDPT.GetFieldValue("x"), rdJSJDPT.GetFieldValue("y"));
  101. GeoLine newline = new GeoLine(new Point2Ds(newPoint, p));
  102. m_EditHistory.Add(EditType.Modify, rdJSLKqsdh, false);
  103. rdJSLKqsdh.Edit();
  104. rdJSLKqsdh.SetFieldValue("qsdh", _duandian);
  105. rdJSLKqsdh.SetFieldValue("cd", ComsStatic.StringToDouble(newline.Length, 2));
  106. rdJSLKqsdh.SetFieldValue("shape_length", newline.Length);
  107. rdJSLKqsdh.SetGeometry(newline);
  108. if (rdJSLKqsdh.Update())
  109. {
  110. Commons.LogHelper.Error(string.Format("管线联动-更改原管线的起始点号成功!管线的SMID是{0}。", rdJSLKqsdh.GetID()));
  111. }
  112. else
  113. {
  114. ComsStatic.EditHistoryUndo(m_EditHistory);
  115. ComsStatic.ShowErrorLog("终点点号不变,更新起始点号 操作失败!"); return false;
  116. }
  117. rdJSLKqsdh.MoveNext();
  118. }
  119. }
  120. if (rdJSLKzddh.RecordCount > 0)//3 更改原管线的节点 终点点号
  121. {
  122. rdJSLKzddh.MoveFirst();
  123. while (!rdJSLKzddh.IsEOF)
  124. {
  125. rdJSJDPT = ComsStatic.gsGuanDian.Query(string.Format(" bsm='{0}' ", rdJSLKzddh.GetFieldValue("qsdh")), CursorType.Static);
  126. if (rdJSJDPT.RecordCount != 1) continue;
  127. Point2D p = ComsStatic.GetPoint2D(rdJSJDPT.GetFieldValue("x"), rdJSJDPT.GetFieldValue("y"));
  128. GeoLine newline = new GeoLine(new Point2Ds(newPoint, p));
  129. m_EditHistory.Add(EditType.Modify, rdJSLKzddh, false);
  130. rdJSLKzddh.Edit();
  131. rdJSLKzddh.SetFieldValue("zddh", _duandian);
  132. rdJSLKzddh.SetFieldValue("cd", ComsStatic.StringToDouble(newline.Length, 2));
  133. rdJSLKzddh.SetFieldValue("shape_length", newline.Length);
  134. rdJSLKzddh.SetGeometry(newline);
  135. if (rdJSLKzddh.Update())
  136. {
  137. Commons.LogHelper.Error(string.Format("管线联动-更改原管线的终点点号成功!管线的SMID是{0}。", rdJSLKqsdh.GetID()));
  138. }
  139. else
  140. {
  141. ComsStatic.EditHistoryUndo(m_EditHistory);
  142. ComsStatic.ShowErrorLog("起始管点不变,更新终点管点 操作失败!"); return false;
  143. }
  144. rdJSLKzddh.MoveNext();
  145. }
  146. }
  147. //4 删除 原节点
  148. m_EditHistory.Add(EditType.Delete, _rdSelect, false);
  149. if (_rdSelect.Delete())
  150. {
  151. Commons.LogHelper.Error(string.Format("管线联动-删除原节点成功!原节点的SMID是{0}。", yuanBSM));
  152. ComsStatic.ShowOKLog("点线联动操作成功");
  153. }
  154. else
  155. {
  156. ComsStatic.EditHistoryUndo(m_EditHistory);
  157. ComsStatic.ShowErrorLog("原节点删除失败!"); return false;
  158. }
  159. }
  160. catch (Exception e)
  161. {
  162. ComsStatic.EditHistoryUndo(m_EditHistory);
  163. ComsStatic.ShowErrorLog("点线联动出错!", e.Message); return false;
  164. }
  165. return true;
  166. }
  167. private void uibtnLianjie_Click(object sender, EventArgs e)//生成新的管线
  168. {
  169. if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint is null)
  170. {
  171. Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点"); return;
  172. }
  173. ComsStatic.TrackingLayerRemove("newLine");
  174. rdJSLKqsdh = ComsStatic.gsGuanXian.Query(string.Format(" qsdh='{0}' ", yuanBSM), CursorType.Dynamic);
  175. rdJSLKzddh = ComsStatic.gsGuanXian.Query(string.Format(" zddh='{0}' ", yuanBSM), CursorType.Dynamic);
  176. Recordset rdJSJDPT = null;
  177. if (rdJSLKqsdh.RecordCount == 0 && rdJSLKzddh.RecordCount == 0)
  178. {
  179. Sunny.UI.UIMessageTip.ShowError("原节点未查询到管线信息!"); return;
  180. }
  181. if (rdJSLKqsdh.RecordCount != 0)
  182. {
  183. rdJSLKqsdh.MoveFirst();
  184. while (!rdJSLKqsdh.IsEOF)
  185. {
  186. //rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}' ", rdJSLKqsdh.GetFieldValue("zddh")));
  187. rdJSJDPT = ComsStatic.gsGuanDian.Query(string.Format(" bsm='{0}' ", rdJSLKqsdh.GetFieldValue("zddh")), CursorType.Static);
  188. if (rdJSJDPT.RecordCount != 1) rdJSLKqsdh.MoveNext();
  189. Point2D p = new Point2D(double.Parse(rdJSJDPT.GetFieldValue("X").ToString()), double.Parse(rdJSJDPT.GetFieldValue("Y").ToString()));
  190. //Point2D p = ComsStatic.GetPoint2D(rdJSJDPT.GetFieldValue("x"), rdJSJDPT.GetFieldValue("y"));
  191. GeoLine newLineqsdh = new GeoLine(new Point2Ds(newPoint, p));
  192. newLineqsdh.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  193. MapControl.Map.TrackingLayer.Add(newLineqsdh, "newLine");
  194. rdJSLKqsdh.MoveNext();
  195. }
  196. }
  197. if (rdJSLKzddh.RecordCount != 0)
  198. {
  199. rdJSLKzddh.MoveFirst();
  200. while (!rdJSLKzddh.IsEOF)
  201. {
  202. rdJSJDPT = ComsStatic.gsGuanDian.Query(string.Format(" bsm='{0}' ", rdJSLKzddh.GetFieldValue("qsdh")), CursorType.Static);
  203. if (rdJSJDPT.RecordCount != 1) rdJSLKzddh.MoveNext();
  204. Point2D p = new Point2D(double.Parse(rdJSJDPT.GetFieldValue("X").ToString()), double.Parse(rdJSJDPT.GetFieldValue("Y").ToString()));
  205. GeoLine newLinezddh = new GeoLine(new Point2Ds(p, newPoint));
  206. newLinezddh.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate;
  207. MapControl.Map.TrackingLayer.Add(newLinezddh, "newLine");
  208. rdJSLKzddh.MoveNext();
  209. }
  210. }
  211. MapControl.Map.RefreshTrackingLayer();
  212. }
  213. private void uiButton2_Click(object sender, EventArgs e)
  214. {
  215. MapControl.Map.TrackingLayer.Clear(); MapControl.Map.RefreshTrackingLayer();
  216. rdJSLKqsdh = null; rdJSLKzddh = null; newGeoPoint = null; yuanBSM = string.Empty; newPoint = new Point2D(0, 0);
  217. uilbStart.Text = ""; uilbEnd.Text = "";
  218. }
  219. public override void AfterClose()
  220. {
  221. ComsStatic.RecordsetDispose(rdJSLKqsdh); ComsStatic.RecordsetDispose(rdJSLKzddh);
  222. MapControl.MouseDoubleClick -= MapControl_MouseDoubleClick;
  223. MapControl.GeometrySelected -= MapControl_GeometrySelected;
  224. base.AfterClose();
  225. }
  226. }
  227. }