|
|
// <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;
|
|
|
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 AI.AgentIntegration;
|
|
|
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;
|
|
|
|
|
|
private Security security;
|
|
|
private bool isDQLogin = false;
|
|
|
private bool isLogin = 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(), dllName);
|
|
|
}
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
if (hModule != IntPtr.Zero)
|
|
|
{
|
|
|
FreeLibrary(hModule);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Initializes a new instance of the <see cref="FormMain"/> class.
|
|
|
/// </summary>
|
|
|
public FormMain()
|
|
|
{
|
|
|
this.InitializeComponent();
|
|
|
|
|
|
this.barButtonItem8.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
|
|
|
this.tabbedView1.Ribbon = this.ribbonControl1;
|
|
|
if (this.tabbedView1.InvalidDocumentTypes == null)
|
|
|
{
|
|
|
this.tabbedView1.InvalidDocumentTypes = new List<Type>();
|
|
|
}
|
|
|
this.tabbedView1.InvalidDocumentTypes.Add(
|
|
|
typeof(DevExpress.XtraBars.Docking.FloatForm));
|
|
|
|
|
|
this.licHelp = new LicHelp("KEPlatform");
|
|
|
this.licHelp.LoginResultEvent += async (LoginResult result) =>
|
|
|
{
|
|
|
int nStatus = result.Status;
|
|
|
await this.setDQLoginStatusAsync(nStatus);
|
|
|
// Task.Delay 和 DoLogin 可以在后台线程继续执行,不会影响 UI
|
|
|
if (nStatus != 2 && nStatus != 0)
|
|
|
{
|
|
|
await Task.Delay(TimeSpan.FromSeconds(60));
|
|
|
this.licHelp.DoLogin();
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 属性面板关闭时,将主菜单开关闭“属性”按钮设置为 unchecked
|
|
|
this.dckPanelProperty.ClosedPanel += (sender, e) =>
|
|
|
{
|
|
|
this.btnViewProperty.Checked = false;
|
|
|
};
|
|
|
|
|
|
// 关闭图层时把对应属性改为 unchecked
|
|
|
this.dckPanelLayer.ClosedPanel += (sender, e) =>
|
|
|
{
|
|
|
this.btnViewLayer.Checked = false;
|
|
|
};
|
|
|
|
|
|
// 关闭统计元素时把对应属性改为 unchecked
|
|
|
this.dckPanelStatic.ClosedPanel += (sender, e) =>
|
|
|
{
|
|
|
this.btnViewStatic.Checked = false;
|
|
|
};
|
|
|
|
|
|
this.ribbonControl1.OptionsMenuMinWidth = 0;
|
|
|
|
|
|
this.KeyPreview = true;
|
|
|
|
|
|
NativeLibraryPathRegistrar.Register();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 获取一下当前 TabbedView,方便后续进行操作
|
|
|
/// </summary>
|
|
|
public DrawerTabbedView TabbedView1 => tabbedView1;
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设置登录状态.
|
|
|
/// </summary>
|
|
|
/// <param name="statusCode">The status code.</param>
|
|
|
private async Task setDQLoginStatusAsync(int statusCode)
|
|
|
{
|
|
|
if (this.InvokeRequired)
|
|
|
{
|
|
|
// 使用 BeginInvoke 异步调用
|
|
|
this.Invoke(
|
|
|
new Action<int>(async (code) =>
|
|
|
await this.setDQLoginStatusAsync(code)), statusCode);
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if (statusCode == 0)
|
|
|
{ // 登录成功
|
|
|
this.isDQLogin = true;
|
|
|
await this.setLoginStatusAsync();
|
|
|
}
|
|
|
else if (statusCode == 2)
|
|
|
{
|
|
|
// 不需要登录大庆服务器,不设置登录状态。
|
|
|
this.isDQLogin = true;
|
|
|
}
|
|
|
else
|
|
|
{ // 登录失败
|
|
|
this.isDQLogin = false;
|
|
|
await this.setLoginStatusAsync();
|
|
|
// 大庆版本
|
|
|
MessageBox.Show(this, "登录失败,请尽快保存文件!", "登录许可失败");
|
|
|
}
|
|
|
}
|
|
|
/// <inheritdoc/>
|
|
|
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)
|
|
|
{
|
|
|
this.btnFileOpen_ItemClick(this, null);
|
|
|
}
|
|
|
else if (e.KeyCode == Keys.N && e.Modifiers == Keys.Control)
|
|
|
{
|
|
|
this.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)
|
|
|
{
|
|
|
this.lstArgs.Clear();
|
|
|
for (int i = 1; i < args.Length; i++)
|
|
|
{
|
|
|
this.lstArgs.Add(args[i]);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
this.bbtnMeshAntiAlias.Checked = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable;
|
|
|
|
|
|
this.ribbonControl1.OptionsMenuMinWidth = 0;
|
|
|
|
|
|
// 注册
|
|
|
AppController.Instance.MainForm = this;
|
|
|
|
|
|
NativeLibraryPathRegistrar.Register();
|
|
|
}
|
|
|
|
|
|
protected override void OnLoad(EventArgs e)
|
|
|
{
|
|
|
// 必须在事件循环启动之后调用
|
|
|
UiDispatcher.Instance.Initialize(SynchronizationContext.Current);
|
|
|
|
|
|
base.OnLoad(e);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Gets 当前激活的文档
|
|
|
/// </summary>
|
|
|
private UCDrawEdit CurrentForm
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
if (this.tabbedView1.ActiveDocument != null)
|
|
|
{
|
|
|
return this.tabbedView1.ActiveDocument.Control as UCDrawEdit;
|
|
|
}
|
|
|
else if (this.tabbedView1.ActiveFloatDocument != null)
|
|
|
{
|
|
|
return this.tabbedView1.ActiveFloatDocument.Control as UCDrawEdit;
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Gets 所有打开的标签页
|
|
|
/// </summary>
|
|
|
public List<string> OpenTabs
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return tabbedView1
|
|
|
.Documents
|
|
|
.Cast<Document>()
|
|
|
.Select(document => document.Caption)
|
|
|
.ToList();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Gets 当前激活标签
|
|
|
/// </summary>
|
|
|
public string ActivateTab
|
|
|
{
|
|
|
get
|
|
|
{
|
|
|
return tabbedView1.ActiveDocument?.Caption;
|
|
|
}
|
|
|
|
|
|
set
|
|
|
{
|
|
|
if (value != null)
|
|
|
{
|
|
|
foreach (Document document in tabbedView1.Documents.Cast<Document>())
|
|
|
{
|
|
|
if (document.Caption == value)
|
|
|
{
|
|
|
tabbedView1.ActivateDocument(document.Control);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 保存所有文件
|
|
|
/// </summary>
|
|
|
public void SaveAll()
|
|
|
{
|
|
|
foreach (Document document in tabbedView1.Documents.Cast<Document>())
|
|
|
{
|
|
|
if (document.Control is UCDrawEdit edit)
|
|
|
{
|
|
|
edit.SaveFile();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 重新加载当前文件
|
|
|
/// </summary>
|
|
|
public void ReloadFile()
|
|
|
{
|
|
|
if (tabbedView1.ActiveDocument != null && tabbedView1.ActiveDocument.Control is UCDrawEdit edit)
|
|
|
{
|
|
|
edit.DrawerView.ReloadFile();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Gets or sets 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 async void FormMain_Load(object sender, EventArgs e)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (Security.CurentLicenseInfo.IsNetServer == true)
|
|
|
{
|
|
|
this.isLogin = false;
|
|
|
await this.setLoginStatusAsync();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.isLogin = true;
|
|
|
}
|
|
|
|
|
|
this.security = new Security();
|
|
|
this.security.LicenseInvalidateEvent += async (status, message) =>
|
|
|
{
|
|
|
this.isLogin = status == 1;
|
|
|
await this.setLoginStatusAsync();
|
|
|
};
|
|
|
this.security.CheckLicense(this);
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
Application.Exit();
|
|
|
}
|
|
|
|
|
|
this.fileDroper = new FileDropHandler(this);
|
|
|
try
|
|
|
{
|
|
|
// Disable layout load animation effects
|
|
|
this.workspaceManager1.AllowTransitionAnimation = DevExpress.Utils.DefaultBoolean.False;
|
|
|
WorkspaceManager.SetSerializationEnabled(this.ribbonControl1, false);
|
|
|
// Load DevExpress controls' layouts from a file
|
|
|
if (this.workspaceManager1.LoadWorkspace(this.workspaceName1, this.fileLayout, true))
|
|
|
{
|
|
|
this.workspaceManager1.ApplyWorkspace(this.workspaceName1);
|
|
|
this.dckPanelLayer.Text = "图层";
|
|
|
}
|
|
|
|
|
|
this.InitRecentConfig();
|
|
|
}
|
|
|
finally
|
|
|
{
|
|
|
this.licHelp.DoLogin();
|
|
|
}
|
|
|
#if !DEBUG
|
|
|
CheckEnvironment();
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
private async Task setLoginStatusAsync()
|
|
|
{
|
|
|
bool isLoggedIn = this.isDQLogin && this.isLogin;
|
|
|
string tooltipText = isLoggedIn ? "已登录" : "未登录";
|
|
|
string resourceName = isLoggedIn
|
|
|
? "bsiLoginInfo.ImageOptions.SvgImage"
|
|
|
: "bsiLoginInfo.ImageOptions.DisabledSvgImage";
|
|
|
|
|
|
// 更新非资源依赖的UI部分
|
|
|
this.bsiLoginInfo.Enabled = true;
|
|
|
((ToolTipItem)this.bsiLoginInfo.SuperTip.Items[0]).Text = tooltipText;
|
|
|
|
|
|
// 异步加载资源
|
|
|
var resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMain));
|
|
|
var svgImage = await Task.Run(() => resources.GetObject(resourceName));
|
|
|
|
|
|
// 回到UI线程更新图像(实际上await会自动回到UI线程)
|
|
|
this.bsiLoginInfo.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)svgImage;
|
|
|
}
|
|
|
|
|
|
/// <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)
|
|
|
{
|
|
|
this.LoadStartFile();
|
|
|
// SplashScreenManager.CloseForm(true);
|
|
|
this.ribbonStatusBar1.Visible = true;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// Inits the recent config.
|
|
|
/// </summary>
|
|
|
private void InitRecentConfig()
|
|
|
{
|
|
|
this.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))
|
|
|
{
|
|
|
this.OpenVtkView();
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
string strZC = this.lstArgs.Find(it => { return it.ToUpper().StartsWith("/ZC"); });
|
|
|
if (!string.IsNullOrEmpty(strZC))
|
|
|
{
|
|
|
int nSizeIndex = strZC.IndexOf(':');
|
|
|
if (nSizeIndex > 0)
|
|
|
{
|
|
|
this.ZColorWidth = Convert.ToInt32(strZC.Substring(nSizeIndex + 1));
|
|
|
}
|
|
|
// string ext = Path.GetExtension(this.startFile);
|
|
|
// if(ext == ".xyz")
|
|
|
// {
|
|
|
this.batchSetZColorFlag = true;
|
|
|
// }
|
|
|
this.OpenFile(this.startFile, true);
|
|
|
this.lstArgs.Clear();
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.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)
|
|
|
{
|
|
|
this.CurrentForm.SetVtkMainMesh(pMesh);
|
|
|
this.CurrentForm.MainMeshProperty = this.CurrentForm.PropertyControl.ElementProperty;
|
|
|
var vtkEdit = this.CurrentForm.VtkEdit;
|
|
|
if (vtkEdit != null && !vtkEdit.IsDisposed)
|
|
|
{
|
|
|
vtkEdit.VtkMainMesh = pMesh;
|
|
|
vtkEdit.SetMainMeshProperty(this.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 tabbedView1_DocumentActivated(object sender, DevExpress.XtraBars.Docking2010.Views.DocumentEventArgs e)
|
|
|
{
|
|
|
if (e.Document == null) return;
|
|
|
|
|
|
// 判断当前激活的文档内容是否为三维编辑控件
|
|
|
if (e.Document.Control is UCVtkEdit)
|
|
|
{
|
|
|
// 处于三维模式:屏蔽成图
|
|
|
if (this.dcpCreateMap != null)
|
|
|
{
|
|
|
this.dcpCreateMap.Visibility = DockVisibility.Hidden;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
// 切换到了其他文档(如二维图):还原成图并选中属性
|
|
|
if (this.dcpCreateMap != null && this.dckPanelProperty != null)
|
|
|
{
|
|
|
// 还原成图面板可见性
|
|
|
this.dcpCreateMap.Visibility = DockVisibility.Visible;
|
|
|
|
|
|
// 确保属性面板可见
|
|
|
this.dckPanelProperty.Visibility = DockVisibility.Visible;
|
|
|
|
|
|
// 切换 Tab 到属性页
|
|
|
if (this.dckPanelProperty.ParentPanel != null)
|
|
|
{
|
|
|
this.dckPanelProperty.ParentPanel.ActiveChild = this.dckPanelProperty;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void ShowVtkHandler(object sender, ShowVtkEventArgs e)
|
|
|
{
|
|
|
UCDrawEdit ucdraw = this.CurrentForm;
|
|
|
if (ucdraw == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
// 按分号分割(移除空条目)
|
|
|
string[] segments = e.WellLayer.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
// 一个二维图只打开一个三维窗口,已经打开了三维窗口的情况
|
|
|
if (ucdraw.VtkEdit != null)
|
|
|
{
|
|
|
ucdraw.VtkEdit.VtkProerty.InitWellTypeColors(segments);
|
|
|
ucdraw.VtkEdit.propertyGridControl.UpdateData();
|
|
|
// 激活文档
|
|
|
this.tabbedView1.ActivateDocument(ucdraw.VtkEdit);
|
|
|
return;
|
|
|
}
|
|
|
Drawer drawer = ucdraw.DrawerView.ViewControl.Drawer;
|
|
|
// 初始化vtk控件
|
|
|
UCVtkEdit vtkEdit = new UCVtkEdit();
|
|
|
|
|
|
//vtkEdit.Disposed += (s, args) => {
|
|
|
// if (this.dcpCreateMap != null)
|
|
|
// {
|
|
|
// // 还原成图面板
|
|
|
// this.dcpCreateMap.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
|
|
|
// }
|
|
|
//};
|
|
|
|
|
|
// 双向绑定
|
|
|
this.CurrentForm.VtkEdit = vtkEdit;
|
|
|
vtkEdit.DrawEdit = this.CurrentForm;
|
|
|
// 设置主网格
|
|
|
vtkEdit.VtkMainMesh = this.CurrentForm.VtkMainMesh;
|
|
|
vtkEdit.SetMainMeshProperty(this.CurrentForm.MainMeshProperty);
|
|
|
vtkEdit.PropertyControl.SelectedObject = vtkEdit.VtkProerty;
|
|
|
// 初始化井类别颜色
|
|
|
vtkEdit.VtkProerty.InitWellTypeColors(segments);
|
|
|
vtkEdit.propertyGridControl.UpdateData();
|
|
|
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();
|
|
|
this.splashScreenManager1.ShowWaitForm();
|
|
|
this.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;
|
|
|
this.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;
|
|
|
this.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);
|
|
|
ucdraw.VtkEdit.UpdateWellTypeColor();
|
|
|
|
|
|
//切换标签 是否显示成图
|
|
|
this.tabbedView1.DocumentActivated += tabbedView1_DocumentActivated;
|
|
|
|
|
|
if (this.tabbedView1.OtherDocumentActivated == null)
|
|
|
{
|
|
|
this.tabbedView1.OtherDocumentActivated += vtkEdit.AfterDocumentActived;
|
|
|
}
|
|
|
|
|
|
this.dcpCreateMap.Visibility = DockVisibility.Hidden;
|
|
|
this.splashScreenManager1.CloseWaitForm();
|
|
|
this.ResumeLayout();
|
|
|
}
|
|
|
|
|
|
/// <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();
|
|
|
this.splashScreenManager1.ShowWaitForm();
|
|
|
this.splashScreenManager1.SetWaitFormDescription("正在打开三维...");
|
|
|
this.SuspendLayout();
|
|
|
vtkChild.VtkShowEventHandler += (sender, e) =>
|
|
|
{
|
|
|
this.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
|
|
|
this.workspaceManager1.CaptureWorkspace(this.workspaceName1, true);
|
|
|
this.workspaceManager1.SaveWorkspace(this.workspaceName1, this.fileLayout, true);
|
|
|
|
|
|
this.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 (this.btnViewProperty.Checked != child.PropertyPanelVisible)
|
|
|
{
|
|
|
this.btnViewProperty.Checked = child.PropertyPanelVisible;
|
|
|
}
|
|
|
if (this.btnViewLayer.Checked != child.PropertyPanelVisible)
|
|
|
{
|
|
|
this.btnViewLayer.Checked = child.PropertyPanelVisible;
|
|
|
}
|
|
|
if (this.btnViewStatic.Checked != child.StatisticPanelVisible)
|
|
|
{
|
|
|
this.btnViewStatic.Checked = child.StatisticPanelVisible;
|
|
|
}
|
|
|
}
|
|
|
else if (childRibbon.Parent is UCVtkEdit)
|
|
|
{
|
|
|
UCVtkEdit child = childRibbon.Parent as UCVtkEdit;
|
|
|
child.ViewGroupVisible = false;
|
|
|
child.MergePanels();
|
|
|
|
|
|
if (this.btnViewProperty.Checked != child.PropertyPanelVisible)
|
|
|
{
|
|
|
this.btnViewProperty.Checked = child.PropertyPanelVisible;
|
|
|
}
|
|
|
if (this.btnViewLayer.Checked != child.PropertyPanelVisible)
|
|
|
{
|
|
|
this.btnViewLayer.Checked = child.PropertyPanelVisible;
|
|
|
}
|
|
|
if (this.btnViewStatic.Checked != child.StatisticPanelVisible)
|
|
|
{
|
|
|
this.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))
|
|
|
{
|
|
|
this.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)
|
|
|
public 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 += this.OnOpenNewFile;
|
|
|
if (this.batchSetZColorFlag)
|
|
|
{
|
|
|
drawerChild.BatchSetZColorFlag = this.batchSetZColorFlag;
|
|
|
this.batchSetZColorFlag = !this.batchSetZColorFlag;
|
|
|
}
|
|
|
|
|
|
drawerChild.LayerPanel = this.dckPanelLayer;
|
|
|
drawerChild.PropertyPanel = this.dckPanelProperty;
|
|
|
drawerChild.CreateMapPanel = this.dcpCreateMap;
|
|
|
drawerChild.StatisticPanel = this.dckPanelStatic;
|
|
|
drawerChild.DrawerStatusBar = this.ribbonControl1.StatusBar;
|
|
|
|
|
|
this.TryRecoverFileWhenUnexpectedShutdown(drawerChild, strFile);
|
|
|
|
|
|
this.splashScreenManager1.ShowWaitForm();
|
|
|
this.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)
|
|
|
{
|
|
|
this.splashScreenManager1.CloseWaitForm();
|
|
|
// frmChild.Close();
|
|
|
MessageBox.Show($"打开文件{strFile}失败", "打开");
|
|
|
// return Task.FromResult(false);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
var doc = this.tabbedView1.AddDocument(drawerChild);
|
|
|
|
|
|
// 标签页上显示短名称
|
|
|
doc.Caption = this.TabName(drawerChild.Text);
|
|
|
// 光标移动上去时显示全名
|
|
|
if (doc is Document document)
|
|
|
{
|
|
|
document.Tooltip = drawerChild.Text;
|
|
|
}
|
|
|
|
|
|
this.ribbonControl1.MergeRibbon(drawerChild.ribbonMain, false);
|
|
|
|
|
|
drawerChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) =>
|
|
|
{
|
|
|
this.SetRecent(fileName);
|
|
|
});
|
|
|
// 打开文件时,三维初始化设置
|
|
|
drawerChild.DrawerView.ViewControl.Drawer.SetVtkMainMeshEvent += new SetVtkMainMeshHandler((filePath, pMesh) =>
|
|
|
{
|
|
|
this.SetVtkMainMesh(filePath, pMesh);
|
|
|
});
|
|
|
drawerChild.ShowVtkEvent += new ShowVtkEventHandler(this.ShowVtkHandler);
|
|
|
drawerChild.CloseVtkEvent = new CloseVtkHandler(this.CloseVtkHandler);
|
|
|
// 加载主网格与图层设置
|
|
|
drawerChild.LoadVtkMainMesh();
|
|
|
drawerChild.LoadLayerSetting();
|
|
|
|
|
|
this.SetRecent(strFile);
|
|
|
this.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)
|
|
|
{
|
|
|
this.documentIndex++;
|
|
|
string strFile = $"新建文件{this.documentIndex}";
|
|
|
UCDrawEdit frmChild = new UCDrawEdit();
|
|
|
frmChild.OpenNewFile += this.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)
|
|
|
{
|
|
|
this.documentIndex--;
|
|
|
return;
|
|
|
}
|
|
|
frmChild.NewFileSavedEvent += new NewFileSavedHandler((fileName) =>
|
|
|
{
|
|
|
this.SetRecent(fileName);
|
|
|
});
|
|
|
// 加载子窗体布局
|
|
|
frmChild.Show();
|
|
|
var doc = this.tabbedView1.AddDocument(frmChild);
|
|
|
doc.Caption = frmChild.Text;
|
|
|
|
|
|
// 打开文件时,三维初始化设置
|
|
|
frmChild.DrawerView.ViewControl.Drawer.SetVtkMainMeshEvent += new SetVtkMainMeshHandler((filePath, pMesh) =>
|
|
|
{
|
|
|
this.SetVtkMainMesh(filePath, pMesh);
|
|
|
});
|
|
|
frmChild.ShowVtkEvent += new ShowVtkEventHandler(this.ShowVtkHandler);
|
|
|
frmChild.CloseVtkEvent = new CloseVtkHandler(this.CloseVtkHandler);
|
|
|
|
|
|
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 -= this.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;
|
|
|
}
|
|
|
this.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 = this.imgsMain.Images["fileNew"];
|
|
|
item.ItemClick += new ItemClickEventHandler(async (object sender, ItemClickEventArgs e) =>
|
|
|
{
|
|
|
this.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 (this.CurrentForm == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
if (this.CurrentForm.SaveFile())
|
|
|
{
|
|
|
this.SetRecent(this.CurrentForm.FileFullName);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 另存为
|
|
|
/// </summary>
|
|
|
/// <param name="sender">事件按钮</param>
|
|
|
/// <param name="e">事件参数</param>
|
|
|
private void btnSaveAs_ItemClick(object sender, ItemClickEventArgs e)
|
|
|
{
|
|
|
if (this.CurrentForm == null)
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
if (this.CurrentForm.SaveAs())
|
|
|
{
|
|
|
this.SetRecent(this.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 parentPath = Path.GetFullPath(Path.Combine(Application.StartupPath, ".."));
|
|
|
string symbolFile = Path.Combine(parentPath, "Symbol");
|
|
|
|
|
|
if (this.CurrentForm == null)
|
|
|
{
|
|
|
SymbolLibInterface.SymbolHelp.ShowSymbolUI(null, symbolFile);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
SymbolLibInterface.SymbolHelp.ShowSymbolUI(this.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 (this.CurrentForm == null)
|
|
|
{
|
|
|
if (this.btnViewLayer.Checked)
|
|
|
{
|
|
|
this.dckPanelLayer.Visibility = DockVisibility.AutoHide;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (!this.dockManager1.AutoHideContainers[0].Controls.Contains(this.dckPanelLayer))
|
|
|
{
|
|
|
// this.dockManager1.AutoHideContainers[0].Controls.Add(dckPanelLayer);
|
|
|
this.dockManager1.AddPanel(DockingStyle.Left, this.dckPanelLayer);
|
|
|
}
|
|
|
this.dckPanelLayer.Visibility = DockVisibility.Visible;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.CurrentForm.LayerPanelVisible = this.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 (this.CurrentForm == null)
|
|
|
{
|
|
|
if (this.btnViewProperty.Checked)
|
|
|
{
|
|
|
this.dckPanelProperty.Visibility = DockVisibility.AutoHide;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.dckPanelProperty.Visibility = DockVisibility.Visible;
|
|
|
this.dckPanelProperty.ParentPanel.ActiveChild = this.dckPanelProperty;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.CurrentForm.PropertyPanelVisible = this.btnViewProperty.Checked;
|
|
|
}
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 统计面板
|
|
|
/// </summary>
|
|
|
/// <param name="sender">菜单项</param>
|
|
|
/// <param name="e">事件参数</param>
|
|
|
private void btnViewStatic_CheckedChanged(object sender, ItemClickEventArgs e)
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
if (this.CurrentForm == null)
|
|
|
{
|
|
|
if (this.btnViewStatic.Checked)
|
|
|
{
|
|
|
this.dckPanelStatic.Visibility = DockVisibility.AutoHide;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.dckPanelStatic.Visibility = DockVisibility.Visible;
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
this.CurrentForm.StatisticPanelVisible = this.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 = this.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))
|
|
|
{
|
|
|
this.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))
|
|
|
{
|
|
|
this.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;
|
|
|
private DrawerTabbedView tabbedView11;
|
|
|
|
|
|
/// <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);
|
|
|
this.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 < this.tabbedView1.Documents.Count; i++)
|
|
|
{
|
|
|
this.tabbedView1.Controller.Close(this.tabbedView1.Documents[i]);
|
|
|
if (this.isCloseCanceled == true)
|
|
|
{
|
|
|
e.Cancel = true;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
if (e.Cancel != true)
|
|
|
{
|
|
|
this.security?.CloseLicense();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <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 this.tabbedView1.Documents)
|
|
|
{
|
|
|
if (doc.Control is UCDrawEdit ucDrawEdit && ucDrawEdit.FileFullName == filePath)
|
|
|
{
|
|
|
ucDrawEdit.OpenFile(filePath);
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
this.OpenFile(filePath);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 检测运行环境
|
|
|
/// </summary>
|
|
|
private void CheckEnvironment()
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
this.CheckBaseDependencies();
|
|
|
this.CheckGriddingDependencies();
|
|
|
this.CheckMeshProcessDependencies();
|
|
|
}
|
|
|
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 FormMain_MdiChildActivate(object sender, EventArgs e)
|
|
|
{
|
|
|
// string strText = this.Text;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 登录信息点击事件处理函数
|
|
|
/// </summary>
|
|
|
/// <param name="sender">事件发送者</param>
|
|
|
/// <param name="e">事件参数,包含点击项的详细信息</param>
|
|
|
private async void bsiLoginInfo_ItemClick(object sender, ItemClickEventArgs e)
|
|
|
{
|
|
|
await this.security.ShowServerConfig();
|
|
|
}
|
|
|
}
|
|
|
}
|