// // Copyright (c) PlaceholderCompany. All rights reserved. // using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Threading.Tasks; using System.Windows.Forms; using DevExpress.Pdf.Native; using DevExpress.Utils; using DevExpress.XtraBars; using DevExpress.XtraBars.Docking; using DevExpress.XtraBars.Docking2010.Views; using DevExpress.XtraBars.Docking2010.Views.Tabbed; using DevExpress.XtraBars.Ribbon; using FlexenabledLic; using GeoSigma.SigmaDrawerUtil; using GeoSigma.UCDraw; using GeoSigmaDrawLib; using SigmaDrawerElement; using UCDraw; namespace PcgDrawR { /// /// 软件主窗体. /// public partial class FormMain : RibbonForm { /// /// Tab 页签最长长度 /// private const int TABMAXLENGTH = 10; private readonly string fileLayout = Path.Combine(Application.StartupPath, "layout.xml"); private readonly string workspaceName1 = "MyLayout"; private readonly LicHelp licHelp; // 启动参数 private readonly string startFile = string.Empty; private readonly List lstArgs = new List(); private bool batchSetZColorFlag = false; private Security security; /// /// Gets or sets the z color width. /// public double ZColorWidth { get; set; } = 25; private RecentFileConfig recentConfig = null; private LicenseServerConnection serverConnection; [DllImport("kernel32.dll")] private static extern IntPtr LoadLibrary(string lpFileName); [DllImport("kernel32",EntryPoint="FreeLibrary",SetLastError=true)] private static extern bool FreeLibrary(IntPtr hModule); private static void ValidateDll(string dllName) { string dllPath = Path.Combine(Application.StartupPath, dllName); IntPtr hModule = IntPtr.Zero; try { hModule = LoadLibrary(dllPath); if (hModule == IntPtr.Zero) { throw new Win32Exception(Marshal.GetLastWin32Error()); } } finally { if (hModule != IntPtr.Zero) { FreeLibrary(hModule); } } } /// /// Initializes a new instance of the class. /// public FormMain() { InitializeComponent(); this.barButtonItem8.Visibility = DevExpress.XtraBars.BarItemVisibility.Never; tabbedView1.Ribbon = this.ribbonControl1; tabbedView1.InvalidDocumentTypes.Add( typeof(DevExpress.XtraBars.Docking.FloatForm)); licHelp = new LicHelp("KEPlatform"); licHelp.LoginResultEvent += (result) => { int nStatus = result.Status; if (nStatus == 0) { // 登录成功 //MessageBox.Show("服务器登录成功!"); bsiLoginInfo.Enabled = true; ((ToolTipItem)this.bsiLoginInfo.SuperTip.Items[0]).Text = "已登录"; } else { // 登录失败 //MessageBox.Show("服务器登录失败!"); bsiLoginInfo.Enabled = false; ((ToolTipItem)this.bsiLoginInfo.SuperTip.Items[0]).Text = "未登录"; //Application.Exit(); } }; // 属性面板关闭时,将主菜单开关闭“属性”按钮设置为 unchecked dckPanelProperty.ClosedPanel += (sender, e) => { btnViewProperty.Checked = false; }; // 关闭图层时把对应属性改为 unchecked dckPanelLayer.ClosedPanel += (sender, e) => { btnViewLayer.Checked = false; }; // 关闭统计元素时把对应属性改为 unchecked dckPanelStatic.ClosedPanel += (sender, e) => { btnViewStatic.Checked = false; }; ribbonControl1.OptionsMenuMinWidth = 0; KeyPreview = true; } /// protected override void OnKeyUp(KeyEventArgs e) { //if (e.KeyCode == Keys.S && e.Modifiers == Keys.Control) //{ // CurrentForm.SaveFile(); //} if (e.KeyCode == Keys.O && e.Modifiers == Keys.Control) { btnFileOpen_ItemClick(this, null); } else if (e.KeyCode == Keys.N && e.Modifiers == Keys.Control) { btnFileNew_ItemClick(this, null); } } /// /// Initializes a new instance of the class. /// /// 参数 /ZC-按块显示散点Z值 public FormMain(string[] args) : this() { if (args.Length > 0) { this.startFile = args[0].Trim(); } if (args.Length > 1) { lstArgs.Clear(); for (int i = 1; i < args.Length; i++) { lstArgs.Add(args[i]); } } bbtnMeshAntiAlias.Checked = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable; ribbonControl1.OptionsMenuMinWidth = 0; string executablePath = System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName); string vtkPath = "vtk"; //string vtkPath = "3d"; string combinedPath = Path.Combine(executablePath, vtkPath); GeoSigmaLib.SetDllDirectory(combinedPath); } /// /// 当前激活的文档 /// private UCDrawEdit CurrentForm { get { if (this.tabbedView1.ActiveDocument != null) { return tabbedView1.ActiveDocument.Control as UCDrawEdit; } else if (this.tabbedView1.ActiveFloatDocument != null) { return tabbedView1.ActiveFloatDocument.Control as UCDrawEdit; } return null; } } /// /// DrawerGlobalConfig /// public DrawerGlobalConfig DrawerGlobalConfig { get; set; } = DrawerGlobalConfig.Instance; private FileDropHandler fileDroper; /// /// Forms the main_ load. /// /// The sender. /// The e. private void FormMain_Load(object sender, EventArgs e) { try { security = new Security(); security.CheckLicense(this); } catch { Application.Exit(); } fileDroper = new FileDropHandler(this); try { // Disable layout load animation effects workspaceManager1.AllowTransitionAnimation = DevExpress.Utils.DefaultBoolean.False; WorkspaceManager.SetSerializationEnabled(this.ribbonControl1, false); // Load DevExpress controls' layouts from a file if (workspaceManager1.LoadWorkspace(workspaceName1, fileLayout, true)) { workspaceManager1.ApplyWorkspace(workspaceName1); this.dckPanelLayer.Text = "图层"; } InitRecentConfig(); } finally { licHelp.DoLogin(); } #if !DEBUG CheckEnvironment(); #endif } /// /// Forms the main_ shown. /// /// The sender. /// The e. private void FormMain_Shown(object sender, EventArgs e) { LoadStartFile(); //SplashScreenManager.CloseForm(true); ribbonStatusBar1.Visible = true; } /// /// Inits the recent config. /// private void InitRecentConfig() { recentConfig = new RecentFileConfig(); this.ResetOpenMenu(); } /// /// 加载启动参数指定的文件async /// private void LoadStartFile() { if (string.IsNullOrEmpty(this.startFile)) { return; } string ext = Path.GetExtension(this.startFile); if (this.lstArgs.Count > 0) { string strVtk = this.lstArgs.Find(it => { return it.ToUpper().StartsWith("/VTK"); }); if (ext == ".xyz" && !string.IsNullOrEmpty(strVtk)) { OpenVtkView(); return; } string strZC = this.lstArgs.Find(it => { return it.ToUpper().StartsWith("/ZC"); }); if (!string.IsNullOrEmpty(strZC)) { int nSizeIndex = strZC.IndexOf(':'); if (nSizeIndex > 0) { ZColorWidth = Convert.ToInt32(strZC.Substring(nSizeIndex + 1)); } //string ext = Path.GetExtension(this.startFile); //if(ext == ".xyz") //{ batchSetZColorFlag = true; //} OpenFile(this.startFile, true); this.lstArgs.Clear(); } } else { OpenFile(this.startFile); } } /// /// Sets the VTK main mesh. /// /// The file path. /// The p mesh. public void SetVtkMainMesh(string filePath, IntPtr pMesh) { CurrentForm.SetVtkMainMesh(pMesh); CurrentForm.MainMeshProperty = CurrentForm.PropertyControl.ElementProperty; var vtkEdit = this.CurrentForm.VtkEdit; if (vtkEdit != null && !vtkEdit.IsDisposed) { vtkEdit.VtkMainMesh = pMesh; vtkEdit.SetMainMeshProperty(CurrentForm.MainMeshProperty); vtkEdit.PropertyControl.SelectedObject = vtkEdit.VtkProerty; } } private void CloseVtkHandler(UCVtkEdit vtkEdit) { if (vtkEdit != null && vtkEdit.DrawEdit != null) { vtkEdit.DrawEdit.SetVtkMainMesh(IntPtr.Zero); vtkEdit.DrawEdit.VtkEdit = null; this.tabbedView1.RemoveDocument(vtkEdit); } } private void ShowVtkHandler(object sender, ShowVtkEventArgs e) { UCDrawEdit ucdraw = CurrentForm; if (ucdraw == null) { return; } // 按分号分割(移除空条目) string[] segments = e.WellLayer.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries); //一个二维图只打开一个三维窗口,已经打开了三维窗口的情况 if (ucdraw.VtkEdit != null) { ucdraw.VtkEdit.VtkProerty.InitWellTypeColors(segments); //激活文档 this.tabbedView1.ActivateDocument(ucdraw.VtkEdit); return; } Drawer drawer = ucdraw.DrawerView.ViewControl.Drawer; // 初始化vtk控件 UCVtkEdit vtkEdit = new UCVtkEdit(); // 双向绑定 CurrentForm.VtkEdit = vtkEdit; vtkEdit.DrawEdit = CurrentForm; //设置主网格 vtkEdit.VtkMainMesh = CurrentForm.VtkMainMesh; vtkEdit.SetMainMeshProperty(CurrentForm.MainMeshProperty); vtkEdit.PropertyControl.SelectedObject = vtkEdit.VtkProerty; // 初始化井类别颜色 vtkEdit.VtkProerty.InitWellTypeColors(segments); vtkEdit.LayerPanel = this.dckPanelLayer; vtkEdit.PropertyPanel = this.dckPanelProperty; vtkEdit.StatisticPanel = this.dckPanelStatic; vtkEdit.DrawerStatusBar = this.ribbonControl1.StatusBar; var vtkdoc = this.tabbedView1.AddDocument(vtkEdit); string fileName = Path.GetFileName(e.FilePath) + "三维"; vtkdoc.Caption = fileName; vtkEdit.Show(); this.ribbonControl1.MergeRibbon(vtkEdit.RibbonControlMain); this.SuspendLayout(); splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormDescription("正在打开三维..."); //初始化vtk数据树 vtkEdit.InitTreeList(e); //显示图数据 vtkEdit.ShowDrawData(e.FilePath); //检测是否有网络数据 IntPtr pMeshData = vtkEdit.GetMainMeshData(); if (pMeshData == IntPtr.Zero) { this.tabbedView1.RemoveDocument(vtkEdit); ucdraw.VtkEdit = null; splashScreenManager1.CloseWaitForm(); MessageBox.Show("没有网格数据!", "数据错误!"); return; } double rx0 = vtkEdit.GetMainMeshInfo(pMeshData, 0); double rx1 = vtkEdit.GetMainMeshInfo(pMeshData, 1); double ry0 = vtkEdit.GetMainMeshInfo(pMeshData, 2); double ry1 = vtkEdit.GetMainMeshInfo(pMeshData, 3); //IntPtr hBitmap = drawer.Geo.Draw2ImageMemory(rx0, ry1, rx1, ry0); IntPtr hBitmap = drawer.Geo.GetKevMeshImage(pMeshData); if (hBitmap == IntPtr.Zero) { this.tabbedView1.RemoveDocument(vtkEdit); ucdraw.VtkEdit = null; splashScreenManager1.CloseWaitForm(); MessageBox.Show("图像显示比例过大,无法生成!", "数据错误!"); return; } vtkEdit.UpdateMeshBitmap(hBitmap, rx0, ry1, Math.Abs(rx0 - rx1), Math.Abs(ry0 - ry1)); drawer.Geo.DeleteImage(hBitmap); // 加载三维配置信息 ucdraw.SetVtkSettings(vtkEdit); if (tabbedView1.OtherDocumentActivated == null) { tabbedView1.OtherDocumentActivated += vtkEdit.AfterDocumentActived; } splashScreenManager1.CloseWaitForm(); this.ResumeLayout(); } /// /// 新建文件 /// private void OpenVtkView() { //documentIndex++; //string strFile = $"新建文件{documentIndex}"; //UCDrawEdit drawEdit = new UCDrawEdit(); //drawEdit.LayerPanel = this.dckPanelLayer; //drawEdit.PropertyPanel = this.dckPanelProperty; //drawEdit.StatisticPanel = this.dckPanelStatic; //drawEdit.DrawerStatusBar = this.ribbonControl1.StatusBar; //drawEdit.EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable; //drawEdit.ZColorWidth = this.ZColorWidth; //if (drawEdit.CreateNewFile(strFile) == false) //{ // documentIndex--; // return; //} //drawEdit.NewFileSavedEvent += new NewFileSavedHandler((fileName) => //{ // SetRecent(fileName); //}); //var doc = this.tabbedView1.AddDocument(drawEdit); //drawEdit.Show(); //doc.Caption = drawEdit.Text; //this.ribbonControl1.MergeRibbon(drawEdit.ribbonMain); UCVtkEdit vtkChild = new UCVtkEdit(); vtkChild.LayerPanel = this.dckPanelLayer; vtkChild.PropertyPanel = this.dckPanelProperty; vtkChild.StatisticPanel = this.dckPanelStatic; vtkChild.DrawerStatusBar = this.ribbonControl1.StatusBar; this.ribbonControl1.MergeRibbon(vtkChild.RibbonControlMain); var vtkdoc = this.tabbedView1.AddDocument(vtkChild); vtkChild.Show(); vtkChild.ClearVtkShowEventHandler(); splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormDescription("正在打开三维..."); this.SuspendLayout(); vtkChild.VtkShowEventHandler += (sender, e) => { splashScreenManager1.CloseWaitForm(); }; vtkChild.ShowXyzData(this.startFile); vtkdoc.Caption = this.startFile + "三维"; } /// /// Forms the main_ form closed. /// /// The sender. /// The e. private void FormMain_FormClosed(object sender, FormClosedEventArgs e) { //Save DevExpress controls' layouts to a file workspaceManager1.CaptureWorkspace(workspaceName1, true); workspaceManager1.SaveWorkspace(workspaceName1, fileLayout, true); licHelp.LogOut(); } /// /// 合并子窗体控件 /// /// ribbon控件 /// 事件参数 private void ribbonControl1_Merge(object sender, DevExpress.XtraBars.Ribbon.RibbonMergeEventArgs e) { //RibbonControl parentRRibbon = sender as RibbonControl; RibbonControl childRibbon = e.MergedChild; childRibbon.Dock = DockStyle.None; if (childRibbon.Parent is UCDrawEdit) { UCDrawEdit child = childRibbon.Parent as UCDrawEdit; child.ViewGroupVisible = false; child.MergePanels(); if (btnViewProperty.Checked != child.PropertyPanelVisible) { btnViewProperty.Checked = child.PropertyPanelVisible; } if (btnViewLayer.Checked != child.PropertyPanelVisible) { btnViewLayer.Checked = child.PropertyPanelVisible; } if (btnViewStatic.Checked != child.StatisticPanelVisible) { btnViewStatic.Checked = child.StatisticPanelVisible; } } else if (childRibbon.Parent is UCVtkEdit) { UCVtkEdit child = childRibbon.Parent as UCVtkEdit; child.ViewGroupVisible = false; child.MergePanels(); if (btnViewProperty.Checked != child.PropertyPanelVisible) { btnViewProperty.Checked = child.PropertyPanelVisible; } if (btnViewLayer.Checked != child.PropertyPanelVisible) { btnViewLayer.Checked = child.PropertyPanelVisible; } if (btnViewStatic.Checked != child.StatisticPanelVisible) { btnViewStatic.Checked = child.StatisticPanelVisible; } } } /// /// ribbons the control1_ un merge. /// /// The sender. /// The e. private void ribbonControl1_UnMerge(object sender, RibbonMergeEventArgs e) { try { RibbonControl childRibbon = e.MergedChild; if (childRibbon.Parent is UCDrawEdit) { UCDrawEdit child = childRibbon.Parent as UCDrawEdit; child.UnMergePanels(); } else if (childRibbon.Parent is UCVtkEdit) { UCVtkEdit child = childRibbon.Parent as UCVtkEdit; child.UnMergePanels(); } } catch (Exception ex) { Trace.WriteLine(ex.Message); } } /// /// ribbons the control1_ show customization menu. /// /// The sender. /// The e. private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e) { e.ShowCustomizationMenu = false; } /// /// 激活图件 /// /// 名称 private bool ActiveDoc(string fullFile) { BaseDocument frmDoc = this.docManager.View.Documents.FirstOrDefault(it => { if (it.Control is UCDrawEdit child) { if (fullFile.Equals(child.FileFullName, StringComparison.CurrentCultureIgnoreCase)) { return true; } } return false; }); if (frmDoc != null) { this.docManager.View.Controller.Activate(frmDoc); return true; } return false; } /// /// 打开文件 /// /// 事件按钮 /// 事件参数 private void btnFileOpen_ItemClick(object sender, ItemClickEventArgs e) { string[] fileNames = DocHelper.SelectMutiFiles(); foreach (var item in fileNames) { if (!string.IsNullOrEmpty(item)) { OpenFile(item); } } } private void TryRecoverFileWhenUnexpectedShutdown(UCDrawEdit drawEdit, string filePath) { if (GeoSigmaXY.SigmaDocBackupExists(filePath)) { var result = MessageBox.Show("检测到文件异常关闭,是否恢复?", "恢复选项" , MessageBoxButtons.OKCancel, MessageBoxIcon.Information); if (result == DialogResult.OK) { drawEdit.DrawerView.ViewControl.Drawer.RecoverMode = true; } } } /// /// 打开文件 /// /// 文件路径 /// 是否以方块方式显示散点数据 //private Task OpenFile(string strFile, bool setZColor = false) private bool OpenFile(string strFile, bool setZColor = false) { // 已存在的文件仅激活 if (this.ActiveDoc(strFile)) { return true; //return Task.FromResult(true); } try { bool bOpend = false; UCDrawEdit drawerChild = new UCDrawEdit(); drawerChild.OpenNewFile += OnOpenNewFile; if (batchSetZColorFlag) { drawerChild.BatchSetZColorFlag = batchSetZColorFlag; batchSetZColorFlag = !batchSetZColorFlag; } drawerChild.LayerPanel = this.dckPanelLayer; drawerChild.PropertyPanel = this.dckPanelProperty; drawerChild.CreateMapPanel = this.dcpCreateMap; drawerChild.StatisticPanel = this.dckPanelStatic; drawerChild.DrawerStatusBar = this.ribbonControl1.StatusBar; TryRecoverFileWhenUnexpectedShutdown(drawerChild, strFile); splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormDescription("正在打开文件..."); this.SuspendLayout(); // drawerChild.ribbonMain.Visible = false; drawerChild.ZColorWidth = this.ZColorWidth; drawerChild.EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable; bOpend = drawerChild.OpenFile(strFile, setZColor); if (bOpend == false) { splashScreenManager1.CloseWaitForm(); // frmChild.Close(); MessageBox.Show($"打开文件{strFile}失败", "打开"); //return Task.FromResult(false); return false; } var doc = this.tabbedView1.AddDocument(drawerChild); // 标签页上显示短名称 doc.Caption = TabName(drawerChild.Text); // 光标移动上去时显示全名 if (doc is Document document) { document.Tooltip = drawerChild.Text; } this.ribbonControl1.MergeRibbon(drawerChild.ribbonMain, false); drawerChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) => { SetRecent(fileName); }); // 打开文件时,三维初始化设置 drawerChild.DrawerView.ViewControl.Drawer.SetVtkMainMeshEvent += new SetVtkMainMeshHandler((filePath, pMesh) => { SetVtkMainMesh(filePath, pMesh); }); drawerChild.ShowVtkEvent += new ShowVtkEventHandler(ShowVtkHandler); drawerChild.CloseVtkEvent = new CloseVtkHandler(CloseVtkHandler); // 加载主网格与图层设置 drawerChild.LoadVtkMainMesh(); drawerChild.LoadLayerSetting(); SetRecent(strFile); splashScreenManager1.CloseWaitForm(); #if DEBUG this.TestEventHandler(drawerChild); #endif //return Task.FromResult(true); return true; } catch (Exception ex) { Trace.WriteLine(ex.Message); //return Task.FromResult(false); return false; } finally { this.ResumeLayout(); } } /// /// 获取 Tab 页显示名称,如果太长会被截断,防止一个标签页占非常长的位置 /// /// 要显示的目标名称 /// 最终会被显示的名称 private string TabName(string caption) { return caption.Length > TABMAXLENGTH ? caption.Substring(0, TABMAXLENGTH) : caption; } /// /// Tests the event handler. /// /// The editor. private void TestEventHandler(UCDrawEdit editor) { editor.DrawerView.InsertCommonCommand("克隆到其它井组", new EventHandler((obj, args) => { SelectedElementsArgs selArgs = args as SelectedElementsArgs; if (selArgs == null) { return; } List elements = selArgs.Elements; if (elements != null) { //editor.DrawerView.GetSelectedElements()[0]; foreach (DrawerElementProperty ele in elements) { //ele.Element //strbContent.AppendLine(ele.Element.ToDfdString()); } } }), true, DrawElementType.ELEMENT_WELL_GROUP); } private int documentIndex = 0; /// /// 新建文件 /// /// 按钮 /// 事件参数 private void btnFileNew_ItemClick(object sender, ItemClickEventArgs e) { documentIndex++; string strFile = $"新建文件{documentIndex}"; UCDrawEdit frmChild = new UCDrawEdit(); frmChild.OpenNewFile += OnOpenNewFile; frmChild.LayerPanel = this.dckPanelLayer; frmChild.CreateMapPanel = this.dcpCreateMap; frmChild.PropertyPanel = this.dckPanelProperty; frmChild.StatisticPanel = this.dckPanelStatic; frmChild.DrawerStatusBar = this.ribbonControl1.StatusBar; frmChild.EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable; frmChild.ZColorWidth = this.ZColorWidth; if (frmChild.CreateNewFile(strFile) == false) { documentIndex--; return; } frmChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) => { SetRecent(fileName); }); // 加载子窗体布局 frmChild.Show(); var doc = this.tabbedView1.AddDocument(frmChild); doc.Caption = frmChild.Text; // 打开文件时,三维初始化设置 frmChild.DrawerView.ViewControl.Drawer.SetVtkMainMeshEvent += new SetVtkMainMeshHandler((filePath, pMesh) => { SetVtkMainMesh(filePath, pMesh); }); frmChild.ShowVtkEvent += new ShowVtkEventHandler(ShowVtkHandler); frmChild.CloseVtkEvent = new CloseVtkHandler(CloseVtkHandler); this.ribbonControl1.MergeRibbon(frmChild.ribbonMain); } /// /// Files the closed. /// /// The sender. /// The e. private void FileClosed(object sender, EventArgs e) { if (sender is UCDrawEdit child) { child.ShowStatisticResult -= ShowStatic; } } /// /// 显示统计面板. /// /// The sender. /// The instance containing the event data. private void ShowStatic(object sender, EventArgs e) { try { this.dckPanelStatic.Visibility = DockVisibility.Visible; } finally { } } /// /// Sets the recent. /// /// The file. private void SetRecent(string file) { if (string.IsNullOrEmpty(file)) { return; } if (this.recentConfig.AddTop(file) == false) { return; } ResetOpenMenu(); this.recentConfig.Save(); } /// /// Resets the open menu. /// private void ResetOpenMenu() { this.ppmOpen.ClearLinks(); for (int i = 0; i < this.recentConfig.Files.Count; i++) { string strFile = this.recentConfig.Files[i]; BarButtonItem item = new BarButtonItem(); item.Caption = strFile; item.ImageOptions.Image = imgsMain.Images["fileNew"]; item.ItemClick += new ItemClickEventHandler(async (object sender, ItemClickEventArgs e) => { OpenFile(strFile); }); this.ppmOpen.AddItem(item); } } /// /// 保存文件 /// /// 按钮 /// 事件参数 private void btnSaveMain_ItemClick(object sender, ItemClickEventArgs e) { if (CurrentForm == null) { return; } if (CurrentForm.SaveFile()) { SetRecent(CurrentForm.FileFullName); } } /// /// 另存为 /// /// 事件按钮 /// 事件参数 private void btnSaveAs_ItemClick(object sender, ItemClickEventArgs e) { if (CurrentForm == null) { return; } if (CurrentForm.SaveAs()) { SetRecent(CurrentForm.FileFullName); } } /// /// 符号管理 /// /// 按钮 /// 事件参数 private void btnSymbolManager_ItemClick(object sender, ItemClickEventArgs e) { DirectoryInfo symbolFilePath = Directory.GetParent(Application.StartupPath); string symbolFile = Path.Combine(symbolFilePath.FullName, "Symbol"); if (CurrentForm == null) { SymbolLibInterface.SymbolHelp.ShowSymbolUI(null, symbolFile); } else { SymbolLibInterface.SymbolHelp.ShowSymbolUI(CurrentForm.DrawerView, symbolFile); } } /// /// 选项按纽 /// /// 菜单项 /// 事件参数 private void btnSetting_Clicked(object sender, ItemClickEventArgs e) { //FormGlobalOptions formGlobal = new FormGlobalOptions(); FrmOptions formGlobal = new FrmOptions(); formGlobal.ShowDialog(this); } /// /// 图层面板 /// /// 菜单项 /// 事件参数 private void btnViewLayer_CheckedChanged(object sender, ItemClickEventArgs e) { try { if (CurrentForm == null) { if (btnViewLayer.Checked) { this.dckPanelLayer.Visibility = DockVisibility.AutoHide; } else { if (!this.dockManager1.AutoHideContainers[0].Controls.Contains(dckPanelLayer)) { //this.dockManager1.AutoHideContainers[0].Controls.Add(dckPanelLayer); this.dockManager1.AddPanel(DockingStyle.Left, dckPanelLayer); } this.dckPanelLayer.Visibility = DockVisibility.Visible; } } else { CurrentForm.LayerPanelVisible = btnViewLayer.Checked; } } finally { } } /// /// 属性面板可见性设置 /// /// 菜单项 /// 事件参数 private void btnViewProperty_CheckedChanged(object sender, ItemClickEventArgs e) { //LayerPanelVIsible = btnViewProperty.Checked; try { if (CurrentForm == null) { if (btnViewProperty.Checked) { this.dckPanelProperty.Visibility = DockVisibility.AutoHide; } else { this.dckPanelProperty.Visibility = DockVisibility.Visible; this.dckPanelProperty.ParentPanel.ActiveChild = this.dckPanelProperty; } } else { CurrentForm.PropertyPanelVisible = btnViewProperty.Checked; } } catch { } } /// /// 统计面板 /// /// 菜单项 /// 事件参数 private void btnViewStatic_CheckedChanged(object sender, ItemClickEventArgs e) { try { if (CurrentForm == null) { if (btnViewStatic.Checked) { this.dckPanelStatic.Visibility = DockVisibility.AutoHide; } else { this.dckPanelStatic.Visibility = DockVisibility.Visible; } } else { CurrentForm.StatisticPanelVisible = btnViewStatic.Checked; } } catch { } } /// /// 默认消除网格锯齿 /// /// 事件菜单 /// 事件参数 private void bbtnMeshAntiAlias_CheckedChanged(object sender, ItemClickEventArgs e) { Task.Run(() => { DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable = bbtnMeshAntiAlias.Checked; DrawerGlobalConfig.Instance.Save(); }); } /// /// 拖放文件 /// /// 窗体 /// 事件参数 private void FormMain_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { string[] filePaths = (string[])e.Data.GetData(DataFormats.FileDrop); for (int i = 0; i < filePaths.Length; i++) { // 数组中的每个元素都是一个文件或目录的完整路径 string path = filePaths[i]; if (File.Exists(path)) { OpenFile(path, false); } } } } /// /// 拖放进入事件 /// /// 窗体 /// 事件参数 private void FormMain_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } else { e.Effect = DragDropEffects.None; } // 管理员模式处理文件拖放,不要删除,有作用 string[] filePaths = (string[])e.Data.GetData(typeof(string[])); for (int i = 0; i < filePaths.Length; i++) { // 数组中的每个元素都是一个文件或目录的完整路径 string path = filePaths[i]; if (File.Exists(path)) { OpenFile(path, false); } } } /// /// Gets the neighbor document. /// /// The documents. /// The document. /// A BaseDocument. protected BaseDocument GetNeighborDocument(BaseDocument[] documents, BaseDocument document) { int nLength = documents.Length; if (nLength == 1) { return null; } int nIndex = Array.IndexOf(documents, document); if (nIndex == nLength - 1) { return documents[nIndex - 1]; } return documents[nIndex + 1]; } private bool isCloseCanceled = false; /// /// tabbeds the view1_ document closing. /// /// The sender. /// The e. private void tabbedView1_DocumentClosing(object sender, DocumentCancelEventArgs e) { BaseDocument doc = e.Document as BaseDocument; if (doc.Control is UCDrawEdit child) { FormClosingEventArgs ea = new FormClosingEventArgs(CloseReason.MdiFormClosing, false); child.UCDrawEdit_FormClosing(sender, ea); isCloseCanceled = e.Cancel = ea.Cancel; if (e.Cancel) { //child.UnMergePanels(); if (doc.IsActive) { this.ribbonControl1.MergeRibbon(child.ribbonMain, false); } } else { child.SaveLayout(); } } } /// /// 窗体关闭事件 /// /// 窗体 /// 事件参数 private void FormMain_FormClosing(object sender, FormClosingEventArgs e) { for (int i = 0; i < tabbedView1.Documents.Count; i++) { tabbedView1.Controller.Close(tabbedView1.Documents[i]); if (isCloseCanceled == true) { e.Cancel = true; break; } } if (e.Cancel != true) { this.security?.CloseLicense(); } } /// /// 关于. /// /// The source of the event. /// The instance containing the event data. private void btnAbout_ItemClick(object sender, ItemClickEventArgs e) { FrmAbout frmAbout = new FrmAbout(); frmAbout.Show(this); } private void OnOpenNewFile(string filePath) { foreach (var doc in tabbedView1.Documents) { if (doc.Control is UCDrawEdit ucDrawEdit && ucDrawEdit.FileFullName == filePath) { ucDrawEdit.OpenFile(filePath); return; } } OpenFile(filePath); } /// /// 检测运行环境 /// private void CheckEnvironment() { try { CheckBaseDependencies(); CheckGriddingDependencies(); CheckMeshProcessDependencies(); CheckMeshSymbolLibManagerDependencies(); } catch (Exception ex) { MessageBox.Show($"运行错误(E003),{ex.Message}, 请联系服务人员!"); Application.Exit(); } } private void CheckBaseDependencies() { try { GeoSigmaLib.GeoSigmaLibInit(); } catch { throw new DllNotFoundException("加载基础库失败"); } } private void CheckGriddingDependencies() { string[] griddingDependencies = { // 生成等值线,和 GridModel.exe 配合使用 "CurveModel.exe", // 最小张力 "GridModel.exe", // 最小曲率 "SurfaceGrid.exe", // 快速网格化 "QuikGridCS.dll", // 反距离加权 "ModelCreateIDW.dll", // 自然临近 "NaturalNeighbor.dll", }; foreach (string depend in griddingDependencies) { if (!File.Exists(Path.Combine(Application.StartupPath, depend))) { throw new FileNotFoundException($"依赖的 {depend} 文件未找到"); } if (depend.EndsWith(".dll")) { ValidateDll(depend); } } } private void CheckMeshProcessDependencies() { string fileName = "MeshProcess.exe"; if (!File.Exists(Path.Combine(Application.StartupPath, fileName))) { throw new FileNotFoundException($"依赖的 {fileName} 文件未找到"); } } private void CheckMeshSymbolLibManagerDependencies() { string fileName = "SymbolLibManager.exe"; if (!File.Exists(Path.Combine(Application.StartupPath, fileName))) { throw new FileNotFoundException($"依赖的 {fileName} 文件未找到"); } } private void FormMain_MdiChildActivate(object sender, EventArgs e) { //string strText = this.Text; } } }