using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Windows.Forms.DataVisualization.Charting; using GeoScene.Data; using GeoScene.Globe; using DevComponents.DotNetBar; using System.Collections; namespace Cyberpipe { public partial class FrmAllPipelineStatis : DevComponents.DotNetBar.Office2007Form { Dictionary<string, double> pipelineLengthAndType = new Dictionary<string, double>(); List<GSOFeatures> list = new List<GSOFeatures>(); DataGridView dataGridViewX1; ToolStripStatusLabel toolStripNumbers; GSOGlobeControl globeControl1; ToolStripStatusLabel toolStripFeatureLength; PanelEx panel; int type; static FrmAllPipelineStatis frm; public static void ShowForm(int _type, Dictionary<string, double> pipeLen, List<GSOFeatures> _list, DataGridView dataGridViewX11, ToolStripStatusLabel toolStripNumbers1, ToolStripStatusLabel toolStripFeatureLength1, GSOGlobeControl ctl, PanelEx p) { if (frm == null) { frm = new FrmAllPipelineStatis( _type,pipeLen, _list, dataGridViewX11, toolStripNumbers1, toolStripFeatureLength1, ctl, p); frm.Show(ctl.Parent); } else { if (frm.WindowState == FormWindowState.Minimized) { frm.WindowState = FormWindowState.Normal; } } } public FrmAllPipelineStatis(int _type,Dictionary<string, double> pipeLen, List<GSOFeatures> _list, DataGridView dataGridViewX11, ToolStripStatusLabel toolStripNumbers1, ToolStripStatusLabel toolStripFeatureLength1, GSOGlobeControl ctl, PanelEx p) { InitializeComponent(); type = _type; pipelineLengthAndType = pipeLen; list = _list; dataGridViewX1 = dataGridViewX11; toolStripNumbers = toolStripNumbers1; toolStripFeatureLength = toolStripFeatureLength1; globeControl1 = ctl; panel = p; } private void FrmAllPipelineStatis_Load(object sender, EventArgs e) { try { if (type == 0) { Text = "管线距离统计"; } else { Text = "空间查询"; } chartAllAreaPipeline.Series.Add("管线"); // Set axis title chartAllAreaPipeline.ChartAreas["ChartArea1"].AxisX.Title = "管线类型"; chartAllAreaPipeline.ChartAreas["ChartArea1"].AxisY.Title = "管线长度(米)"; chartAllAreaPipeline.ChartAreas["ChartArea1"].AxisX.Interval = 1; LabelStyle labeStyleAxisX = new LabelStyle(); labeStyleAxisX.Angle = -45; labeStyleAxisX.Enabled = true; chartAllAreaPipeline.ChartAreas["ChartArea1"].AxisX.LabelStyle = labeStyleAxisX; chartAllAreaPipeline.Series["管线"].ChartType = SeriesChartType.Column; chartAllAreaPipeline.Series["管线"]["DrawingStyle"] = "Cylinder"; chartAllAreaPipeline.Series["管线"].Points.DataBindXY(pipelineLengthAndType.Keys, pipelineLengthAndType.Values); for (int m = 0; m < pipelineLengthAndType.Values.Count; m++) { if (chartAllAreaPipeline.Series["管线"].Points[m].YValues[0].ToString() != "0") { chartAllAreaPipeline.Series["管线"].Points[m].Label = chartAllAreaPipeline.Series[0].Points[m].YValues[0].ToString(); } string axisLabel = chartAllAreaPipeline.Series["管线"].Points[m].AxisLabel; chartAllAreaPipeline.Series["管线"].Points[m].AxisLabel = axisLabel.Substring(0, axisLabel.IndexOf("管线")); } } catch (Exception ex) { //LogError.PublishError(ex); } } private void chartAllAreaPipeline_MouseClick(object sender, MouseEventArgs e) { HitTestResult result = chartAllAreaPipeline.HitTest(e.X, e.Y, true); int indexHit = result.PointIndex; if (indexHit >= 0) { GSOFeatures fs = list[indexHit]; string sql = ""; string pipetype = chartAllAreaPipeline.Series["管线"].Points[indexHit].AxisLabel; foreach (string key in pipelineLengthAndType.Keys) { if (key.StartsWith(pipetype)) { pipetype = key; break; } } MainFrm.m_CurrentQueryLayer = pipetype; GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipetype); if (layer == null) { return; } if (fs.Length > 0) { sql = "select " + getpipeLineFields.getFields(pipetype, globeControl1) + " from " + layer.Name; sql += " where "; for (int i = 0; i < fs.Length; i++) { if (i == 0) { if (fs[i].GetFieldDefn("编号") != null) { sql += " 编号='" + fs[i].GetValue("编号").ToString() + "'"; } } else { if (fs[i].GetFieldDefn("编号") != null) { sql += " or 编号 = '" + fs[i].GetValue("编号").ToString() + "'"; } } } DataTable dt = OledbHelper.QueryTable(sql); if (dt != null && dt.Rows.Count > 0) { dataGridViewX1.DataSource = dt; panel.Visible = true; toolStripNumbers.Text = " 管线类型:" + MainFrm.m_CurrentQueryLayer + "|共有:" + Convert.ToString(dt.Rows.Count) + "条记录"; toolStripFeatureLength.Text = " 管线里程:" + chartAllAreaPipeline.Series["管线"].Points[indexHit].YValues[0].ToString("0.00") + " 米"; } } } } private void chartAllAreaPipeline_MouseMove(object sender, MouseEventArgs e) { HitTestResult result = chartAllAreaPipeline.HitTest(e.X, e.Y, true); //Cursor cr = this.Cursor; if (result.PointIndex >= 0) { this.Cursor = Cursors.Hand; } else { this.Cursor = Cursors.Default; } } private void FrmAllPipelineStatis_FormClosing(object sender, FormClosingEventArgs e) { frm = null; globeControl1.Globe.ClearAnalysis(); //layerTemp.RemoveAllFeature(); for (int i = 0; i < globeControl1.Globe.Layers.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers[i]; if (layer is GSOFeatureLayer) { GSOFeatures feats = layer.GetAllFeatures(); for (int j = 0; j < feats.Length; j++) { GSOFeature feat = feats[j]; feat.HighLight = false; } } } dataGridViewX1.DataSource = null; dataGridViewX1.Refresh(); panel.Visible = false; } } }