Newer
Older
GHFX_REFACTOR / FormAnalysis / FrmAnalysis.cs
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);
            }
        }

    }
}