Newer
Older
GHFX_REFACTOR / Forms / FrmMnModify.cs
xiaowei on 18 Nov 2016 12 KB 重构一键审核代码
using System;
using System.Collections;
using System.IO;
using System.Linq;
using System.Windows.Forms;
using DevComponents.DotNetBar;
using GeoScene.Data;
using GeoScene.Engine;
using GeoScene.Globe;

namespace Cyberpipe.Forms
{
    public partial class FrmMnModify : Office2007Form
    {
        private GSOGlobeControl globecontrol;
        private string shlayername;
        MainFrm mainfrm;
        private double movex;
        private double movey;
        private double movez; 

        public ArrayList shresultLists = new ArrayList();

        //定位和闪烁初始化定义
        int count;
        private string flashflag = "single";
        GSOFeature hlfeature;

        public FrmMnModify(GSOGlobeControl _globecontrol, string _shlyr,ArrayList _shresultLists)
        {
            InitializeComponent();
            globecontrol = _globecontrol;
            shlayername = _shlyr;
            shresultLists = _shresultLists;
        }
        
        /// <summary>
        /// 初始化
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmMnModify_Load(object sender, EventArgs e)
        {
            moveXLbl.Text = "";
            moveUpLbl.Text = "";

            mainfrm = (MainFrm)Owner;
            if (shlayername != "") {
                GSOLayer layer = globecontrol.Globe.Layers.GetLayerByCaption(shlayername);
                layer.Editable = true;
            }
            int idx = -1;
            for (int i = 0; i < shresultLists.Count; i++) {
                ShResult sr = (ShResult)shresultLists[i];

                idx = questionGrid.Rows.Add();

                questionGrid.Rows[idx].Cells[0].Value = sr.layerid;
                questionGrid.Rows[idx].Cells[1].Value = sr.question;
            }
        }
        /// <summary>
        /// 选中某一行
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void questionGrid_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
             if (questionGrid.SelectedCells.Count > 0){
                 DataGridViewRow row = questionGrid.Rows[questionGrid.SelectedCells[0].RowIndex];

                 selectLbl.Text = row.Cells["问题图层编号"].Value.ToString();
             }

             GSOLayer centerlayer = globecontrol.Globe.Layers.GetLayerByCaption(shlayername);
             GSOFeatures feats = centerlayer.GetFeatureByName(selectLbl.Text, true);
             if (centerlayer != null)
             {
                 for (int j = 0; j < feats.Length; j++)
                 {
                     if (feats[j].Name == selectLbl.Text)
                     {
                         //m_feature = features[j];
                         GSOFeature rowFeature = feats[j];
                         if (rowFeature == null)
                             continue;
                         if (rowFeature.Geometry != null && rowFeature.Geometry.Type == EnumGeometryType.GeoPolyline3D)
                         {
                             GSOGeoPolyline3D line = rowFeature.Geometry as GSOGeoPolyline3D;
                             double length = line.GetSpaceLength(true, 6378137);//线的长度;
                             GSOGeoPolyline3D lineLine = line.GetSegment(0, length / 2);
                             GSOPoint3d point3d = lineLine[lineLine.PartCount - 1][lineLine[lineLine.PartCount - 1].Count - 1];
                             globecontrol.Globe.JumpToPosition(point3d, EnumAltitudeMode.Absolute, 50);

                             hlfeature = rowFeature;
                             highlight();
                         }
                         else
                         {
                             globecontrol.Globe.JumpToFeature(rowFeature, 300);
                         }
                     }
                 }
             }
        }
        /// <summary>
        /// 高亮显示
        /// </summary>
        public void highlight()
        {
            flashflag = "single";
            timer1.Start();
        }

        /// <summary>
        /// 平移对象
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            if (selectLbl.Text == "")
            {
                MessageBox.Show("请选择要修改的管线");
                return;
            }

            if (!isNumber(moveXTxt.Text.Trim()) || !isNumber(moveYTxt.Text.Trim()))
            {
                MessageBox.Show("请输入数字");
                return;
            }

            double disx = double.Parse(moveXTxt.Text.Trim()); //jingdu
            double disy = double.Parse(moveYTxt.Text.Trim()); //weidu


            GSOLayer moniLayer = globecontrol.Globe.Layers.GetLayerByCaption(shlayername);
            if (moniLayer != null)
            {
                GSOFeatures monifeats = moniLayer.GetFeatureByFieldValue("编号", selectLbl.Text, true);
                for (int i = 0; i < monifeats.Length; i++)
                {
                    GSOFeature monifeat = monifeats[i];
                    GSOGeometry monifeatline = monifeat.Geometry;
                    GSOPoint3d pts = monifeatline.GeoCenterPoint;
                    double pl = pts.X;
                    double pa = pts.Y;

                    double movealtitude = disy/110/1000;
                    double movelongitude = disx/110/1000/Math.Cos(pa);

                    if (monifeat != null)
                    {
                        monifeat.Geometry.MoveXY(movelongitude, movealtitude);
                    }
                }
                moniLayer.Save();
            }

            movex += disx;
            movey += disy;
            moveXLbl.Text = movex.ToString();
            moveYLbl.Text = movey.ToString();
            globecontrol.Refresh();
        }

        void button2_Click(object sender, EventArgs e)
        {
            if (selectLbl.Text == "")
            {
                MessageBox.Show("请选择要修改的管线");
                return;
            }
            if (!isNumber(moveZTxt.Text.Trim()))
            {
                MessageBox.Show("请输入数字");
                return;
            }
            double dis = double.Parse(moveZTxt.Text.Trim());
            GSOLayer moniLayer = globecontrol.Globe.Layers.GetLayerByCaption(shlayername);
            if (moniLayer != null)
            {
                GSOFeatures monifeats = moniLayer.GetFeatureByFieldValue("编号", selectLbl.Text, true);
                for (int i = 0; i < monifeats.Length; i++)
                {
                    GSOFeature monifeat = monifeats[i];
                    if (monifeat != null)
                    {
                        monifeat.Geometry.MoveZ(dis);
                    }
                }
                moniLayer.Save();
            }
            moniLayer.Dataset.Save();

            movez += dis;
            moveUpLbl.Text = movez.ToString();
            globecontrol.Refresh();
        }

        /// <summary>
        /// 判断是否为数字
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        private bool isNumber(string s)
        {
            int Flag = 0;
            char[] str = null;

            if (s.Contains('-'))
            {
                double ds  = Math.Abs(Double.Parse(s));
                s = ds.ToString();

                str = s.ToCharArray();
                for (int i = 0; i < str.Length; i++)
                {
                    if (Char.IsNumber(str[i]))
                    {
                        Flag++;
                    }
                    else
                    {
                        Flag = -1;
                        break;
                    }
                }
            }
            else {
                str = s.ToCharArray();
                for (int i = 0; i < str.Length; i++)
                {
                    if (Char.IsNumber(str[i]))
                    {
                        Flag++;
                    }
                    else
                    {
                        Flag = -1;
                        break;
                    }
                }
            }
            if (Flag > 0)
            {
                return true;
            }
            return false;
        } 

        /// <summary>
        /// 导出cad
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            string checkItemText = "";
            if (shlayername!=null)
            {
                checkItemText = shlayername;
                try
                {
                    GSOLayer layer = globecontrol.Globe.Layers.GetLayerByCaption(checkItemText.Trim());
                    if (layer != null)
                    {
                        if (layer.GetAllFeatures().Length <= 0)
                        {
                            MessageBox.Show("要导出的图层为空", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            return;
                        }
                        layer.Dataset.ImportProjectionRefFromProj4(Utility.projectStr);
                        SaveFileDialog dlg = new SaveFileDialog();
                        dlg.Filter = "*.dxf|*.dxf";
                        dlg.FileName = layer.Caption;
                        if (dlg.ShowDialog() == DialogResult.OK)
                        {
                            if (layer.GetAllFeatures().Length > 0)
                            {
                                layer.SaveAs(dlg.FileName);
                                string lprjFileName = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf(".")) + ".lprj";
                                string lprjFileContent = "<Projects><Project><Index>0</Index><Type>prj4</Type><Param>" + Utility.projectStr + "</Param></Project></Projects>";
                                StreamWriter writer = new StreamWriter(lprjFileName, false);
                                writer.Write(lprjFileContent);
                                writer.Close();
                                //导出prj文件
                                string prjFileName = dlg.FileName.Substring(0, dlg.FileName.LastIndexOf(".")) + ".prj";
                                StreamWriter writer2 = new StreamWriter(prjFileName, false);
                                writer2.Write("");
                                writer2.Close();
                                if (!GSODataEngineUtility.ConvertProj4ToEsriPrjFile(Utility.projectStr, prjFileName))
                                {
                                    MessageBox.Show("导出CAD完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                                    Close();
                                }

                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选中要导出的图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                catch (Exception ex)
                {
                    LogError.PublishError(ex);
                }
            }
            else
            {
                MessageBox.Show("请选中要导出的图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            GSOFeature rowFeature = hlfeature;// as GSOFeature;
            if (rowFeature == null)
                return;

            if (count < 40)
            {
                count++; 
                    if (rowFeature != null)
                    {
                        if (count % 2 != 0)
                        {
                            rowFeature.HighLight = true;
                            globecontrol.Refresh();
                        }
                        else
                        {
                            rowFeature.HighLight = false;
                            globecontrol.Refresh();
                        }
                    }
                
            }
            else
            {
                timer1.Stop();
                rowFeature.HighLight = false;
                count = 0;
            }
        }

        private void FrmMnModify_FormClosed(object sender, FormClosedEventArgs e)
        {
            mainfrm.boolfrmModify = false;
           
        } 
    }
}