Newer
Older
EMS_SZ / FrmExportCADS.cs
root on 21 Mar 2016 7 KB first
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using GeoScene.Globe;
using System.IO;
using GeoScene.Data; 

using System.Collections;
using GeoScene.Engine;

namespace Cyberpipe
{
    public partial class FrmExportCADS :DevComponents.DotNetBar.Office2007Form
    {
        GSOGlobeControl globeControl1;
        List<string> pipeLineNames = new List<string>();
        public FrmExportCADS(GSOGlobeControl globeControl,List<string> listPipelineNames)
        {
            InitializeComponent();
            globeControl1 = globeControl;
            pipeLineNames = listPipelineNames;
        }
        /// <summary>
        /// 窗体初始化事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmExportCADS_Load(object sender, EventArgs e)
        {            
            if (pipeLineNames.Count > 0)
            {
                for (int i = 0; i < pipeLineNames.Count; i++)
                {
                    GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(pipeLineNames[i]);
                    if (layer != null)
                    {
                        listViewEx1.Items.Add(layer.Caption);                        
                    }
                }
            }

        }
        /// <summary>
        /// 导出按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExport_Click(object sender, EventArgs e)
        {
            string checkItemText = "";
            if (listViewEx1.SelectedItems.Count > 0)
            {
                checkItemText = listViewEx1.SelectedItems[0].Text.Trim();
                try
                {
                    GSOLayer layer = globeControl1.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);
                                    this.Close(); 
                                }
                                
                            }
                        }
                    }
                    else
                    {
                        MessageBox.Show("请选中要导出的图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
            else
            {
                MessageBox.Show("请选中要导出的图层!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        private Boolean MerageToFile(GSOFeatures features, String strDestFile, String strProj4)//图层追加
        {
            if (features == null)
            {
                return false;
            }
            Boolean bSuccess = false;

            string strDir = GSOUtility.GetFileDir(strDestFile);
            string strLPRJFile = GSOUtility.ChangeExt(strDestFile, ".lprj");
            string strExt = GSOUtility.GetFileExt(strDestFile);

            // 如果投影文件存在,投影以投影文件为准
            if (File.Exists(strLPRJFile))
            {
                // 如果是dxf,则这样处理
                if (strExt.ToLower() == ".dxf")
                {
                    string strTempSrcFile = strDir + "srcFeatures_dxftmp" + strExt;
                    globeControl1.Globe.DataManager.SaveFeatureData(features, strTempSrcFile, strLPRJFile, 4);
                    bSuccess = GSOUtility.MergeTwoDXFFileFeatures(strDestFile, strTempSrcFile);
                    File.Delete(strTempSrcFile);
                }
                else
                {
                    GSOFeatures srcFeatures = globeControl1.Globe.DataManager.ReadFeatureData(strDestFile);
                    int nCount = features.Length;
                    int i = 0;
                    for (i = 0; i < nCount; i++)
                    {
                        srcFeatures.Add(features[i]);
                    }
                    bSuccess = globeControl1.Globe.DataManager.SaveFeatureData(srcFeatures, strDestFile, strLPRJFile, 4);
                }
            }
            else
            {
                // 如果是dxf,则这样处理
                if (strExt.ToLower() == ".dxf")
                {
                    string strTempSrcFile = strDir + "srcFeatures_dxftmp" + strExt;
                    globeControl1.Globe.DataManager.SaveFeatureData(features, strTempSrcFile, strProj4, 0);
                    bSuccess = GSOUtility.MergeTwoDXFFileFeatures(strDestFile, strTempSrcFile);
                    File.Delete(strTempSrcFile);
                }
                else
                {
                    GSOFeatures srcFeatures = globeControl1.Globe.DataManager.ReadFeatureData(strDestFile);
                    int nCount = features.Length;
                    int i = 0;
                    for (i = 0; i < nCount; i++)
                    {
                        srcFeatures.Add(features[i]);
                    }
                    bSuccess = globeControl1.Globe.DataManager.SaveFeatureData(srcFeatures, strDestFile, strProj4, 0);
                }
            }
            return bSuccess;
        }
        /// <summary>
        /// 关闭按钮事件处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnClose_Click(object sender, EventArgs e)
        {            
            this.Close();
        }
    }
}