using SuperMap.Data; using SuperMap.Mapping; using System; using System.Collections.Generic; using System.Data; using System.Drawing; using System.Windows.Forms; using WWPipeLine.MapBasic; using WWPipeLine.MapBasic.Conditions; namespace WWPipeLine.MapTools.Conditions.AnalystToolBar { public class PouMian : BasicToolBar { DataTable dtSelect; public PouMian() : base() { this.ConditionPanelName = "剖面分析"; var analystToolStripButton = new ToolStripButton() { DisplayStyle = ToolStripItemDisplayStyle.ImageAndText, Text = "开始分析", Name = "Analyst", AutoToolTip = false }; base.ToolStrip.Items.Add(analystToolStripButton); analystToolStripButton.Click += AnalystToolStripButton_Click; } protected override void OnLoad(EventArgs e) { ComsStatic.SetLayersIsSelectableFalse(ComsStatic.gsGuanXian.Name, true); MapControl.GeometrySelectChanged += MapControl_GeometrySelectChanged; MapControl.Action = SuperMap.UI.Action.Select; dtSelect = new DataTable(); dtSelect.Columns.Add("smid"); dtSelect.Columns.Add("qsdh"); dtSelect.Columns.Add("zddh"); dtSelect.Columns.Add("gj"); dtSelect.Columns.Add("cd"); } private void MapControl_GeometrySelectChanged(object sender, SuperMap.UI.GeometrySelectChangedEventArgs e) { Selection[] sl = MapControl.Map.FindSelection(true); if (sl.Length != 1 || sl[0].Count != 1 || sl[0].Dataset.Name != ComsStatic.gsGuanXian.Name) { Sunny.UI.UIMessageTip.ShowError("请选择一根需要分析的管线"); return; }//sl[0].Count - 1 Recordset rd = ComsStatic.QueryRecordset(ComsStatic.gsGuanXian, string.Format(" enabled=1 and smid={0} AND qsdh is not null AND zddh is not null ", sl[0][0]), new string[] { "smid", "qsdh", "zddh", "gj", "cd" }); if (rd.RecordCount == 1) { DataRow dr = dtSelect.NewRow(); dr["smid"] = rd.GetFieldValue("smid"); dr["qsdh"] = rd.GetFieldValue("qsdh"); dr["zddh"] = rd.GetFieldValue("zddh"); dr["gj"] = rd.GetFieldValue("gj"); dr["cd"] = rd.GetFieldValue("cd"); dtSelect.Rows.Add(dr); if (dtSelect.Rows.Count > 1)//需要判断当前选择的管线起点 是否是 上一根管线的终点 { string zddh = dtSelect.Rows[dtSelect.Rows.Count - 2]["zddh"].ToString(); string qsdh = dtSelect.Rows[dtSelect.Rows.Count - 1]["qsdh"].ToString(); if (zddh != qsdh) { dtSelect.Rows.Clear(); Sunny.UI.UIMessageTip.ShowError("当前选择管线的不是连续管线,请重新选择"); return; } } } else { dtSelect.Rows.Clear(); Sunny.UI.UIMessageTip.ShowError("当前选择管线的信息错误,请重新选择!"); return; } } private void AnalystToolStripButton_Click(object sender, EventArgs e) { if (dtSelect.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先选择需要分析的管线信息,仅可以选择连续的管线!"); return; } DataTable dt = new DataTable { TableName = "DuanMianAnalystResult" }; dt.Columns.Add(new DataColumn { ColumnName = "dmgc", Caption = "地面高程(M)" }); dt.Columns.Add(new DataColumn { ColumnName = "gdgc", Caption = "管顶高程(M)" }); dt.Columns.Add(new DataColumn { ColumnName = "gdms", Caption = "管点埋深(M)" }); dt.Columns.Add(new DataColumn { ColumnName = "gxgj", Caption = "管线管径(MM)" }); dt.Columns.Add(new DataColumn { ColumnName = "gxcd", Caption = "管线长度(M)" }); dt.Columns.Add(new DataColumn { ColumnName = "gxSMID", Caption = "管线ID" }); dt.Columns.Add(new DataColumn { ColumnName = "gdSMID", Caption = "管点ID" }); dt.Columns.Add(new DataColumn { ColumnName = "x", Caption = "X坐标" }); dt.Columns.Add(new DataColumn { ColumnName = "y", Caption = "Y坐标" }); dt.Columns.Add(new DataColumn { ColumnName = "ygd", Caption = "管顶Y坐标" }); dt.Columns.Add(new DataColumn { ColumnName = "xLeft", Caption = "X坐标向左偏移", DataType = Type.GetType("System.Double") }); Recordset rdJSJDPT = null; foreach (DataRow drSelect in dtSelect.Rows) { rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.gsGuanDian, string.Format(" bsm ='{0}' ", drSelect["qsdh"])); if (rdJSJDPT.RecordCount == 1) { rdJSJDPT.MoveFirst(); DataRow dr = dt.NewRow(); dr["dmgc"] = rdJSJDPT.GetFieldValue("dmgc"); dr["gdms"] = rdJSJDPT.GetFieldValue("ms"); dr["gdgc"] = ComsStatic.StringToDouble(dr["dmgc"]) - ComsStatic.StringToDouble(dr["gdms"]);//管顶高程=地面高程-埋深 dr["gxgj"] = drSelect["gj"]; dr["gxcd"] = drSelect["cd"]; dr["gxSMID"] = drSelect["smid"]; dr["gdSMID"] = rdJSJDPT.GetFieldValue("smid"); dt.Rows.Add(dr); } if (dtSelect.Rows.IndexOf(drSelect) == dtSelect.Rows.Count - 1)//最后一根管线需要获取终点点号信息 { rdJSJDPT = ComsStatic.QueryRecordset(ComsStatic.gsGuanDian, string.Format(" bsm ='{0}' ", drSelect["zddh"])); if (rdJSJDPT.RecordCount == 1) { rdJSJDPT.MoveFirst(); DataRow dr = dt.NewRow(); dr["dmgc"] = rdJSJDPT.GetFieldValue("dmgc"); dr["gdms"] = rdJSJDPT.GetFieldValue("ms"); dr["gdgc"] = ComsStatic.StringToDouble(dr["dmgc"]) - ComsStatic.StringToDouble(dr["gdms"]);//管顶高程=地面高程-埋深 dr["gxgj"] = drSelect["gj"]; dr["gxcd"] = drSelect["cd"]; dr["gxSMID"] = drSelect["smid"]; dr["gdSMID"] = rdJSJDPT.GetFieldValue("smid"); dt.Rows.Add(dr); } } } if (dt.Rows.Count == (dtSelect.Rows.Count + 1)) { ComsStatic.RecordsetDispose(rdJSJDPT); AnalystResultPouDuanMian form = new AnalystResultPouDuanMian(dt, "poumian"); form.ShowDialog(); this.CloseToolBar(); } else { Sunny.UI.UIMessageTip.ShowError("构建查询结果失败,请重新选择连续的管线进行分析"); } } public override void AfterClose() { MapControl.GeometrySelectChanged -= MapControl_GeometrySelectChanged; base.AfterClose(); } private void InitializeComponent() { this.SuspendLayout(); // // ToolsConditions // this.Name = "ToolsConditions"; this.ResumeLayout(false); } } }