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) { LogError.PublishError(ex); } } 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(); } } }