using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Cyberpipe.FormAnalysis; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Engine; using GeoScene.Globe; using WHC.Pager.WinControl; namespace Cyberpipe { public partial class FrmAnalysis : Office2007Form { GSOGlobeControl globeControl1 = null; int maxPageIndex = 20; int rows = 0; public static GSODataSource ds = null; private GSOFeatures features = null; public FrmAnalysis(GSOFeatures _features,GSOGlobeControl _globeControl) { InitializeComponent(); features = _features; globeControl1 = _globeControl; } private void FrmAnalysis_Load(object sender, EventArgs e) { InitWinGridView.initlizeDatagrid(winGridViewPager1, rows, maxPageIndex); InitWinGridView.initlizeDatagrid(winGridViewPager2, rows, maxPageIndex); initlizeDatagrid(); addFeaturesToDataGridView(features); this.winGridViewPager1.OnEditSelected += new EventHandler(winGridViewPager1_OnEditSelected); this.winGridViewPager2.OnEditSelected += new EventHandler(winGridViewPager2_OnEditSelected); } /// <summary> /// 初始化分页表格 /// </summary> private void initlizeDatagrid() { winGridViewPager1.AddColumnAlias("审核图层", "审核图层"); winGridViewPager1.AddColumnAlias("编号", "编号"); winGridViewPager1.DisplayColumns = "审核图层,编号"; winGridViewPager2.AddColumnAlias("审核图层","审核图层"); winGridViewPager2.AddColumnAlias("审核编号","审核编号"); winGridViewPager2.AddColumnAlias("问题图层","问题图层"); winGridViewPager2.AddColumnAlias("问题编号","问题编号"); winGridViewPager2.DisplayColumns = "审核图层,审核编号,问题图层,问题编号"; } private void addFeaturesToDataGridView(GSOFeatures features) { DataTable dt=new DataTable(); dt.Columns.Add("审核图层"); dt.Columns.Add("编号"); for (int i = 0; i < features.Length; i++) { DataRow r = dt.NewRow(); r[0] = features[i].Dataset.Name; r[1] = features[i].Name; dt.Rows.Add(r); } winGridViewPager1.DataSource = dt.DefaultView; } private void buttonOK_Click(object sender, EventArgs e) { if (winGridViewPager1.dataGridView1.Rows.Count == 0) { MessageBox.Show("请选择要审核的管段!", "提示"); return; } for (int i = 0; i < winGridViewPager1.dataGridView1.Rows.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption( winGridViewPager1.dataGridView1.Rows[i].Cells[0].Value.ToString()); GSOFeatures features = layer.GetFeatureByName(winGridViewPager1.dataGridView1.Rows[i].Cells[1].Value.ToString(), true); GSOFeature selectFeature = features[0]; if (selectFeature == null) continue; CollisionAnalysis(selectFeature, Utility.m_PipelineLayerNames); } if (winGridViewPager2.dataGridView1.Rows.Count == 0) { MessageBox.Show("没有发生碰撞的管线!", "提示"); } globeControl1.Refresh(); } /// <summary> /// /// </summary> /// <param name="selectedFeature"></param> /// <param name="pipelineLayerNames"></param> /// <param name="verticalDistance"></param> private void CollisionAnalysis(GSOFeature selectedFeature, List<string> pipelineLayerNames) { List<FeatureAnalysisInfo> result = DoublePanelAnalysis.CollisionAnalysis(globeControl1, selectedFeature, pipelineLayerNames); string caption = selectedFeature.Dataset.Caption; DataTable dt = new DataTable(); dt.Columns.Add("审核图层"); dt.Columns.Add("审核编号"); dt.Columns.Add("问题图层"); dt.Columns.Add("问题编号"); foreach (FeatureAnalysisInfo featureAnalysisInfo in result) { string feat2Caption = featureAnalysisInfo.feature.Dataset.Caption; featureAnalysisInfo.feature.HighLight = true; DataRow row = dt.NewRow(); row[0] = caption; row[1] = selectedFeature.Name; row[2] = feat2Caption; row[3] = featureAnalysisInfo.feature.Name; dt.Rows.Add(row); GSOGeoPolyline3D line2 = featureAnalysisInfo.feature.Geometry as GSOGeoPolyline3D; if (line2 == null) continue; if (AnalysisDataInfo.m_FeaturesWithBianhao.ContainsKey(selectedFeature.Name + "-" + featureAnalysisInfo.feature.Name) == false) { GSOGeoMarker dismarker = new GSOGeoMarker(); dismarker.X = featureAnalysisInfo.point1.X; dismarker.Y = featureAnalysisInfo.point1.Y; dismarker.Z = (featureAnalysisInfo.point1.Z + featureAnalysisInfo.point1.Z) / 2; dismarker.AltitudeMode = EnumAltitudeMode.Absolute; AnalysisDataInfo.m_FeaturesWithBianhao.Add(selectedFeature.Name + "-" + featureAnalysisInfo.feature.Name, dismarker.Position);//添加飞行位置记录 } /* if (AnalysisDataInfo.featCount.ContainsKey(feat2Caption)) { AnalysisDataInfo.featCount[feat2Caption] = AnalysisDataInfo.featCount[feat2Caption] + 1; } else { AnalysisDataInfo.featCount.Add(feat2Caption, 1); } if (AnalysisDataInfo.featLenth.ContainsKey(feat2Caption)) { AnalysisDataInfo.featLenth[feat2Caption] = AnalysisDataInfo.featLenth[feat2Caption] + line2.GetSpaceLength(true, 6378137); } else { AnalysisDataInfo.featLenth.Add(feat2Caption, line2.GetSpaceLength(true, 6378137)); } * */ } winGridViewPager2.DataSource = dt.DefaultView; } private void winGridViewPager1_OnEditSelected(object sender, EventArgs e) { DataGridView grid = sender as DataGridView; if (grid == null || grid.SelectedRows.Count <= 0) { MessageBox.Show("没有选择记录", "提示"); return; } DataGridViewRow row = grid.SelectedRows[0]; try { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(row.Cells[0].Value.ToString()); GSOFeatures features = layer.GetFeatureByName(row.Cells[1].Value.ToString(),true); globeControl1.Globe.FlyToFeature(features[0]); } catch (Exception ex) { MessageBox.Show("定位失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void winGridViewPager2_OnEditSelected(object sender, EventArgs e) { DataGridView grid = sender as DataGridView; if (grid == null || grid.SelectedRows.Count <= 0) { MessageBox.Show("没有选择记录", "提示"); return; } DataGridViewRow row = grid.SelectedRows[0]; try { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(row.Cells[2].Value.ToString()); GSOFeatures features = layer.GetFeatureByName(row.Cells[3].Value.ToString(), true); globeControl1.Globe.FlyToFeature(features[0]); } catch (Exception ex) { MessageBox.Show("定位失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }