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 DevComponents.DotNetBar; using GeoScene.Globe; using GeoScene.Data; using GeoScene.Engine; namespace Cyberpipe.FormAnalysis { public partial class FormFT : Office2007Form { GSOGlobeControl globeControl1 = null; int maxPageIndex = 20; int rows = 0; public static GSODataSource ds = null; private GSOFeatures features = null; private GSOLayer layerTemp = null; public FormFT(GSOFeatures _features, GSOGlobeControl _globeControl, GSOLayer _layerTemp) { InitializeComponent(); features = _features; globeControl1 = _globeControl; layerTemp = _layerTemp; } private void FormFT_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("埋深/m", "埋深/m"); winGridViewPager2.DisplayColumns = "审核图层,审核编号,埋深/m"; } 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 (textBoxFTSD.Text.Trim() == "") { MessageBox.Show("覆土深度不能为空!", "提示"); return; } double dFuTuShenDu = 0; if (!double.TryParse(textBoxFTSD.Text.Trim(), out dFuTuShenDu)) { MessageBox.Show("请输入正确的覆土深度!", "提示"); return; } DataTable dt = new DataTable(); dt.Columns.Add("审核图层"); dt.Columns.Add("审核编号"); dt.Columns.Add("埋深/m"); 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 rowFeature = features[0]; GSOGeoPolyline3D line = rowFeature.Geometry as GSOGeoPolyline3D; if (line == null) { continue; } GSOPipeLineStyle3D style = line.Style as GSOPipeLineStyle3D; if (style == null) { continue; } if (line.PartCount <= 0) continue; GSOPoint3ds pts = line[0]; GSOPoint3d pt = new GSOPoint3d(); for (int m = 0; m < pts.Count; m++) { if (Math.Abs(pts[m].Z + (style.Radius)) < Convert.ToDouble(textBoxFTSD.Text.Trim())) { DataRow row = dt.NewRow(); row[0] = rowFeature.Dataset.Caption; row[1] = rowFeature.Name; row[2] = Math.Abs((pts[m].Z + (style.Radius))).ToString("0.00"); dt.Rows.Add(row); pt.X = pts[m].X; pt.Y = pts[m].Y; pt.Z = 0; LabelVerticalDistance(layerTemp, pts[m], pt, Convert.ToDouble(Math.Abs((pts[m].Z + (style.Radius))).ToString("0.00")), true); break; } } } winGridViewPager2.DataSource = dt.DefaultView; globeControl1.Refresh(); if (winGridViewPager2.dataGridView1.Rows.Count == 0) { MessageBox.Show("所有管线满足覆土净距标准!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } /// <summary> /// 在指定的两点组成的线的中间添加一个marker对象,并将marker对象添加到指定的图层中 /// </summary> /// <param name="markerLayer"></param> /// <param name="pntIntersect1"></param> /// <param name="pntIntersect2"></param> /// <param name="distance"></param> /// <returns></returns> private GSOPoint3d LabelVerticalDistance(GSOLayer markerLayer, GSOPoint3d pntIntersect1, GSOPoint3d pntIntersect2, double distance, bool markerVisible) { if (pntIntersect1 == null || pntIntersect2 == null) { return new GSOPoint3d(); } GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); GSOPoint3ds point3Ds = new GSOPoint3ds(); point3Ds.Add(pntIntersect1); point3Ds.Add(pntIntersect2); disline.AddPart(point3Ds); GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 //设置透明度及颜色,FromArgb()中的四个参数分别为alpha、red、green、blue,取值范围为0到255 style.LineColor = Color.GreenYellow; style.LineWidth = 3; //设置线的宽度为3 style.VertexVisible = true; //显示线的节点 disline.Style = style; //把风格添加到线上 disline.AltitudeMode = EnumAltitudeMode.Absolute; GSOFeature line = new GSOFeature(); line.Geometry = disline; GSOGeoMarker dismarker = new GSOGeoMarker(); dismarker.X = pntIntersect1.X; dismarker.Y = pntIntersect1.Y; dismarker.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; string disStr = distance.ToString("0.00"); if (disStr != "0.00") { dismarker.Text = distance.ToString("0.00") + "米"; } else { dismarker.Text = "交叉"; } dismarker.AltitudeMode = EnumAltitudeMode.Absolute; GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); GSOTextStyle styleText = new GSOTextStyle(); styleText.IsSizeFixed = true; styleText.ForeColor = Color.White; styleText.FontSize = 20; styleMarker.TextStyle = styleText; dismarker.Style = styleMarker; GSOFeature marker = new GSOFeature(); marker.Geometry = dismarker; line.Visible = marker.Visible = markerVisible; markerLayer.AddFeature(line); markerLayer.AddFeature(marker); return dismarker.Position; } 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[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); } } } }