Newer
Older
GHFX_REFACTOR / FrmAccessoriesgather.cs
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
using DevComponents.DotNetBar;
using GeoScene.Data;
using GeoScene.Globe;

namespace Cyberpipe
{
    public partial class FrmAccessoriesgather : Office2007Form
    {
        GSOGlobeControl globeControl1;
        List<string> instrumenLayerNames;
        //string[] accessStrs = null;
        Dictionary<string, double> dic = new Dictionary<string, double>();
        GSOGeoPolygon3D polygon;
        static FrmAccessoriesgather frm;
        public static void ShowForm(GSOGlobeControl globeControl, List<string> pipeLayers, GSOGeoPolygon3D _polygon)
        {
            if (frm == null)
            {
                frm = new FrmAccessoriesgather(globeControl, pipeLayers, _polygon);
                frm.Show(globeControl.Parent);
            }
            else
            {
                if (frm.WindowState == FormWindowState.Minimized)
                {
                    frm.WindowState = FormWindowState.Normal;
                }
            }
        }

        public FrmAccessoriesgather(GSOGlobeControl globeControl, List<string> instrumentlist, GSOGeoPolygon3D _polygon)
        {
            InitializeComponent();
            globeControl1 = globeControl;
            instrumenLayerNames = instrumentlist;
            polygon = _polygon;
        }
        /// <summary>
        /// 窗体初始化事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmAccessoriesgather_Load(object sender, EventArgs e)
        {
            for (int i = 0; i < instrumenLayerNames.Count; i++)
            {
                if (instrumenLayerNames[i].EndsWith("附属物"))
                {
                    clbPipeLine2.Items.Add(instrumenLayerNames[i]);
                }
            }
           
        }
       
        /// <summary>
        /// 全区域分类汇总按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX8_Click(object sender, EventArgs e)
        {
           if (clbPipeLine2.Text!="")
           {
                globeControl1.Globe.Action = EnumAction3D.ActionNull;
                pipeDiameterStatisNew(null, clbPipeLine2.Text); //pipeDiameterStatis(null);
            }
            else
            {
               MessageBox.Show("请选择图层!");
            }
        }
        
        /// <summary>
        /// 全选按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < clbPipeLine.Items.Count; i++)
            {
                clbPipeLine.SetItemChecked(i, true);
            }
        }
        /// <summary>
        /// 反选按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < clbPipeLine.Items.Count; i++)
            {
                clbPipeLine.SetItemChecked(i, !clbPipeLine.GetItemChecked(i));
                
            }
        }
        /// <summary>
        /// 清空按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void buttonX3_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < clbPipeLine.Items.Count; i++)
            {
                clbPipeLine.SetItemChecked(i, false);
            }
        }
       
        private void pipeDiameterStatisNew(GSOGeoPolygon3D polygon, string layertype)
        {
            try
            {
                FeatureStatisticsService featureService = new FeatureStatisticsService();
                GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(layertype);
                List<FeaturesClassfyResult> accessoriesResult = featureService.GroupAccessories(polygon, layer);

                if (accessoriesResult == null || accessoriesResult.Count == 0)
                {
                    MessageBox.Show("该图层没有附属物");
                }
                dataGridViewX1.Rows.Clear();
                dic.Clear();
                foreach (FeaturesClassfyResult accessoryResult in accessoriesResult)
                {
                    DataGridViewRow row = new DataGridViewRow();
                    int index = dataGridViewX1.Rows.Add(row);
                    string layerName = accessoryResult.layerName;
                    row = dataGridViewX1.Rows[index];
                    row.Cells["图层名称"].Value = layerName;// layer.Caption;
                    row.Cells["数量"].Value = accessoryResult.ncount;
                    dic.Add(layerName, accessoryResult.ncount);

                }
                showPipeWidget();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                LogError.PublishError(ex);
            }
        }
        private void showPipeWidget()
        {
            if (chart1.Series.Count > 0)
            {
                chart1.Series.Clear();
            }
            if (chart1.Legends.Count > 0)
            {
                chart1.Legends.Clear();
            }
            
            chart1.Series.Add("附属物");
            chart1.Legends.Add("附属物");
            chart1.Legends[0].Docking = Docking.Top;
            chart1.Legends["附属物"].IsTextAutoFit = true;
            chart1.Legends["附属物"].LegendStyle = LegendStyle.Table;
            chart1.Legends["附属物"].DockedToChartArea = "ChartArea1";
            chart1.Legends["附属物"].BackColor = Color.Transparent;
            chart1.ChartAreas["ChartArea1"].AxisY.IsLabelAutoFit = false;

            // Set axis title
            chart1.ChartAreas["ChartArea1"].AxisX.Title = "附属物名称";
            chart1.ChartAreas["ChartArea1"].AxisY.Title = "附属物数量";
            chart1.ChartAreas["ChartArea1"].AxisX.Interval = 1;
            LabelStyle labeStyleAxisX = new LabelStyle();
            labeStyleAxisX.Angle = -45;
            labeStyleAxisX.Enabled = true;
            chart1.ChartAreas["ChartArea1"].AxisX.LabelStyle = labeStyleAxisX;

            chart1.Series[0].ChartType = SeriesChartType.Column;

            chart1.Series[0]["DrawingStyle"] = "Cylinder";

            //chart1.Series[j].IsValueShownAsLabel = true;

            chart1.Series[0].Points.DataBindXY(dic.Keys, dic.Values);
            for (int m = 0; m < dic.Values.Count; m++)
            {
                if (chart1.Series[0].Points[m].YValues[0].ToString() != "0")
                {
                    chart1.Series[0].Points[m].Label = chart1.Series[0].Points[m].YValues[0].ToString();
                }
            }            
        }

       
        /// <summary>
        /// 窗体关闭事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmAccessoriesgather_FormClosing(object sender, FormClosingEventArgs e)
        {
            frm = null;
            globeControl1.Globe.MemoryLayer.RemoveAllFeature();
        }
        /// <summary>
        /// 导出Excel按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            if (dataGridViewX1.Rows.Count > 0)
            {
                SaveFileDialog dlg = new SaveFileDialog();
                dlg.Filter = "Excel files (*.xls)|*.xls";
                dlg.FilterIndex = 0;
                dlg.RestoreDirectory = true;
                //dlg.CreatePrompt = true;
                dlg.Title = "保存为Excel文件";
                dlg.FileName = DateTime.Now.ToString("yyyyMMdd") + ".xls";
                if (dlg.ShowDialog() == DialogResult.OK)
                {
                    Stream myStream;
                    myStream = dlg.OpenFile();
                    StreamWriter sw = new StreamWriter(myStream, Encoding.GetEncoding(-0));
                    string columnTitle = "";
                    try
                    {
                        sw.WriteLine("日期:" + DateTime.Now.ToString("yyyy-MM-dd"));

                        //写入列标题   
                        for (int i = 0; i < dataGridViewX1.ColumnCount; i++)
                        {
                            if (i > 0)
                            {
                                columnTitle += "\t";
                            }
                            columnTitle += dataGridViewX1.Columns[i].HeaderText;
                        }
                        sw.WriteLine(columnTitle);

                        //写入列内容   
                        for (int j = 0; j < dataGridViewX1.Rows.Count; j++)
                        {
                            string columnValue = "";
                            for (int k = 0; k < dataGridViewX1.Columns.Count; k++)
                            {
                                if (k > 0)
                                {
                                    columnValue += "\t";
                                }
                                if (dataGridViewX1.Rows[j].Cells[k].Value == null)
                                    columnValue += "";
                                else
                                    columnValue += dataGridViewX1.Rows[j].Cells[k].Value.ToString().Trim();
                            }

                            sw.WriteLine(columnValue);
                        }
                        sw.Close();
                        myStream.Close();
                        if (MessageBox.Show("导出Excel文件成功!是否打开?", "提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
                        {
                            Process.Start(dlg.FileName);
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                    finally
                    {
                        sw.Close();
                        myStream.Close();
                    }
                }
            }
            else
            {
                MessageBox.Show("统计结果为空,请重新统计之后再导出Excel!", "提示");
            }
        }

    }
}