You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1193 lines
41 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// <copyright file="FormMain.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
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
{
/// <summary>
/// 软件主窗体.
/// </summary>
public partial class FormMain : RibbonForm
{
/// <summary>
/// Tab 页签最长长度
/// </summary>
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<string> lstArgs = new List<string>();
private bool batchSetZColorFlag = false;
/// <summary>
/// Gets or sets the z color width.
/// </summary>
public double ZColorWidth { get; set; } = 25;
private RecentFileConfig recentConfig = null;
[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);
}
}
}
/// <summary>
/// Initializes a new instance of the <see cref="FormMain"/> class.
/// </summary>
public FormMain()
{
InitializeComponent();
tabbedView1.Ribbon = this.ribbonControl1;
tabbedView1.InvalidDocumentTypes.Add(
typeof(DevExpress.XtraBars.Docking.FloatForm));
licHelp = new LicHelp("KEPlatform");
// 属性面板关闭时,将主菜单开关闭“属性”按钮设置为 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;
}
/// <inheritdoc/>
protected override void OnKeyUp(KeyEventArgs e)
{
if (e.KeyCode == Keys.S && e.Modifiers == Keys.Control)
{
CurrentForm.SaveFile();
}
else 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);
}
}
/// <summary>
/// Initializes a new instance of the <see cref="FormMain"/> class.
/// </summary>
/// <param name="args">参数 /ZC-按块显示散点Z值</param>
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 combinedPath = Path.Combine(executablePath, vtkPath);
GeoSigmaLib.SetDllDirectory(combinedPath);
}
/// <summary>
/// 当前激活的文档
/// </summary>
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;
}
}
/// <summary>
/// DrawerGlobalConfig
/// </summary>
public DrawerGlobalConfig DrawerGlobalConfig { get; set; } = DrawerGlobalConfig.Instance;
private FileDropHandler fileDroper;
/// <summary>
/// Forms the main_ load.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
private void FormMain_Load(object sender, EventArgs e)
{
fileDroper = new FileDropHandler(this);
int err = GeoSigmaDrawLib.Security.MachineValidate();
if (err > 0)
{
if (err == 1)
{
MessageBox.Show("运行错误(E001),请联系服务人员!");
}
else if (err == 2)
{
MessageBox.Show("运行错误(E002),系统时间有问题!\r\n检测到系统时间被非正常修改", "软件保护");
}
Application.Exit();
return;
}
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();
}
CheckEnvironment();
}
/// <summary>
/// Forms the main_ shown.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
private void FormMain_Shown(object sender, EventArgs e)
{
LoadStartFile();
//SplashScreenManager.CloseForm(true);
ribbonStatusBar1.Visible = true;
}
/// <summary>
/// Inits the recent config.
/// </summary>
private void InitRecentConfig()
{
recentConfig = new RecentFileConfig();
this.ResetOpenMenu();
}
/// <summary>
/// 加载启动参数指定的文件async
/// </summary>
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);
}
}
/// <summary>
/// Sets the VTK main mesh.
/// </summary>
/// <param name="filePath">The file path.</param>
/// <param name="pMesh">The p mesh.</param>
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)
{
this.tabbedView1.RemoveDocument(vtkEdit);
}
//private void ShowVtkHandler(object sender, ShowVtkEventArgs e)
//{
//}
/// <summary>
/// 新建文件
/// </summary>
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 + "三维";
}
/// <summary>
/// Forms the main_ form closed.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
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();
}
/// <summary>
/// 合并子窗体控件
/// </summary>
/// <param name="sender">ribbon控件</param>
/// <param name="e">事件参数</param>
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;
}
}
}
/// <summary>
/// ribbons the control1_ un merge.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
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);
}
}
/// <summary>
/// ribbons the control1_ show customization menu.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
private void ribbonControl1_ShowCustomizationMenu(object sender, RibbonCustomizationMenuEventArgs e)
{
e.ShowCustomizationMenu = false;
}
/// <summary>
/// 激活图件
/// </summary>
/// <param name="fullFile">名称</param>
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;
}
/// <summary>
/// 打开文件
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
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;
}
}
}
/// <summary>
/// 打开文件
/// </summary>
/// <param name="strFile">文件路径</param>
/// <param name="setZColor">是否以方块方式显示散点数据</param>
//private Task<bool> 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);
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();
}
}
/// <summary>
/// 获取 Tab 页显示名称,如果太长会被截断,防止一个标签页占非常长的位置
/// </summary>
/// <param name="caption">要显示的目标名称</param>
/// <returns>最终会被显示的名称</returns>
private string TabName(string caption)
{
return caption.Length > TABMAXLENGTH ? caption.Substring(0, TABMAXLENGTH) : caption;
}
/// <summary>
/// Tests the event handler.
/// </summary>
/// <param name="editor">The editor.</param>
private void TestEventHandler(UCDrawEdit editor)
{
editor.DrawerView.InsertCommonCommand("克隆到其它井组",
new EventHandler((obj, args) =>
{
SelectedElementsArgs selArgs = args as SelectedElementsArgs;
if (selArgs == null)
{ return; }
List<SigmaDrawerElement.DrawerElementProperty> 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;
/// <summary>
/// 新建文件
/// </summary>
/// <param name="sender">按钮</param>
/// <param name="e">事件参数</param>
private void btnFileNew_ItemClick(object sender, ItemClickEventArgs e)
{
GeoSigma.UCDraw.WellAndSection.FrmNewWellPole dlgNewWell = new GeoSigma.UCDraw.WellAndSection.FrmNewWellPole() { StartPosition = FormStartPosition.CenterScreen };
if (dlgNewWell.ShowDialog(this) == DialogResult.Cancel)
{
return;
}
documentIndex++;
string strFile = $"新建文件{documentIndex}";
UCDrawEdit frmChild = new UCDrawEdit();
frmChild.DrawerView.ViewControl.mNewWellInfo.ratio = dlgNewWell.mRatio;
frmChild.DrawerView.ViewControl.mNewWellInfo.templateFilePath = dlgNewWell.mTemplatefileNamePath;
frmChild.DrawerView.ViewControl.mNewWellInfo.wellName = dlgNewWell.mWellName;
frmChild.DrawerView.ViewControl.mNewWellInfo.welltop = dlgNewWell.mTop;
frmChild.DrawerView.ViewControl.mNewWellInfo.wellbottom = dlgNewWell.mBottom;
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.ShowVtkEvent += new ShowVtkEventHandler(ShowVtkHandler);
this.ribbonControl1.MergeRibbon(frmChild.ribbonMain);
}
/// <summary>
/// Files the closed.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
private void FileClosed(object sender, EventArgs e)
{
if (sender is UCDrawEdit child)
{
child.ShowStatisticResult -= ShowStatic;
}
}
/// <summary>
/// 显示统计面板.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
private void ShowStatic(object sender, EventArgs e)
{
try
{
this.dckPanelStatic.Visibility = DockVisibility.Visible;
}
finally
{
}
}
/// <summary>
/// Sets the recent.
/// </summary>
/// <param name="file">The file.</param>
private void SetRecent(string file)
{
if (string.IsNullOrEmpty(file))
{
return;
}
if (this.recentConfig.AddTop(file) == false)
{
return;
}
ResetOpenMenu();
this.recentConfig.Save();
}
/// <summary>
/// Resets the open menu.
/// </summary>
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);
}
}
/// <summary>
/// 保存文件
/// </summary>
/// <param name="sender">按钮</param>
/// <param name="e">事件参数</param>
private void btnSaveMain_ItemClick(object sender, ItemClickEventArgs e)
{
if (CurrentForm == null)
{
return;
}
if (CurrentForm.SaveFile())
{
SetRecent(CurrentForm.FileFullName);
}
}
/// <summary>
/// 另存为
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void btnSaveAs_ItemClick(object sender, ItemClickEventArgs e)
{
if (CurrentForm == null)
{
return;
}
if (CurrentForm.SaveAs())
{
SetRecent(CurrentForm.FileFullName);
}
}
/// <summary>
/// 符号管理
/// </summary>
/// <param name="sender">按钮</param>
/// <param name="e">事件参数</param>
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);
}
}
/// <summary>
/// 选项按纽
/// </summary>
/// <param name="sender">菜单项</param>
/// <param name="e">事件参数</param>
private void btnSetting_Clicked(object sender, ItemClickEventArgs e)
{
//FormGlobalOptions formGlobal = new FormGlobalOptions();
FrmOptions formGlobal = new FrmOptions();
formGlobal.ShowDialog(this);
}
/// <summary>
/// 图层面板
/// </summary>
/// <param name="sender">菜单项</param>
/// <param name="e">事件参数</param>
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
{
}
}
/// <summary>
/// 属性面板可见性设置
/// </summary>
/// <param name="sender">菜单项</param>
/// <param name="e">事件参数</param>
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
{
}
}
/// <summary>
/// 统计面板
/// </summary>
/// <param name="sender">菜单项</param>
/// <param name="e">事件参数</param>
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
{
}
}
/// <summary>
/// 默认消除网格锯齿
/// </summary>
/// <param name="sender">事件菜单</param>
/// <param name="e">事件参数</param>
private void bbtnMeshAntiAlias_CheckedChanged(object sender, ItemClickEventArgs e)
{
Task.Run(() =>
{
DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable = bbtnMeshAntiAlias.Checked;
DrawerGlobalConfig.Instance.Save();
});
}
/// <summary>
/// 拖放文件
/// </summary>
/// <param name="sender">窗体</param>
/// <param name="e">事件参数</param>
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);
}
}
}
}
/// <summary>
/// 拖放进入事件
/// </summary>
/// <param name="sender">窗体</param>
/// <param name="e">事件参数</param>
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);
}
}
}
/// <summary>
/// Gets the neighbor document.
/// </summary>
/// <param name="documents">The documents.</param>
/// <param name="document">The document.</param>
/// <returns>A BaseDocument.</returns>
protected BaseDocument GetNeighborDocument(BaseDocument[] documents, BaseDocument document)
{
int nLength = documents.Length;
if (nLength == 1)
{
return null;
}
int nIndex = Array.IndexOf<BaseDocument>(documents, document);
if (nIndex == nLength - 1)
{
return documents[nIndex - 1];
}
return documents[nIndex + 1];
}
private bool isCloseCanceled = false;
/// <summary>
/// tabbeds the view1_ document closing.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
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();
}
}
}
/// <summary>
/// 窗体关闭事件
/// </summary>
/// <param name="sender">窗体</param>
/// <param name="e">事件参数</param>
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;
}
}
}
/// <summary>
/// 关于.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="ItemClickEventArgs"/> instance containing the event data.</param>
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);
}
/// <summary>
/// 检测运行环境
/// </summary>
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;
}
}
}