using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; using TerraExplorerX; using TETree; using TEWin.CS; namespace TEWin { public partial class FrmWin : Form { FrmTree tree; FrmTool tool; public SGWorld74 SG = null; public static string StartupPath { get { return System.Windows.Forms.Application.StartupPath; } } public FrmWin() { InitializeComponent(); this.Load += FrmWeb_Load; this.FormClosed += FrmWin_FormClosed; } void FrmWeb_Load(object sender, EventArgs e) { try { LogOut.Info("开始运行.."); string fly = Path.Combine(StartupPath, "Resources\\sample.fly"); if (!File.Exists(fly)) { LogOut.Error("Fly文件不存在:" + fly); return; } SG = new SGWorld74(); SG.OnLoadFinished += SG_OnLoadFinished; SG.Open(fly); tree = new FrmTree(); tree.Show(this); string isTest = ConfigurationManager.AppSettings["isTest"]; if ("1".Equals(isTest)) { tool = new FrmTool(this); tool.Show(); } else { this.WindowState = FormWindowState.Maximized; tree.WindowState = FormWindowState.Maximized; } } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); } } void SG_OnLoadFinished(bool bSuccess) { // } void FrmWin_FormClosed(object sender, FormClosedEventArgs e) { LogOut.Info("关闭程序."); } protected override void DefWndProc(ref Message m) { switch (m.Msg) { case 0xc0: // 重置鼠标模式 SG.Window.SetInputMode(0); break; case 0xc1: // 打开数据方案/打开显示场景 SG.Command.Execute(1001, null); break; case 0xc2: // 保存数据方案/保存显示场景 SG.Command.Execute(1003, null); break; case 0xc3: // 矢量数据(默认为*.shp) SG.Command.Execute(1013, 5); break; case 0xc4: // 影像数据(默认为*.tif) SG.Command.Execute(1014, 9); break; case 0xc5: // 地形数据(默认为*.tif) SG.Command.Execute(1014, 26); break; case 0xc6: // 模型数据(*.osgb) //SG.Command.Execute(2342, null); string path = Path.Combine(ConfigurationManager.AppSettings["tePath"], "MeshLayerTool.exe"); string args = " -RunApp TerraExplorer -RunConvertor -Mode ImportMeshLayer -Type osgb"; ExecCmd(new List { "taskkill /f /t /im MeshLayerTool.exe" }); RunExe(path, args, false); break; case 0xc7: // 模型数据(*.obj) SG.Command.Execute(1012, 13); break; case 0xd1: // 点量算 SG.Command.Execute(1023, null); break; case 0xd2: // 距离量算 SG.Command.Execute(2356, null); break; case 0xd3: // 面积量算 if (SG.Command.IsChecked(2359, null)) SG.Window.SetInputMode(0); else SG.Command.Execute(2359, null); break; /* */ default: base.DefWndProc(ref m); break; } } public void InvokeProc(int code) { Message m = new Message(); m.Msg = code; this.DefWndProc(ref m); } public void RunExe(string path, string args, bool noWindow = true) { Process p = new Process(); p.StartInfo.FileName = path; p.StartInfo.Arguments = args; p.StartInfo.CreateNoWindow = noWindow; p.StartInfo.UseShellExecute = false; p.Start(); } public static string ExecCmd(List list) { string str = null; Process p = null; try { p = new Process(); p.StartInfo.FileName = "cmd.exe"; p.StartInfo.UseShellExecute = false; p.StartInfo.CreateNoWindow = true; p.StartInfo.RedirectStandardInput = true; p.StartInfo.RedirectStandardOutput = true; p.StartInfo.RedirectStandardError = true; p.Start(); StreamWriter si = p.StandardInput; StreamReader se = p.StandardError; LogOut.Info("cmd = " + string.Join(",", list)); si.AutoFlush = true; foreach (string cmd in list) { si.WriteLine(cmd); } si.WriteLine("exit"); str = se.ReadToEnd(); se.Close(); si.Close(); } catch (Exception ex) { LogOut.Error(ex.Message + "\r\n" + ex.StackTrace); str = ex.Message; } finally { if (p != null) { p.Close(); } } return str; } } }