Newer
Older
GHFX_REFACTOR / FormAnalysis / FormHor.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 DevComponents.DotNetBar;
using GeoScene.Globe;
using GeoScene.Data;
using GeoScene.Engine;

namespace Cyberpipe.FormAnalysis
{
    public partial class FormHor : Office2007Form
    {
        GSOGlobeControl globeControl1 = null;
        int maxPageIndex = 20;
        int rows = 0;
        public static GSODataSource ds = null;
        private GSOFeatures features = null;
        public FormHor(GSOFeatures _features, GSOGlobeControl _globeControl)
        {
            InitializeComponent();
            features = _features;
            globeControl1 = _globeControl;
        }

        private void FormHor_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;
        }

        private void buttonOK_Click(object sender, EventArgs e)
        {
            if (textBoxJJBZ.Text.Trim() == "")
            {
                MessageBox.Show("净距标准不能为空!", "提示");
                return;
            }
            double dJingJuBiaoZhun = 0;
            if (!double.TryParse(textBoxJJBZ.Text.Trim(), out dJingJuBiaoZhun))
            {
                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;
                HorizontalDistanceAnalysis(selectFeature, Utility.m_PipelineLayerNames, dJingJuBiaoZhun);
            }

            if (dataGridViewX1.Rows.Count == 0)
            {
                MessageBox.Show("没有不符合净距标准的管线!", "提示");
            }

            globeControl1.Refresh();
        }

        /// <summary>
        /// 计算指定feature对象与除了该feature所在图层之外的 所有管线图层中的所有feature对象 的水平距离 并记录符合要求的管线  功能
        /// </summary>
        /// <param name="selectedFeature"></param>
        /// <param name="_pipelineLayerNames"></param>
        /// <param name="dis"></param>
        private void HorizontalDistanceAnalysis(GSOFeature selectedFeature, List<string> _pipelineLayerNames, double dis)
        {
            Dictionary<GSOFeature, double> featureMap = DoublePanelAnalysis.HorizontalDistanceAnalysis(globeControl1, selectedFeature,
                 _pipelineLayerNames, dis);
            if (featureMap == null)
            {
                MessageBox.Show("请选择一条管线!");
                return;
            }
            DataTable dt = new DataTable();
            dt.Columns.Add("审核图层");
            dt.Columns.Add("审核编号");
            dt.Columns.Add("问题图层");
            dt.Columns.Add("问题编号");
            dt.Columns.Add("标准/m");

            foreach (KeyValuePair<GSOFeature, double> kvp in featureMap)
            {
                GSOFeature feat2 = kvp.Key;
                feat2.HighLight = true;
                string feat2Caption = feat2.Dataset.Caption;

                DataRow row = dt.NewRow();
                row[0] = selectedFeature.Dataset.Caption;
                row[1] = selectedFeature.Name;
                row[2] = feat2Caption;
                row[3] = feat2.Name;
                row[4] = kvp.Value.ToString("0.00");
                dt.Rows.Add(row);

                GSOGeoPolyline3D line2 = feat2.Geometry as GSOGeoPolyline3D;
                if (line2 == null) continue;
            }
            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, "红线审核");
        }

     



    }
}