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) { addFeaturesToDataGridView(features); } 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); } dataGridViewX1.DataSource = dt.DefaultView; } private void buttonOK_Click(object sender, EventArgs e) { if (dataGridViewX1.Rows.Count == 0) { MessageBox.Show("请选择要审核的管段!", "提示"); return; } for (int i = 0; i < dataGridViewX1.Rows.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption( dataGridViewX1.Rows[i].Cells[0].Value.ToString()); GSOFeatures features = layer.GetFeatureByName(dataGridViewX1.Rows[i].Cells[1].Value.ToString(), true); GSOFeature selectFeature = features[0]; if (selectFeature == null) continue; CollisionAnalysis(selectFeature, Utility.m_PipelineLayerNames); } if (dataGridViewX2.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)); } * */ } dataGridViewX2.DataSource = dt; } private void dataGridViewX1_MouseDoubleClick(object sender, MouseEventArgs e) { DataGridView.HitTestInfo hittestinfo = dataGridViewX1.HitTest(e.X, e.Y); if (hittestinfo.RowIndex < 0) return; try { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(dataGridViewX1.Rows[hittestinfo.RowIndex].Cells["审核图层"].Value.ToString()); GSOFeatures features = layer.GetFeatureByName(dataGridViewX1.Rows[hittestinfo.RowIndex].Cells["编号"].Value.ToString(), true); //globeControl1.Globe.JumpToFeature(features[0], 50); ClassSearchAnalysis.AddMakerToLineFeature(globeControl1, features[0]); } catch (Exception ex) { MessageBox.Show("定位失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void dataGridViewX2_MouseDoubleClick(object sender, MouseEventArgs e) { DataGridView.HitTestInfo hittestinfo = dataGridViewX2.HitTest(e.X, e.Y); if (hittestinfo.RowIndex < 0) return; try { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(dataGridViewX2.Rows[hittestinfo.RowIndex].Cells["问题图层"].Value.ToString()); GSOFeatures features = layer.GetFeatureByName(dataGridViewX2.Rows[hittestinfo.RowIndex].Cells["问题编号"].Value.ToString(), true); //globeControl1.Globe.JumpToFeature(features[0], 50); ClassSearchAnalysis.AddMakerToLineFeature(globeControl1, features[0]); } catch (Exception ex) { MessageBox.Show("定位失败:" + ex, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void buttonX1_Click(object sender, EventArgs e) { string strSaveFile = ""; SaveFileDialog savefiledialog = new SaveFileDialog(); savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; savefiledialog.AddExtension = true; savefiledialog.FileName = "碰撞审核"; if (savefiledialog.ShowDialog() == DialogResult.OK) strSaveFile = savefiledialog.FileName; else return; ExpEXCEL.ExpToExcel(dataGridViewX1, strSaveFile, "碰撞审核"); } } }