using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using WWPipeLine.MapBasic.Conditions; using WWPipeLine.MapBasic; using WeifenLuo.WinFormsUI.Docking; using SuperMap.Data; using SuperMap.Mapping; namespace WWPipeLine.MapTools.Conditions.EditGuanWang { public partial class GuanDianXian : ConditionPanel { Point2D newPoint = new Point2D(0, 0); GeoPoint newGeoPoint = null; Recordset _rdSelect = null; string yuanBSM = string.Empty; Recordset rdJSLKqsdh = null; Recordset rdJSLKzddh = null; public GuanDianXian() { this.ConditionPanelName = "点线联动"; InitializeComponent(); uilbRemark.Text = "首先在选择一个需要改动的管点。然后双击确认新管点位置。\r\n 点击“新管线预览”,确认无误后点击确定。"; } protected override void OnLoad(EventArgs e) { ComsStatic.SetLayersIsSelectableFalse(ComsStatic.dvJSJDPT.Name, true); MapControl.MouseDoubleClick += MapControl_MouseDoubleClick; MapControl.GeometrySelected += MapControl_GeometrySelected; } private void MapControl_GeometrySelected(object sender, SuperMap.UI.GeometrySelectedEventArgs e) { Selection[] _selection = MapControl.Map.FindSelection(true); _rdSelect = _selection[0].ToRecordset(); DatasetVector _dv = _rdSelect.Dataset as DatasetVector; if (_dv.Name != ComsStatic.dvJSJDPT.Name || _selection.Length != 1 || _selection[0].Count != 1) { Sunny.UI.UIMessageTip.ShowError("仅可以选择节点图层,仅可以选择一个节点"); return; } _rdSelect.MoveFirst(); StringBuilder sb = new StringBuilder(); yuanBSM = _rdSelect.GetFieldValue("bsm").ToString(); sb.AppendFormat("{0}:{1}\r\n", "标识码", yuanBSM); sb.AppendFormat("{0}:{1}\r\n", "附属物", _rdSelect.GetFieldValue("fsw")); sb.AppendFormat("{0}:{1}\r\n", "X", _rdSelect.GetFieldValue("x")); sb.AppendFormat("{0}:{1}\r\n", "Y", _rdSelect.GetFieldValue("y")); uilbStart.Text = "原节点:" + sb.ToString(); } private void MapControl_MouseDoubleClick(object sender, MouseEventArgs e) { newPoint = MapControl.Map.PixelToMap(new Point(e.X, e.Y)); newGeoPoint = new GeoPoint(newPoint.X, newPoint.Y); int index = MapControl.Map.TrackingLayer.IndexOf("MapControl_MouseDoubleClick"); if (index > -1) MapControl.Map.TrackingLayer.Remove(index); MapControl.Map.TrackingLayer.Add(newGeoPoint, "MapControl_MouseDoubleClick"); StringBuilder sb = new StringBuilder(); sb.AppendFormat("{0}:{1} ", "X", ComsStatic.StringToDouble(newPoint.X)); sb.AppendFormat("{0}:{1}\r\n", "Y", ComsStatic.StringToDouble(newPoint.Y)); uilbEnd.Text = "新节点:" + sb.ToString(); } public override object Do(DockPanel dockPanel = null) { EditHistory m_EditHistory = new EditHistory(); IsShowResultWindow = false; if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint == null || (rdJSLKqsdh is null && rdJSLKzddh is null)) { Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点,然后点击“新管线预览”"); return false; } try { //1 增加新 节点 Recordset rddvJSJDPT = ComsStatic.dvJSJDPT.GetRecordset(false, CursorType.Dynamic); m_EditHistory.Add(EditType.AddNew, rddvJSJDPT, true); rddvJSJDPT.AddNew(newGeoPoint); rddvJSJDPT.SetFieldValue("x", newGeoPoint.X); rddvJSJDPT.SetFieldValue("y", newGeoPoint.Y); Int32 objID = Int32.Parse(ComsStatic.GetMaxValue(ComsStatic.dvJSJDPT, "OBJECTID").ToString()) + 1; string _duandian = "JSJDPT" + objID; rddvJSJDPT.SetFieldValue("ms", 0); rddvJSJDPT.SetFieldValue("lrrq", DateTime.Now.ToLocalTime()); rddvJSJDPT.SetFieldValue("enabled", 1); rddvJSJDPT.SetFieldValue("wth", _duandian); rddvJSJDPT.SetFieldValue("bsm", _duandian); rddvJSJDPT.SetFieldValue("fldm", "供水节点"); rddvJSJDPT.SetFieldValue("objectid", objID); rddvJSJDPT.SetFieldValue("cqbh", "管线联动"); if (rddvJSJDPT.Update()) { } else { ComsStatic.EditHistoryUndo(m_EditHistory); Sunny.UI.UIMessageTip.ShowError("新节点新增 操作失败!"); return false; } if (rdJSLKqsdh.RecordCount > 0)//2 更改原管线的节点 起始点号 { rdJSLKqsdh.MoveFirst(); while (!rdJSLKqsdh.IsEOF) { rddvJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKqsdh.GetFieldValue("zddh"))); Point2D p = new Point2D(ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("Y"))); GeoLine newLine = new GeoLine(new Point2Ds(newPoint, p)); m_EditHistory.Add(EditType.Modify, rdJSLKqsdh, true); rdJSLKqsdh.Edit(); rdJSLKqsdh.SetFieldValue("qsdh", _duandian); rdJSLKqsdh.SetGeometry(newLine); if (rdJSLKqsdh.Update()) { } else { ComsStatic.EditHistoryUndo(m_EditHistory); Sunny.UI.UIMessageTip.ShowError("终点点号不变,更新起始点号 操作失败!"); return false; } rdJSLKqsdh.MoveNext(); } } if (rdJSLKzddh.RecordCount > 0)//3 更改原管线的节点 终点点号 { rdJSLKzddh.MoveFirst(); while (!rdJSLKzddh.IsEOF) { rddvJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKzddh.GetFieldValue("qsdh"))); Point2D p = new Point2D(ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rddvJSJDPT.GetFieldValue("Y"))); GeoLine newLine = new GeoLine(new Point2Ds(p, newPoint)); m_EditHistory.Add(EditType.Modify, rdJSLKzddh, true); rdJSLKzddh.Edit(); rdJSLKzddh.SetFieldValue("zddh", _duandian); rdJSLKzddh.SetGeometry(newLine); if (rdJSLKzddh.Update()) { } else { ComsStatic.EditHistoryUndo(m_EditHistory); Sunny.UI.UIMessageTip.ShowError("起始管点不变,更新终点管点 操作失败!"); return false; } rdJSLKzddh.MoveNext(); } } //4 删除 原节点 m_EditHistory.Add(EditType.Delete, _rdSelect, true); if (_rdSelect.DeleteAll()) { } else { ComsStatic.EditHistoryUndo(m_EditHistory); Sunny.UI.UIMessageTip.ShowError("原节点删除失败!"); return false; } } catch { ComsStatic.EditHistoryUndo(m_EditHistory); Sunny.UI.UIMessageTip.ShowError("点线联动出错!"); return false; } MapControl.Map.Refresh(); return true; } private void uibtnLianjie_Click(object sender, EventArgs e)//生成新的管线 { if (string.IsNullOrEmpty(yuanBSM) || newGeoPoint is null) { Sunny.UI.UIMessageTip.ShowError("请先选择原节点和新节点"); return; } ComsStatic.TrackingLayerRemove("newLine"); GeoLine newLine = null; rdJSLKqsdh = ComsStatic.QueryRecordsetDynamic(ComsStatic.dvJSLK, string.Format(" qsdh='{0}' ", yuanBSM)); rdJSLKzddh = ComsStatic.QueryRecordsetDynamic(ComsStatic.dvJSLK, string.Format(" zddh='{0}' ", yuanBSM)); Recordset rdJSJDPT = null; if (rdJSLKqsdh.RecordCount == 0 && rdJSLKzddh.RecordCount == 0) { Sunny.UI.UIMessageTip.ShowError("原节点未查询到管线信息!"); return; } if (rdJSLKqsdh.RecordCount != 0) { rdJSLKqsdh.MoveFirst(); while (!rdJSLKqsdh.IsEOF) { rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKqsdh.GetFieldValue("zddh"))); Point2D p = new Point2D(ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("Y"))); newLine = new GeoLine(new Point2Ds(newPoint, p)); newLine.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate; MapControl.Map.TrackingLayer.Add(newLine, "newLine"); rdJSLKqsdh.MoveNext(); } } if (rdJSLKzddh.RecordCount != 0) { rdJSLKzddh.MoveFirst(); while (!rdJSLKzddh.IsEOF) { rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.dvJSJDPT, string.Format(" bsm='{0}'", rdJSLKzddh.GetFieldValue("qsdh"))); Point2D p = new Point2D(ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("X")), ComsStatic.StringToDouble(rdJSJDPT.GetFieldValue("Y"))); newLine = new GeoLine(new Point2Ds(newPoint, p)); newLine.Style = ComsStatic.geoStyle_Red_1mm_OpaqueRate; MapControl.Map.TrackingLayer.Add(newLine, "newLine"); rdJSLKzddh.MoveNext(); } } MapControl.Map.Refresh(); } private void uiButton2_Click(object sender, EventArgs e) { MapControl.Map.TrackingLayer.Clear(); MapControl.Map.RefreshEx(MapControl.Map.ViewBounds); rdJSLKqsdh = null; rdJSLKzddh = null; _rdSelect = null; newGeoPoint = null; yuanBSM = string.Empty; } public override void AfterClose() { ComsStatic.RecordsetDispose(_rdSelect); ComsStatic.RecordsetDispose(rdJSLKqsdh); ComsStatic.RecordsetDispose(rdJSLKzddh); MapControl.MouseDoubleClick -= MapControl_MouseDoubleClick; MapControl.GeometrySelected -= MapControl_GeometrySelected; base.AfterClose(); } } }