// // Copyright (c) PlaceholderCompany. All rights reserved. // using DevExpress.Utils.Extensions; using GeoSigma.UCDraw.Tool; namespace PcgDrawR { using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Windows.Forms; using System.Xml.Linq; using DevExpress.Utils.Menu; using DevExpress.Utils.Svg; using DevExpress.XtraBars; using DevExpress.XtraBars.Docking; using DevExpress.XtraBars.Ribbon; using DevExpress.XtraEditors; using DevExpress.XtraGrid; using DrawerInterface; using GeoSigma.SigmaDrawerUtil; using GeoSigma.UCDraw; using GeoSigma.UCDraw.UC; using GeoSigmaDrawLib; using SigmaDrawerElement; using UCDraw; /// /// The NewFileSavedHandler. /// /// The fileFullName. public delegate void NewFileSavedHandler(string fileFullName); /// /// The FileClosedEventHandler. /// /// The sender. /// The e. public delegate void FileClosedEventHandler(object sender, EventArgs e); /// /// 显示VTK窗口 /// /// The sender. /// The instance containing the event data. public delegate void ShowVtkEventHandler(object sender, ShowVtkEventArgs e); /// /// 关闭VTK窗口 /// /// The VTK edit. public delegate void CloseVtkHandler(UCVtkEdit vtkEdit); /// /// 图层选择通知代理(带状态) /// /// 图层 /// 状态 public delegate void LayerSelectedNotifyWithStatusHandler(string layers, LayerStatus status); /// /// 通知上层打开一个新文件 /// /// 文件路径 public delegate void OpenNewFileHandler(string filePath); /// /// Ribbon风格图形编辑. /// public partial class UCDrawEdit : XtraUserControl // DevExpress.XtraBars.Ribbon.RibbonForm { private static bool hasProcessDebug = false; /// /// Defines the NewFileSavedEvent. /// public NewFileSavedHandler NewFileSavedEvent { get; set; } /// /// Defines the FileClosedEvent. /// public FileClosedEventHandler FileClosedEvent { get; set; } /// /// Gets or sets the close VTK handler event. /// /// /// The close VTK handler event. /// public CloseVtkHandler CloseVtkEvent { get; set; } /// /// Gets or sets the show VTK event. /// /// /// The show VTK event. /// public ShowVtkEventHandler ShowVtkEvent { get; set; } /// /// Defines the ShowStatisticResult. /// public event EventHandler ShowStatisticResult; /// /// Defines the FileModifiedEvent. /// public event FileModifyEventHandle FileModifiedEvent; /// /// 打开新文件 /// public event OpenNewFileHandler OpenNewFile; /// /// 2维图层选择通知(带状态) /// public LayerSelectedNotifyWithStatusHandler LayerSelectedNotify2dWithStatus { get; set; } /// /// Defines the layerPanel. /// private DockPanel layerPanel; /// /// VtkMainMesh /// public IntPtr VtkMainMesh { get; set; } = IntPtr.Zero; /// /// 设置主网格 /// /// public void SetVtkMainMesh(IntPtr pMash) { VtkMainMesh = pMash; this.LayerControl.VtkMainMesh = pMash; mainView.MainMeshLayer3D = mainView.ViewControl.Geo.GetLayerByMainMesh3D(pMash); } /// /// 获取主网格所在的图层 /// /// public string GetMainMeshLayer() { return mainView.MainMeshLayer3D; } /// /// 通过文件存储的主网格ID获取主网格数据对象 /// /// public IntPtr LoadVtkMainMesh() { // 从文件获取主网格ID string layerName = mainView.ViewControl.Geo.GetMainMeshLayer3D(); if (string.IsNullOrEmpty(layerName)) { return IntPtr.Zero; } IntPtr ret = mainView.ViewControl.Geo.GetMainMeshByLayer3D(layerName); if (ret == IntPtr.Zero) { return IntPtr.Zero; } Drawer drawer = DrawerView.ViewControl.Drawer; drawer.SetVtkMainMeshEvent?.Invoke(drawer.DrawFileName, ret); return ret; } /// /// 通过文件存储的图层设置 /// /// public void LoadLayerSetting() { this.HoleLayer = mainView.ViewControl.Geo.GetFaultLayer3D(); this.BorderControlLayer = mainView.ViewControl.Geo.GetBorderLayer3D(); this.WellLayer = mainView.ViewControl.Geo.GetWellLayer3D(); this.btiDigEmptyLayer.EditValue = this.HoleLayer; this.btiBorderControlLayer.EditValue = this.BorderControlLayer; this.btiWellLayer.EditValue = this.WellLayer; } /// /// Gets or sets the main mesh property. /// /// /// The main mesh property. /// public SigmaDrawerElement.DrawerElementProperty MainMeshProperty { get; set; } = null; /// /// Gets or sets the LayerPanel /// 图层面板. /// public DockPanel LayerPanel { get { return layerPanel; } set { layerPanel = value; try { if (!object.ReferenceEquals(value, dcpLayer)) { if (dcpLayer.Parent.Controls.Count == 1) { Controls.Remove(dcpLayer.Parent); } else { dockManager1.RemovePanel(dcpLayer); } } //else //{ // this.dcpLayer.Visibility = DockVisibility.Visible; //} } finally { } } } private DockPanel propertyPanel; /// /// Gets or sets the PropertyPanel /// 属性面板. /// public DockPanel PropertyPanel { get { return propertyPanel; } set { propertyPanel = value; if (!object.ReferenceEquals(value, dcpProperty)) { if (dcpProperty.Parent.Controls.Count == 1) { Controls.Remove(dcpProperty.Parent); } else if (dcpProperty.Parent.Controls.Count == 2 && dcpProperty.Parent.Controls.Contains(dcpCreate)) { dockManager1.RemovePanel((DockPanel)dcpProperty.Parent); //Controls.Remove(dcpProperty.Parent); } else { dockManager1.RemovePanel(dcpProperty); } } } } private DockPanel createMapPanel; public DockPanel CreateMapPanel { get { return createMapPanel; } set { createMapPanel = value; if (!object.ReferenceEquals(value, createMapPanel)) { if (createMapPanel.Parent.Controls.Count == 1) { Controls.Remove(dcpCreate.Parent); } else if (dcpCreate.Parent.Controls.Count == 2 && dcpCreate.Parent.Controls.Contains(dcpCreate)) { dockManager1.RemovePanel((DockPanel)dcpCreate.Parent); //Controls.Remove(dcpProperty.Parent); } else { dockManager1.RemovePanel(dcpCreate); } } } } /// /// Defines the statisticPanel. /// private DockPanel statisticPanel; /// /// Gets or sets the StatisticPanel /// 统计面板. /// public DockPanel StatisticPanel { get { return statisticPanel; } set { statisticPanel = value; if (!object.ReferenceEquals(dcpStatistic, value)) { if (dcpStatistic.Parent.Controls.Count == 1) { Controls.Remove(dcpStatistic.Parent); } else { dockManager1.RemovePanel(dcpStatistic); } } //else //{ // this.dcpStatistic.Visibility = DockVisibility.Visible; //} } } /// /// Defines the drawerStatusBar. /// private RibbonStatusBar drawerStatusBar; /// /// Gets or sets the DrawerStatusBar /// 状态条,显示鼠标位置等提示信息. /// public RibbonStatusBar DrawerStatusBar { get { return drawerStatusBar; } set { drawerStatusBar = value; } } /// /// Gets the DrawerView /// 主绘图控件. /// public MainView DrawerView => mainView; /// /// Gets or sets the LayerControl /// 树控件. /// public LayerTree LayerControl { get; set; } /// /// Gets or sets the PropertyControl /// 属性控件. /// public PanelProperty PropertyControl { get; set; } private PanelGraph panelGraph = null; /// /// 数据成图控件 /// public PanelGraph GraphControl { get { return panelGraph; } } /// /// Gets or sets the StatisticControl /// 统计数据控件. /// public PanelControl StatisticControl { get; set; } /// /// Gets or sets the LayerSelected /// 图层选择事件. /// public EventHandler LayerSelected { get { return DrawerView?.LayerSelected; } set { if (DrawerView != null) { DrawerView.LayerSelected = value; } } } /// /// Gets or sets the ZColorWidth /// 色块尺寸,当散点显示为色块时使用此属性。. /// public double ZColorWidth { get; set; } = 25; /// /// Gets or sets the FileFullName /// 文件全路径. /// public string FileFullName { get { return mainView.FileFullName; } set { mainView.FileFullName = value; } } /// /// 等值线图层名 /// public string GridContourLayer { get; set; } = "等值线"; /// /// 断层图层名 /// public string GridFaultLayer { get; set; } = "断层"; /// /// 网格编辑控制点图层 /// public string ControlPointLayer { get; set; } = string.Empty; /// /// 网格编辑器其它线类图层 /// public string OtherLineLayer { get; set; } = string.Empty; /// /// 三维挖空图层 /// public string HoleLayer { get; set; } = string.Empty; /// /// 范围边界 /// public string BorderControlLayer { get; set; } = string.Empty; /// /// 井位图层 /// public string WellLayer { get; set; } = string.Empty; private string popupTreeType = string.Empty; /// /// Gets or sets a value indicating whether EnableMeshPack. /// public bool EnableMeshPack { get { return mainView.EnableMeshPack; } set { mainView.EnableMeshPack = value; if (bbtnMeshPack.Down != mainView.EnableMeshPack) { bbtnMeshPack.Down = mainView.EnableMeshPack; } } } /// /// Gets or sets a value indicating whether StatusBarVisible /// Gets or sets 状态条是否可见.. /// public bool StatusBarVisible { get { return ribbonStatusBar1.Visible; } set { ribbonStatusBar1.Visible = value; } } /// /// Gets or sets a value indicating whether ViewGroupVisible /// 视图工具组是否可见. /// public bool ViewGroupVisible { get { return rgpViews.Visible; } set { rgpViews.Visible = value; } } /// /// Gets or sets the DrawerGotFocus /// 获得焦点事件. /// public EventHandler DrawerGotFocus { get { if (mainView != null) { return mainView.DrawerGotFocus; } return null; } set { if (mainView != null) { mainView.DrawerGotFocus = value; } } } /// /// Gets the RibbonDraw /// 绘图工具RibbonPage. /// public RibbonPage RibbonDraw { get { return ribbonPage1; } } /// /// Defines the mainView. /// private MainView mainView = null; /// /// Defines the layerPopNode. /// private string layerPopNode = string.Empty; /// /// Gets or sets a value indicating whether StatisticPanelVisible /// get/set 统计面板的可见性. /// public bool StatisticPanelVisible { get { return StatisticPanel.Visibility == DockVisibility.Visible; } set { try { if (value == true) { StatisticPanel.Visibility = DockVisibility.Visible; } else { StatisticPanel.Visibility = DockVisibility.Hidden; } } catch { } } } /// /// Gets or sets a value indicating whether LayerPanelVisible /// get/set 图层面板可见性. /// public bool LayerPanelVisible { get { return LayerPanel.Visibility == DockVisibility.Visible; } set { try { if (value == true) { LayerPanel.Visibility = DockVisibility.Visible; } else { LayerPanel.Visibility = DockVisibility.Hidden; } } catch { } } } /// /// Gets or sets a value indicating whether PropertyPanelVisible /// get/set 属性面板可见性. /// public bool PropertyPanelVisible { get { return PropertyPanel.Visibility == DockVisibility.Visible; } set { try { if (value == true) { if (bckiPanelProperty.Checked != true) { bckiPanelProperty.Checked = true; return; } this.PropertyPanel.Index = 0; CreateMapPanel.Visibility = DockVisibility.Visible; PropertyPanel.Visibility = DockVisibility.Visible; this.PropertyPanel.ParentPanel.ActiveChild = this.PropertyPanel; } else { CreateMapPanel.Visibility = DockVisibility.Hidden; PropertyPanel.Visibility = DockVisibility.Hidden; if (bckiPanelProperty.Checked == true) { bckiPanelProperty.Checked = false; } } } catch { } } } private bool batchSetZColorFlag; /// /// Gets or sets a value indicating whether [batch set z color flag]. /// /// /// true if [batch set z color flag]; otherwise, false. /// public bool BatchSetZColorFlag { get { return batchSetZColorFlag; } set { this.btnSetXyzClore.Enabled = value; batchSetZColorFlag = value; } } /// /// 将全部内容当前分辨率保存到指定输出文件. /// /// The output file. /// 左 /// 上 /// 右 /// 下 public void Draw2Image(string outputFile, double left = 0, double top = 0, double right = 0, double bottom = 0) { mainView?.Draw2Image(outputFile, left, top, right, bottom); } private BarManager bmDrawer; private string layoutFilePath; /// /// Initializes a new instance of the class. /// public UCDrawEdit() { InitializeComponent(); this.LayerSelectedNotify2dWithStatus += (layers, status) => { // 2维图层树更新操作 var layerTree = LayerControl.TreeControl; layerTree.SuspendLayout(); var layerItems = layers.Split(new[] { ";" }, StringSplitOptions.RemoveEmptyEntries).ToList(); var fullNodes = TreeViewHelper.TraverseTreeView(layerTree); foreach (var layerItem in fullNodes) { if (layerItem.Text == "图层") { continue; } if (layerItems.Contains(layerItem.FullPath)) { LayerControl.SetNodeStatus(new List() { LayerControl.GetLayerName(layerItem) }, status); } } if (layerItems.Count > 0) { LayerControl_2dNodeViewToggleEvent(layers, status); } }; this.layoutFilePath = Path.Combine(Application.StartupPath, "KevEditorLayout.xml"); this.initializeDrawerBar(); this.LoadDrawerToolbar(); LoadCustomMenu(); mainView = new MainView(); mainView.ReloadFileEvent += RestoreState; Drawer drawer1 = this.DrawerView.ViewControl.Drawer; drawer1.ViewOnKeyUp += OnKeyUp; LayerControl = mainView.LayerTreeControl; PropertyControl = mainView.PropertyControl; // 由于属性处理多标签页中,当选中图元或图层时,右侧当前激活的可能不是属性标签,我们这时需要手工去激活一下属性标签页 //PropertyControl.ElementChanged += PropertyControl_ElementChanged; //PropertyControl.LayerChanged += PropertyControl_LayerChanged; DrawerView.DrawerGotFocus += (object drawer, EventArgs ea) => { switchPropertyPanel(); }; StatisticControl = mainView.StaticsControl; panelGraph = new PanelGraph(); panelGraph.BeforeGridding += PanelGraph_BeforeGridding; panelGraph.GriddingStarted += PanelGraph_GriddingStarted; panelGraph.GriddingFinished += PanelGraph_GriddingFinished; panelGraph.ImportStarted += PanelGraph_ImportStarted; panelGraph.ImportFinished += PanelGraph_ImportFinished; this.LayerControl.NodeViewToggleEvent += LayerControl_2dNodeViewToggleEvent; // drawerStatusBar = this.ribbonMain.StatusBar; mainView.ViewerCommandStart += OnCommandStart; mainView.ViewerCommandFinish += OnCommandFinish; mainView.ShowStatisticResult += MainView_ShowStatisticResult; mainView.WaitProgressEvent += DrawerWaitProgress; InitToolTip(); LayerPanel = this.dcpLayer; PropertyPanel = this.dcpProperty; CreateMapPanel = this.dcpCreate; StatisticPanel = dcpStatistic; // 处理调试配置 if (!hasProcessDebug) { if (DrawerConfig.Instance.FindConfigValue("Debug", "Enable", false)) { CrashDumpManager.Enable(); } hasProcessDebug = true; } //Controls.Remove(dcpProperty.Parent); //dockManager1.RemovePanel(dcpProperty); //dockManager1.RemovePanel((DockPanel)dcpProperty.Parent); WindowSync.Down = DrawerConfig.Instance.FindConfigValue("MultiView", "OnSynchronize", false); this.trvLayer.AfterCheck += trvLayer_AfterCheck; } private void trvLayer_AfterCheck(object sender, TreeViewEventArgs e) { // 防止事件循环(修改子节点时会触发新的AfterCheck事件) this.trvLayer.AfterCheck -= trvLayer_AfterCheck; try { // 根据当前节点的选中状态,更新所有子节点 UpdateTrvLayerChildNodes(e.Node, e.Node.Checked); } finally { // 恢复事件处理 this.trvLayer.AfterCheck += trvLayer_AfterCheck; } } private void UpdateTrvLayerChildNodes(TreeNode parentNode, bool isChecked) { foreach (TreeNode childNode in parentNode.Nodes) { // 设置子节点的选中状态 childNode.Checked = isChecked; // 递归处理子节点的子节点 UpdateTrvLayerChildNodes(childNode, isChecked); } } private void switchPropertyPanel() { if (this.InvokeRequired) { this.Invoke(new MethodInvoker(delegate { switchPropertyPanel(); return; })); } else { if (this.PropertyPanel.Visibility == DockVisibility.Visible && this.PropertyPanel.ParentPanel != null && this.PropertyPanel.ParentPanel.ActiveChild != null && (this.PropertyPanel.ParentPanel.ActiveChild == this.dcpCreate || this.PropertyPanel.ParentPanel.ActiveChild.Name == "dcpCreateMap")) { this.PropertyPanel.ParentPanel.Tabbed = true; if (this.PropertyPanel.ParentPanel.ActiveChild != this.PropertyPanel) { this.PropertyPanel.ParentPanel.SuspendLayout(); this.PropertyPanel.ParentPanel.ActiveChild = this.PropertyPanel; this.PropertyPanel.ParentPanel.ResumeLayout(); } } } } //private void PropertyControl_ElementChanged(object sender, EventArgs e) //{ // ActivePropertyPanel(); //} //private void PropertyControl_LayerChanged(object sender, EventArgs e) //{ // // 点击图层时,应该不切换到属性页面: // // ActivePropertyPanel(); //} private void ActivePropertyPanel() { // 先暂时不处理 return; if (!PropertyPanelVisible) { return; } var parentPanel = this.PropertyPanel.ParentPanel; if (parentPanel != null) { var childrens = parentPanel.Controls.OfType().ToList(); if (parentPanel.ActiveChild != PropertyPanel) { this.PropertyPanel.ParentPanel.ActiveChild = this.PropertyPanel; } } } private void PanelGraph_BeforeGridding(object sender, CancelEventArgs e) { if (mainView.ViewControl.Geo.GetElementCount() > 0) { DialogResult result = MessageBox.Show(this, "该操作将覆盖当前图件,是否同意?" , "确认覆盖", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); e.Cancel = (result != DialogResult.Yes); } else { e.Cancel = false; } } private void PanelGraph_ImportFinished(object sender) { DrawerWaitProgress(this, e: new ProgressEventArgs("数据导入中...", 0, false)); } private void PanelGraph_ImportStarted(object sender) { DrawerWaitProgress(this, e: new ProgressEventArgs("数据导入中...", 0, true)); } private void PanelGraph_GriddingStarted(object sender, string filePath) { DrawerWaitProgress(this, e: new ProgressEventArgs("正在成图...", 0, true)); } private void PanelGraph_GriddingFinished(object sender, string filePath) { DrawerWaitProgress(this, e: new ProgressEventArgs("正在成图...", 0, false)); mainView.ClearAll(); mainView.ViewControl.Geo.FileMerge(filePath); mainView.LoadLayerTree(); mainView.ToolViewAll(); mainView.ViewControl.Redraw(); TryDeleteFile(filePath); } private void TryDeleteFile(string filePath) { try { File.Delete(filePath); } catch (IOException ex) { Debug.WriteLine($"删除 {filePath} 失败: {ex.Message}"); } } private Bar barDrawerBase; private Bar barCurveProcess; private Bar barBatchOperate; private BarDockControl barDockControlLeft; private BarDockControl barDockControlTop; private BarDockControl barDockControlBottom; private BarDockControl barDockControlRight; private List drawerBarItems; private List curveProcessItems; private List batchOperateItems; /// /// 2维图层树节点的可视状态切换 /// /// 三维提交到二维更新图片后,再返回三维时。使用此附加层数据 /// status private void LayerControl_2dNodeViewToggleEvent(string additionLayers, LayerStatus status) { var syncNodes = string.Empty; var checkNodes = TreeViewHelper.TraverseTreeView(LayerControl.TreeControl) .Where(n => n.Checked); if (checkNodes.Count() == 0) { // 没有选中的,获取所有可见的 var shownNodes = TreeViewHelper.TraverseTreeView(LayerControl.TreeControl) .Where(n => LayerControl.GetNodeStatus(n) != LayerStatus.NOT_VIEW_NOT_EDIT); syncNodes = string.Join(";", shownNodes.Select(n => $@"二维图层\{n.FullPath}").ToList()); } else { syncNodes = string.Join(";", checkNodes.Select(n => $@"二维图层\{n.FullPath}").ToList()); } if (!string.IsNullOrEmpty(additionLayers)) { // 三维回传图片时,使用附加层数据 syncNodes = additionLayers; } if (VtkEdit != null && !VtkEdit.IsDisposed) { splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormDescription("正在更新3维图层"); Drawer drawer = this.DrawerView.ViewControl.Drawer; IntPtr pMeshData = VtkEdit.GetMainMeshData(); 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); VtkEdit.UpdateMeshBitmap(hBitmap, rx0, ry1, Math.Abs(rx0 - rx1), Math.Abs(ry0 - ry1)); drawer.Geo.DeleteImage(hBitmap); VtkEdit.LayerSelectedStatusNotify3d?.Invoke(syncNodes, status); splashScreenManager1.CloseWaitForm(); } } /// /// 刷新VTK图像贴图. /// public void RefreshVtkImage() { if (VtkEdit != null && !VtkEdit.IsDisposed) { //splashScreenManager1.ShowWaitForm(); //splashScreenManager1.SetWaitFormDescription("正在更新3维图层"); Drawer drawer = this.DrawerView.ViewControl.Drawer; IntPtr pMeshData = VtkEdit.GetMainMeshData(); 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); VtkEdit.UpdateMeshBitmap(hBitmap, rx0, ry1, Math.Abs(rx0 - rx1), Math.Abs(ry0 - ry1)); drawer.Geo.DeleteImage(hBitmap); //splashScreenManager1.CloseWaitForm(); } } /// /// 加载绘图工具条. /// protected void LoadDrawerToolbar() { bool bShowToolbar = true; this.bmDrawer.Items.AddRange(drawerBarItems.ToArray()); foreach (BarItem item in drawerBarItems) { this.barDrawerBase.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(item)); } this.bmDrawer.Items.AddRange(curveProcessItems.ToArray()); foreach (BarItem item in curveProcessItems) { this.barCurveProcess.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(item)); } this.bmDrawer.Items.AddRange(this.batchOperateItems.ToArray()); foreach (BarItem item in batchOperateItems) { this.barBatchOperate.LinksPersistInfo.Add(new DevExpress.XtraBars.LinkPersistInfo(item)); } this.rpgDrawElement.Visible = !bShowToolbar; this.rpgCurveOperate.Visible = !bShowToolbar; //屏蔽工具条上的断层简化按钮 this.bbtnFaultSimplyfy.Enabled = false; this.bbtnFaultSimplyfy.Visibility = DevExpress.XtraBars.BarItemVisibility.OnlyInCustomizing; //// 自动保存工具条布局 //string regKey = "Kev\\XtraBars\\Layouts\\MainLayout"; ////this.bmDrawer.RestoreLayoutFromRegistry(regKey); //this.bmDrawer.RegistryPath = regKey; //this.bmDrawer.AutoSaveInRegistry = true; } /// /// 初始化绘图工具条 /// private void initializeDrawerBar() { drawerBarItems = new List(); drawerBarItems.AddRange(new DevExpress.XtraBars.BarItem[] { this.btnToolDefault, this.btnToolSelect, this.btnDrawCurve, this.btnDrawPoint, this.btnDrawText, this.btiWellGroup, this.btnDrawShape, this.btnDrawNetFrame, this.btnDrawProportion, this.btnDrawCrossPointMain, }); Guid guidDraw = new System.Guid("7dc7b1fa-7f07-4267-8679-9cee0b219d7a"); for (int i = 0; i < drawerBarItems.Count; i++) { drawerBarItems[i].CategoryGuid = guidDraw; } curveProcessItems = new List(); curveProcessItems.AddRange(new DevExpress.XtraBars.BarItem[] { this.btnCurveJoin, this.btnCurveClose, this.btnCurveReverse, this.btnCurveTrim, this.btnCurveBreakMain, this.btnCurveExtend, this.btnCurveNameMove, this.btnCurveProcessMain, this.btnCurveFill, this.MergeCurve, this.bbtnJoinCurves, this.bbtnFaultBroaden, this.bbtnFaultSimplyfy, }); Guid guidProcess = new System.Guid("523e767c-6e94-4304-87af-07516dfbdf4b"); for (int i = 0; i < drawerBarItems.Count; i++) { curveProcessItems[i].CategoryGuid = guidProcess; } // ???需要单独设置一次,原因未知。 this.bbtnFaultBroaden.CategoryGuid = guidProcess; this.batchOperateItems = new List(); batchOperateItems.AddRange(new DevExpress.XtraBars.BarItem[] { this.barButtonGroup6, this.barButtonGroup1, //this.btnOrderTop, //this.btnOrderBottom, //this.btnOrderUp, //this.btnOrderDown, //this.btnAlignMain, //this.btnPropertyZoomIn, //this.btnPropertyZoomOut, //this.SimplifyButton, }); Guid guidOperate = new System.Guid("FF16E14D-D23D-49F7-9C40-454DBC9288F7"); for (int i = 0; i < batchOperateItems.Count; i++) { batchOperateItems[i].CategoryGuid = guidOperate; } int nItemIndent = 2; this.barDockControlTop = new DevExpress.XtraBars.BarDockControl(); this.barDockControlBottom = new DevExpress.XtraBars.BarDockControl(); this.barDockControlLeft = new DevExpress.XtraBars.BarDockControl(); this.barDockControlRight = new DevExpress.XtraBars.BarDockControl(); this.barDrawerBase = new DevExpress.XtraBars.Bar(); this.barDrawerBase.BarItemVertIndent = nItemIndent; this.barDrawerBase.BarItemHorzIndent = nItemIndent; this.barCurveProcess = new DevExpress.XtraBars.Bar(); this.barCurveProcess.BarItemVertIndent = nItemIndent; this.barCurveProcess.BarItemHorzIndent = nItemIndent; this.barBatchOperate = new DevExpress.XtraBars.Bar(); this.barBatchOperate.BarItemVertIndent = nItemIndent; this.barBatchOperate.BarItemHorzIndent = nItemIndent; this.bmDrawer = new DevExpress.XtraBars.BarManager(this.components); this.dockManager1.MenuManager = this.bmDrawer; ((System.ComponentModel.ISupportInitialize)(this.bmDrawer)).BeginInit(); this.bmDrawer.Bars.AddRange(new DevExpress.XtraBars.Bar[] { this.barDrawerBase, this.barCurveProcess, this.barBatchOperate, }); this.bmDrawer.Categories.AddRange(new DevExpress.XtraBars.BarManagerCategory[] { new DevExpress.XtraBars.BarManagerCategory("绘图", new System.Guid("7dc7b1fa-7f07-4267-8679-9cee0b219d7a")), new DevExpress.XtraBars.BarManagerCategory("曲线处理", new System.Guid("523e767c-6e94-4304-87af-07516dfbdf4b")), new DevExpress.XtraBars.BarManagerCategory("批量处理", new System.Guid("FF16E14D-D23D-49F7-9C40-454DBC9288F7")), }); this.bmDrawer.DockControls.Add(this.barDockControlTop); this.bmDrawer.DockControls.Add(this.barDockControlBottom); this.bmDrawer.DockControls.Add(this.barDockControlLeft); this.bmDrawer.DockControls.Add(this.barDockControlRight); this.bmDrawer.DockManager = this.dockManager1; this.bmDrawer.Form = this; //this.btnToolDefault.CategoryGuid = new System.Guid("7dc7b1fa-7f07-4267-8679-9cee0b219d7a"); // barDrawerBase this.barDrawerBase.BarName = "DrawerBase"; this.barDrawerBase.DockCol = 0; this.barDrawerBase.DockRow = 0; this.barDrawerBase.DockStyle = DevExpress.XtraBars.BarDockStyle.Left; this.barDrawerBase.FloatLocation = new System.Drawing.Point(91, 569); this.barDrawerBase.Text = "绘图"; this.barCurveProcess.BarName = "CurveProcess"; this.barCurveProcess.DockCol = 0; this.barCurveProcess.DockRow = 0; this.barCurveProcess.DockStyle = DevExpress.XtraBars.BarDockStyle.Left; this.barCurveProcess.Text = "曲线处理"; this.barBatchOperate.BarName = "BatchOperate"; this.barBatchOperate.DockCol = 0; this.barBatchOperate.DockRow = 0; this.barBatchOperate.DockStyle = DevExpress.XtraBars.BarDockStyle.Left; this.barBatchOperate.Text = "批量处理"; // barDockControlTop this.barDockControlTop.CausesValidation = false; this.barDockControlTop.Dock = System.Windows.Forms.DockStyle.Top; this.barDockControlTop.Location = new System.Drawing.Point(0, 0); this.barDockControlTop.Manager = this.bmDrawer; this.barDockControlTop.Size = new System.Drawing.Size(3656, 0); // barDockControlBottom this.barDockControlBottom.CausesValidation = false; this.barDockControlBottom.Dock = System.Windows.Forms.DockStyle.Bottom; this.barDockControlBottom.Location = new System.Drawing.Point(0, 1085); this.barDockControlBottom.Manager = this.bmDrawer; this.barDockControlBottom.Size = new System.Drawing.Size(3656, 0); // barDockControlLeft this.barDockControlLeft.CausesValidation = false; this.barDockControlLeft.Dock = System.Windows.Forms.DockStyle.Left; this.barDockControlLeft.Location = new System.Drawing.Point(0, 0); this.barDockControlLeft.Manager = this.bmDrawer; this.barDockControlLeft.Size = new System.Drawing.Size(34, 1085); // barDockControlRight this.barDockControlRight.CausesValidation = false; this.barDockControlRight.Dock = System.Windows.Forms.DockStyle.Right; this.barDockControlRight.Location = new System.Drawing.Point(3656, 0); this.barDockControlRight.Manager = this.bmDrawer; this.barDockControlRight.Size = new System.Drawing.Size(0, 1085); this.Controls.Add(this.barDockControlLeft); this.Controls.Add(this.barDockControlRight); this.Controls.Add(this.barDockControlBottom); this.Controls.Add(this.barDockControlTop); ((System.ComponentModel.ISupportInitialize)(this.bmDrawer)).EndInit(); } /// /// 保存界面布局信息到图件 /// public void SaveLayout() { using (MemoryStream ms = new MemoryStream()) { bmDrawer.SaveLayoutToStream(ms); ms.Seek(0, SeekOrigin.Begin); XDocument doc = XDocument.Load(ms); var toolBarElement = doc.Descendants("property") .FirstOrDefault(x => (string)x.Attribute("value") == "BarManager"); if (toolBarElement != null) { toolBarElement.Save(layoutFilePath); } } //bmDrawer.SaveLayoutToXml(Path.Combine(Application.StartupPath, "kevTestLayout.xml")); } /// /// 加载界面布局状态 /// public void LoadLayout() { if (File.Exists(layoutFilePath)) { //bmDrawer.RestoreLayoutFromXml(layoutFilePath); var doc = XDocument.Load(layoutFilePath); var bars = doc.Descendants("property").Where(x => (string)x.Attribute("name") == "Bars").FirstOrDefault(); foreach (var barElement in bars.Elements()) { var eleBarName = barElement.Elements().Where(x => (string)x.Attribute("name") == "BarName").FirstOrDefault(); string barName = eleBarName?.Value; var eleDockStyle = barElement.Elements().Where(x => (string)x.Attribute("name") == "DockStyle").FirstOrDefault(); string bockStyle = eleDockStyle?.Value; var eleDockRow = barElement.Elements().Where(x => (string)x.Attribute("name") == "DockRow").FirstOrDefault(); string dockRow = eleDockRow?.Value; var eleDockCol = barElement.Elements().Where(x => (string)x.Attribute("name") == "DockCol").FirstOrDefault(); string dockCol = eleDockCol?.Value; var eleOffset = barElement.Elements().Where(x => (string)x.Attribute("name") == "Offset").FirstOrDefault(); string offset = eleDockCol?.Value; var bar = this.bmDrawer.Bars.FirstOrDefault(b => b.BarName == barName); if (bar != null && bockStyle != null) { //bar.OptionsBar.MinHeight = 0; //bar.OptionsBar.AutoPopupMode = BarAutoPopupMode.Default; //bar.OptionsBar.DrawBorder = true; //bar.OptionsBar.AllowCollapse = false; //bar.OptionsBar.BarState = BarState.Expanded; //bar.OptionsBar.DrawDragBorder = true; //bar.OptionsBar.DrawSizeGrip = false; //bar.OptionsBar.Hidden = false; //bar.OptionsBar.MultiLine = false; //bar.OptionsBar.RotateWhenVertical = true; //bar.OptionsBar.UseWholeRow = false; //bar.FloatSize = new System.Drawing.Size(0, 0); //bar.FloatLocation = new System.Drawing.Point(0, 0); bar.DockStyle = (BarDockStyle)Enum.Parse(typeof(BarDockStyle), bockStyle); bar.DockRow = int.Parse(dockRow); bar.DockCol = int.Parse(dockCol); bar.Offset = int.Parse(offset); } } Console.WriteLine($"Toolbar docking info loaded from {layoutFilePath}"); } else { Console.WriteLine("Layout file not found."); } using (MemoryStream ms = new MemoryStream()) { bmDrawer.SaveLayoutToStream(ms); } foreach (var bar in this.bmDrawer.Bars.ToArray()) { bar.Visible = !bar.Visible; bar.Visible = !bar.Visible; } } /// /// 将 MainView 恢复成工具栏上设定的状态 /// public void RestoreState() { // 恢复抗锯齿状态,保持和重新加载文件前一致 mainView.EnableMeshPack = bbtnMeshPack.Down; // 这个放大状态难恢复,取消 mainView.SetViewOperation(ViewOperationKind.Invalid); } private void DrawerWaitProgress(object sender, ProgressEventArgs e) { //BeginInvoke(new Action(() => //{ if (e.ProgerssVisible == true) { if (splashScreenManager1 == null) { splashScreenManager1 = new DevExpress.XtraSplashScreen.SplashScreenManager(); } bool bVisible = splashScreenManager1.IsSplashFormVisible; if (bVisible == false) { splashScreenManager1.ShowWaitForm(); splashScreenManager1.SetWaitFormDescription(e.EventInfo); } else { splashScreenManager1.SetWaitFormDescription(e.EventInfo); } } else { if (splashScreenManager1 != null && splashScreenManager1.IsSplashFormVisible == true) { splashScreenManager1.CloseWaitForm(); } } //})); } /// /// 加载自定义菜单 /// private void LoadCustomMenu() { CustomMenu customMenu = new CustomMenu(); customMenu.LoadItems(); if (customMenu.MenuItems.Count > 0) { this.ppmCustom.ClearLinks(); this.rpgCustom.Visible = true; int nIndex = 109; foreach (CustomMenuItem item in customMenu.MenuItems) { DevExpress.XtraBars.BarButtonItem buttonItem = new BarButtonItem(); this.ribbonMain.Items.Add(buttonItem); buttonItem.Tag = item; buttonItem.Id = nIndex++; buttonItem.Caption = item.Caption; //buttonItem.RibbonStyle = RibbonItemStyles.Default; buttonItem.Name = buttonItem.Caption; buttonItem.RibbonStyle = (RibbonItemStyles)item.ImageTextStyles; buttonItem.ItemClick += new DevExpress.XtraBars.ItemClickEventHandler(this.bbtnCustom_ItemClick); // 设置菜单图标 if (!string.IsNullOrEmpty(item.SvgImage)) { string strImageFile = Path.Combine(Application.StartupPath, item.SvgImage); if (File.Exists(strImageFile)) { buttonItem.ImageOptions.SvgImage = SvgImage.FromFile(strImageFile); } if (item.IsPopupItem != true) { buttonItem.RibbonStyle = RibbonItemStyles.SmallWithoutText; } else { this.ppmCustom.DrawMenuSideStrip = DevExpress.Utils.DefaultBoolean.True; } } if (item.IsPopupItem == true) { this.ppmCustom.ItemLinks.Add(buttonItem); } else { this.rpgCustom.ItemLinks.Add(buttonItem); } } this.rpgCustom.Text = customMenu.GroupName; } else { this.rpgCustom.Visible = false; } } /// /// 自定义菜单按钮事件 /// /// 事件按钮 /// 事件参数 private void bbtnCustom_ItemClick(object sender, ItemClickEventArgs e) { CustomMenuItem item = e.Item.Tag as CustomMenuItem; try { Assembly assembly = Assembly.LoadFrom(item.ProgramFile); Type loggerType = assembly.GetType(item.ClassName); IDrawerInteract drawerInteract = (IDrawerInteract)Activator.CreateInstance(loggerType); Form testMain = drawerInteract.UserForm; drawerInteract.DataRequestEvent += (object senderT, DrawerInterface.RequestDataEventArgs ea) => { StringBuilder strb = new StringBuilder(); // 获得选中的数据 if (ea.DataStatus == 0) { List elements = this.mainView?.GetSelectedElements(); if (elements != null) { string strLayer = string.Empty; foreach (SigmaDrawerElement.DrawerElementProperty ele in elements) { if (ele.Layer != strLayer) { strb.AppendLine($"Layer M {ele.Layer}"); strLayer = ele.Layer; } // 如果是请求曲面上的点,从曲面上取出Z值 if (ea.DataType == (int)InterfaceDataType.PointOfSurface) { if (ele.Element.ElementType == DrawElementType.ELEMENT_POINT) { DrawerPoint pt = ele.Element as DrawerPoint; double dZValue = double.NaN; if (mainView.GetGridPointValue(pt.X, pt.Y, ref dZValue) == true) { pt.Z = dZValue; } } } strb.AppendLine(ele.Element.ToDfdString()); } } string strRespons = strb.ToString(); drawerInteract.RequestDataProcess(new DrawerInterface.ResponseDataEventArgs(strRespons)); } //string strQuest = ea.DataInfo; //MessageBox.Show(strQuest); }; drawerInteract.DataResponseEvent += (object senderT, ResponseDataEventArgs ea) => { string strData = ea.DataContent; //MessageBox.Show(strData); this.mainView?.AddBufferData(strData); //MessageBox.Show("Finished"); mainView?.ToolRedraw(); mainView?.LoadLayerTree(); //Xy xyDfd = new Xy(); //xyDfd.DfdReadBuffer(strData); //foreach (DrawerElementBase ele in xyDfd.Elements) //{ // if (ele is DrawerPoint pt) // { // this.mainView?.AddDrawPoint( // ele.LayerName, // new SigmaDrawerElement.DrawerPoint(pt.Name, pt.X, pt.Y, pt.Z, pt.Angle)); // } // else if (ele is DrawerLine line) // { // List lstData = new List(); // foreach (DrawerLineNode node in line.Nodes) // { // lstData.Add(new PointD(node.X, node.Y)); // } // this.mainView?.AddDrawCurve(line.LayerName, line.Name, lstData); // } //} //if (xyDfd.Elements.Count > 0) //{ // mainView?.ToolRedraw(); // mainView?.LoadLayerTree(); //} }; testMain.StartPosition = FormStartPosition.CenterParent; testMain.Show(this); } catch { try { Process.Start(new ProcessStartInfo { FileName = item.ProgramFile, UseShellExecute = true, }); } catch (Exception processEx) { MessageBox.Show( $"无法启动程序: {processEx.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } /// /// 弹出菜单 /// /// 事件按钮 /// 事件参数 private void rpgCustom_CaptionButtonClick(object sender, RibbonPageGroupEventArgs e) { this.ppmCustom.ShowPopup(this.ribbonMain.Manager, MousePosition); } /// /// The MainView_ShowStatisticResult. /// /// The sender. /// The e. private void MainView_ShowStatisticResult(object sender, EventArgs e) { StatisticPanel.Visibility = DockVisibility.Visible; ShowStatisticResult?.Invoke(this, e); } /// /// 图件是否有修改 /// /// 有修改/无 public bool IsModified() { return mainView != null && mainView.IsDocumentModified(); } /// /// 窗体关闭事件. /// /// 当前窗体. /// 事件参数. public void UCDrawEdit_FormClosing(object sender, FormClosingEventArgs e) { bool bModified = false; if (mainView != null && mainView.IsDocumentModified()) { bModified = true; } if (bModified) { switch (DevExpress.XtraEditors.XtraMessageBox.Show( "是否将修改保存到文件?", "关闭", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)) { case DialogResult.Cancel: e.Cancel = true; break; case DialogResult.Yes: e.Cancel = !SaveFile(); break; } if (e.Cancel != true) { mainView.ToolDefault(); } } } /// /// The UCDrawEdit_FormClosed. /// /// The sender. /// The e. private void UCDrawEdit_FormClosed(object sender, FormClosedEventArgs e) { FileClosedEvent?.Invoke(this, e); mainView.ViewerCommandStart -= OnCommandStart; mainView.ViewerCommandFinish -= OnCommandFinish; mainView.ShowStatisticResult -= MainView_ShowStatisticResult; mainView = null; } /// /// The OnCommandFinish. /// /// The toolType. private void OnCommandFinish(DrawToolType toolType) { bool bChecked = false; switch (toolType) { //case DrawToolType.Default: // tsbToolDefault.Checked = bChecked; // break; //case DrawToolType.ViewPan: // tsbPan.Checked = bChecked; // break; case DrawToolType.ViewWindow: //tsbViewWindow.Checked = bChecked; break; case DrawToolType.Select: //tsbSelect.Checked = bChecked; break; case DrawToolType.Point: //tsbPointAdd.Checked = bChecked; break; case DrawToolType.Curve: //tsbCurveAdd.Checked = bChecked; break; case DrawToolType.Proportion: //tsbProportionAdd.Checked = bChecked; break; case DrawToolType.RectangularCSGrid: //rectangularCSGridButton.Checked = bChecked; break; case DrawToolType.Rectangle: //drawRectangleButton.Checked = bChecked; break; case DrawToolType.Ellipse: //sbtnEllipse.Checked = btnEllipse.Checked = bChecked; break; case DrawToolType.Arc: btnDrawArc.Down = bChecked; //SetDrawShapeMainStatus(); break; case DrawToolType.Chord: btnDrawChord.Down = bChecked; //SetDrawShapeMainStatus(); break; case DrawToolType.Pie: btnDrawFan.Down = bChecked; //SetDrawShapeMainStatus(); break; case DrawToolType.Equilateral: btnDrawPentagon.Down = bChecked; //SetDrawShapeMainStatus(); break; case DrawToolType.Text: //drawTextButton.Checked = bChecked; break; case DrawToolType.BreakDirect: barButtonItem3.Down = bChecked; break; case DrawToolType.Break: barButtonItem2.Down = bChecked; break; case DrawToolType.ConnectCurveFilling: btnIntersectRegionFill.Down = bChecked; break; case DrawToolType.SolidLink: btnLinkRegionFill.Down = bChecked; break; case DrawToolType.SolidAuto: btnAutoRegionFill.Down = bChecked; break; case DrawToolType.Delete: //?是不是立刻就执行完的命令 //deleteNormalButton.Checked = bChecked; btnDelete.Down = bChecked; break; case DrawToolType.DeleteIn: btnDeleteInRegion.Down = bChecked; break; case DrawToolType.DeleteOut: btnDeleteOutRegion.Down = bChecked; break; case DrawToolType.DeleteCondition: //btnDeleteMain.Down = bChecked; break; case DrawToolType.TrimCurve: //btnDeleteMain.Down = bChecked; break; case DrawToolType.CloseCurve: //closeCurveButton.Checked = bChecked; break; case DrawToolType.MoveCurveName: //moveCurveNameButton.Checked = bChecked; break; case DrawToolType.LinkCurve: //linkCurveButton.Checked = bChecked; break; case DrawToolType.ReverseCurve: //reverseCurveButton.Checked = bChecked; break; case DrawToolType.NameToZ: //nameToZButton.Checked = bChecked; break; case DrawToolType.RangeToImage: //tsbCopyImageAll.Checked = bChecked; break; case DrawToolType.WindowToImage: //tsbCopyImageWindow.Checked = bChecked; break; case DrawToolType.FractionPoint: btnDrawFractionPoint.Down = bChecked; SetCrossPointMainStatus(); break; case DrawToolType.CrossPoint: btnDrawCrossPoint.Down = bChecked; SetCrossPointMainStatus(); break; case DrawToolType.PointPropertyClear: case DrawToolType.PointPropertySet: case DrawToolType.CurvePropertySet: case DrawToolType.CurvePropertyClear: barButtonItem76.Down = bChecked; break; case DrawToolType.CutOutByPickup: btnCutOutPick.Down = bChecked; break; case DrawToolType.CutOutByRect: btnCutOutRectangle.Down = bChecked; break; case DrawToolType.CutInByPickup: btnCutInPickup.Down = bChecked; break; case DrawToolType.CutInByRect: btnCutInRectangle.Down = bChecked; break; case DrawToolType.CurveNameSetting: btnCurveNameSet.Down = bChecked; break; case DrawToolType.CurveZFromSurface: bbtnSurfaceCurveZ.Down = bChecked; break; case DrawToolType.CurveBroaden: bbtnFaultBroaden.Down = false; break; default: break; } } /// /// 设置当前按钮. /// /// 操作类型. private void OnCommandStart(DrawToolType toolType) { bool bChecked = true; mainView.SetViewOperation(ViewOperationKind.Invalid); switch (toolType) { //case DrawToolType.ViewPan: // tsbPan.Checked = bChecked; // break; case DrawToolType.ViewWindow: btnZoomWindow.Down = bChecked; break; case DrawToolType.Default: btnToolDefault.Down = bChecked; break; case DrawToolType.Select: btnToolSelect.Down = bChecked; break; case DrawToolType.Point: btnDrawPoint.Down = bChecked; break; case DrawToolType.Curve: btnDrawCurve.Down = bChecked; break; case DrawToolType.Proportion: btnDrawProportion.Down = bChecked; break; case DrawToolType.RectangularCSGrid: btnDrawNetFrame.Down = bChecked; break; case DrawToolType.Rectangle: btnDrawRectangle.Down = bChecked; break; case DrawToolType.Ellipse: btnDrawEllipse.Down = bChecked; break; case DrawToolType.Arc: //sbtnEllipse.Checked = btnArc.Checked = bChecked; break; case DrawToolType.Chord: //sbtnEllipse.Checked = btnChord.Checked = bChecked; break; case DrawToolType.Pie: //sbtnEllipse.Checked = btnPie.Checked = bChecked; break; case DrawToolType.Equilateral: //sbtnEllipse.Checked = btnEquilateral.Checked = bChecked; break; case DrawToolType.Text: btnDrawText.Down = bChecked; break; case DrawToolType.BreakDirect: barButtonItem3.Down = bChecked; break; case DrawToolType.Break: barButtonItem2.Down = bChecked; break; case DrawToolType.ConnectCurveFilling: btnIntersectRegionFill.Down = bChecked; break; case DrawToolType.SolidLink: btnLinkRegionFill.Down = bChecked; break; case DrawToolType.SolidAuto: btnAutoRegionFill.Down = bChecked; break; case DrawToolType.Delete: //?是不是立刻就执行完的命令 //deleteNormalButton.Checked = bChecked; break; case DrawToolType.DeleteIn: //deleteInButton.Checked = bChecked; break; case DrawToolType.DeleteOut: //deleteOutButton.Checked = bChecked; break; case DrawToolType.DeleteCondition: //conditionButton.Checked = bChecked; break; case DrawToolType.TrimCurve: btnCurveTrim.Down = bChecked; break; case DrawToolType.CloseCurve: btnCurveClose.Down = bChecked; break; case DrawToolType.MoveCurveName: btnCurveNameMove.Down = bChecked; break; case DrawToolType.LinkCurve: btnCurveJoin.Down = bChecked; break; case DrawToolType.ReverseCurve: btnCurveReverse.Down = bChecked; break; case DrawToolType.NameToZ: //nameToZButton.Checked = bChecked; break; case DrawToolType.RangeToImage: //// tsbCopyImageAll.Checked = bChecked; break; case DrawToolType.WindowToImage: //// tsbCopyImageWindow.Checked = bChecked; break; case DrawToolType.CrossPoint: //crossPointButton.Checked = bChecked; break; case DrawToolType.PointPropertyClear: case DrawToolType.PointPropertySet: case DrawToolType.CurvePropertySet: case DrawToolType.CurvePropertyClear: barButtonItem76.Down = bChecked; break; case DrawToolType.CurveZFromSurface: break; case DrawToolType.CurveBroaden: bbtnFaultBroaden.Down = bChecked; break; default: break; } } /// /// The UCDrawEdit_Load. /// /// The sender. /// The e. private void UCDrawEdit_Load(object sender, EventArgs e) { // 加载子窗体布局 LoadLayout(); //// 自动保存工具条布局 //string regKey = "Kev\\XtraBars\\Layouts\\" + this.Name + ".bmDrawer." + bmDrawer.LayoutVersion; ////this.bmDrawer.RestoreLayoutFromRegistry(regKey); //this.bmDrawer.RegistryPath = regKey; //this.bmDrawer.AutoSaveInRegistry = true; // this.LayerPanel.Visibility = DockVisibility.Hidden; // ppcEditorMeshPack.PopupControl.OwnerEdit.EditValue = "断层测试"; Application.Idle += Application_Idle; } /// /// The SetRibbonStatus. /// /// The enable. public void SetRibbonStatus(bool enable) { RibbonBarItems barItems = ribbonMain.Items; foreach (var item in barItems) { ((BarItem)item).Enabled = enable; } } /// /// Defines the toolCurrent. /// private DrawToolType toolCurrent = DrawToolType.Default; /// /// The Application_Idle. /// /// The sender. /// The e. private void Application_Idle(object sender, EventArgs e) { DrawToolType tool = mainView.ActiveTool; // 打断、切断 var breakTools = new[] { DrawToolType.BreakDirect, DrawToolType.Break }; // 区域填充 var fillTools = new[] { DrawToolType.ConnectCurveFilling, DrawToolType.SolidLink, DrawToolType.SolidAuto }; // 外切 var cutOutTools = new[] { DrawToolType.CutOutByRect, DrawToolType.CutOutByPickup }; // 内切 var cutInTools = new[] { DrawToolType.CutInByRect, DrawToolType.CutInByPickup }; // 曲线名称 var curveNameTools = new[] { DrawToolType.CurveNameSetting, DrawToolType.SetContourName, DrawToolType.NameToZ, DrawToolType.ZToName, DrawToolType.FindCurveOfEmptyName }; // 形状 var drawShapeTools = new[] { DrawToolType.Arc, DrawToolType.Chord, DrawToolType.Pie, DrawToolType.Equilateral, DrawToolType.Rectangle, DrawToolType.Ellipse }; // 十字点 var crossPointTools = new[] { DrawToolType.FractionPoint, DrawToolType.CrossPoint }; // 曲线处理 var curveProcessTools = new[] { DrawToolType.CurveDensityNode, DrawToolType.CurveRedundancy, DrawToolType.CurveSmooth, DrawToolType.ArcToCurve, DrawToolType.CurveZFromSurface }; btnCurveBreakMain.Down = breakTools.Contains(tool); btnCurveFill.Down = fillTools.Contains(tool); btnCutOutMain.Down = cutOutTools.Contains(tool); btnCutInMain.Down = cutInTools.Contains(tool); btnCurveNameMain.Down = curveNameTools.Contains(tool); btnDrawShape.Down = drawShapeTools.Contains(tool); btnDrawCrossPointMain.Down = crossPointTools.Contains(tool); btnCurveProcessMain.Down = curveProcessTools.Contains(tool); toolCurrent = tool; // 移动状态按钮设置 btnZoomPan.Down = (mainView.ViewStatus == ViewOperationKind.ViewPan); btnZoomWindow.Down = (mainView.ViewStatus == ViewOperationKind.ViewWindow); if (mainView.ViewStatus == ViewOperationKind.Invalid) { btnZoomPan.Down = false; btnZoomWindow.Down = false; } } /// /// 打开文件. /// /// 文件路径. /// Z值显示为块. /// 是否成功. public bool OpenFile(string fileFullName, bool setZColor = false) { if (setZColor == true) { mainView.ZColorWidth = ZColorWidth; } EnableMeshPack = DrawerGlobalConfig.Instance.MeshNode.AntiAliasingEnable; if (mainView.OpenFile(fileFullName, setZColor) == false) { return false; } // initDrawerView(mainView); bdtFaultLayer.EditValue = "断层"; InitDrawerView(); return true; } /// /// The CreateNewFile. /// /// The fileName. /// The . public bool CreateNewFile(string fileName) { if (mainView.NewFile(fileName) == false) { return false; } InitDrawerView(); return true; } /// /// 保存文件. /// /// 是否成功. public bool SaveFile() { bool ret = false; if (mainView.IsNewDocument) { ret = SaveAs(); return ret; } if (mainView.SaveFile()) { Text = mainView.Text; return true; } return false; } /// /// 根据名称选中图元,多个名称用逗号分隔 /// /// 名称数据 /// 选中的数量 public int SelectByNames(string nameData) { return mainView.SelectByNames(nameData); } /// /// 根据名称查找并激活图元 /// /// 图元名称 /// 全字匹配 /// 匹配大小写 /// 图元类型 /// 是否只查找可编辑图元 /// 查找结果 public int FindElementByName(string content, bool matchAll = false, bool matchCase = false, int elementType = 0, bool editableOnly = true) { return mainView.FindElementByName(content, matchAll, matchCase, elementType, editableOnly); } /// /// 另存为. /// /// 是否成功. public bool SaveAs() { if (mainView.SaveAs()) { Text = mainView.Text; NewFileSavedEvent?.Invoke(mainView.FileFullName); return true; } return false; } /// /// 导出为图片. /// /// 导出按钮. /// 事件参数. private void btnExportImg_ItemClick(object sender, ItemClickEventArgs e) { // mainView.ReloadFile(); mainView.Export2Image(string.Empty); } private void OnKeyUp(object sender, PreviewKeyDownEventArgs e) { if (e.KeyCode == Keys.S && e.Modifiers == Keys.Control) { SaveFile(); } } /// /// The InitDrawerView. /// public void InitDrawerView() { MainView viewer = mainView; //viewer.ToolMainVisible = false; //viewer.DrawerGotFocus += (object sender, EventArgs ea) => //{ // Trace.WriteLine("openFile:" + ea.ToString()); //}; //viewer.ShowStatisticResult += Viewer_ShowStatisticResult; viewer.ZColorWidth = ZColorWidth; // 设置文档标题栏 Text = viewer.Text; viewer.FileModifyEvent += Viewer_FileModifyEvent; //viewer.GetLengthAngleEvent += GetLengthAngle; Controls.Add(viewer.ViewControl); viewer.ViewControl.BringToFront(); viewer.ViewControl.Dock = DockStyle.Fill; if (LayerPanel != null) { LayerPanel.Text = $"{viewer.CurrentLayer}"; } viewer.LayerSelected += SetCurrentLayer; viewer.ToolStatusChandedEvent += new ToolStatusChangedHandler((cmd, enable) => { if (cmd.Equals("undo")) { btnUndo.Enabled = enable; } else if (cmd.Equals("redo")) { btnRedo.Enabled = enable; } else if (cmd.Equals("undoView")) { btnZoomBack.Enabled = enable; } }); if (StatusBarVisible == true) { viewer.MouseMoveXYEvent += new XyStatusEventHandler((info) => { statusXY.Caption = info; }); } } /// /// The Viewer_FileModifyEvent. /// /// The sender. /// The isModified. private void Viewer_FileModifyEvent(object sender, bool isModified) { Text = mainView.Text; FileModifiedEvent?.Invoke(sender, isModified); } /// /// The SetCurrentLayer. /// /// The send. /// The e. private void SetCurrentLayer(object send, PropertyChangedEventArgs e) { if (LayerPanel != null) { LayerPanel.Text = $" {e.PropertyName}"; } } /// /// 放大. /// /// 事件按钮. /// 事件参数. private void btnZoomIn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolZoomIn(); } /// /// 缩小. /// /// . /// 事件参数. private void btnZoomOut_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolZoomOut(); } /// /// 设置窗口浏览状态. /// /// 事件按钮. /// 事件参数. private void btnZoomWindow_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnZoomWindow.Down == true) { //mainView.ToolDefault(); mainView.SetViewOperation(ViewOperationKind.ViewWindow); } else { mainView.SetViewOperation(ViewOperationKind.Invalid); } } /// /// 设置拖动浏览模式. /// /// 事件按钮. /// 事件参数. private void btnZoomPan_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnZoomPan.Down == true) { mainView.SetViewOperation(ViewOperationKind.ViewPan); } else { mainView.SetViewOperation(ViewOperationKind.Invalid); } } /// /// 显示全图事件. /// /// 事件按钮. /// 事件参数. private void btnZoomAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolViewAll(); } /// /// 回退显示状态. /// /// . /// 事件参数. private void btnZoomBack_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolZoomBack(); } /// /// 图形刷新. /// /// . /// 事件参数. private void btnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolRedraw(); } /// /// 显示十字辅助线. /// /// . /// 事件参数. private void btnShowCross_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolCrossEnable(btnShowCross.Down); } /// /// 撤销操作. /// /// . /// 事件参数. private void btnUndo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolUndo(); } /// /// 重做操作. /// /// . /// 事件参数. private void btnRedo_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolRedo(); } ///// ///// 取消下拉主按钮状态 ///// //private void UncheckEditorMainDrop(Control exceptControl) //{ // for (int i = 0; i < this.lstMutuallyButton.Count; i++) // { // if (exceptControl != null && lstMutuallyButton[i].Equals(exceptControl)) // { // lstMutuallyButton[i].Down = false; // } // } //} /// /// 默认状态. /// /// . /// e private void btnToolDefault_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnToolDefault.Down) { mainView.ToolDefault(); } } /// /// The btnToolDefault_DownChanged. /// /// The sender. /// The e. private void btnToolDefault_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { } /// /// 元素选择状态. /// /// . /// 事件参数. private void btnToolSelect_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnToolSelect.Down) { mainView.ToolSelect(); } } /// /// The btnToolSelect_DownChanged. /// /// The sender. /// The e. private void btnToolSelect_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { } /// /// 绘制线. /// /// . /// 事件参数. private void btnDrawCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawCurve.Down) { mainView.ToolAddCurve(); } } /// /// 绘制点. /// /// . /// 事件参数. private void btnDrawPoint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawPoint.Down) { mainView.ToolAddPoint(); } } /// /// 绘制文字. /// /// . /// 事件参数. private void btnDrawText_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawText.Down) { mainView.ToolText(); } } /// /// 绘制矩形. /// /// . /// 事件参数. private void btnDrawRectangle_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawRectangle.Down) { mainView.ToolRectangle(); } } /// /// 绘制椭圆. /// /// . /// 事件参数. private void btnDrawEllipse_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawEllipse.Down) { mainView.ToolEllipse(); } } /// /// 绘制坐标框. /// /// . /// 事件参数. private void btnDrawNetFrame_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawNetFrame.Down) { mainView.ToolCSGrid(); } } /// /// 绘制比例尺. /// /// . /// 事件参数. private void btnDrawProportion_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDrawProportion.Down) { mainView.ToolAddProportion(); } } /// /// 曲线连接. /// /// . /// 事件参数. private void btnCurveJoin_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveJoin.Down) { mainView.ToolJoinCurve(); } } /// /// 曲线打断. /// /// . /// 事件参数. private void btnCurveBreak_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveBreakMain.Down) { mainView.ToolBreakCurve(); barButtonItem2.Down = true; } else { //btnToolDefault.Down = true; mainView.ToolRestore(); } } /// /// The barButtonItem2_ItemClick. /// /// The sender. /// The e. private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (barButtonItem2.Down) { mainView.ToolBreakCurve(); } } /// /// 曲线切割. /// /// . /// 事件参数. private void btnCurveCut_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (barButtonItem3.Down) { mainView.ToolBreakDirect(); } } /// /// The barButtonItem2_DownChanged. /// /// The sender. /// The e. private void barButtonItem2_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (barButtonItem2.Down || barButtonItem3.Down) { btnCurveBreakMain.Down = true; } else { mainView.ToolRestore(); } } /// /// The barButtonItem3_DownChanged. /// /// The sender. /// The e. private void barButtonItem3_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (barButtonItem2.Down || barButtonItem3.Down) { btnCurveBreakMain.Down = true; } else { mainView.ToolRestore(); } } /// /// 曲线闭合. /// /// . /// 事件参数. private void btnCurveClose_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveClose.Down) { mainView.ToolCloseCurve(); } } /// /// 曲线充填. /// /// . /// 事件参数. private void btnCurveFill_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveFill.Down) { mainView.ToolCurveConnectFill(); btnIntersectRegionFill.Down = true; } else { mainView.ToolRestore(); } } /// /// 曲线延伸. /// /// . /// 事件参数. private void btnCurveExtend_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveExtend.Down) { mainView.ToolExtendCurve(); } } /// /// 裁切. /// /// . /// 事件参数. private void btnCurveTrim_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveTrim.Down) { mainView.ToolTrimCurve(); } } /// /// 曲线反向. /// /// . /// 事件参数. private void btnCurveReverse_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveReverse.Down) { mainView.ToolReverseCurve(); } } /// /// 曲线内部名称移动. /// /// . /// 事件参数. private void btnCurveNameMove_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveNameMove.Down) { mainView.ToolMoveCurveName(); } } /// /// 最上显示. /// /// . /// 事件参数. private void btnOrderTop_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolOrderTop(); } /// /// 最下显示. /// /// . /// 事件参数. private void btnOrderBottom_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolOrderBottom(); } /// /// 上移一层显示. /// /// . /// 事件参数. private void btnOrderUp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolOrderUp(); } /// /// 下移一层显示. /// /// . /// 事件参数. private void btnOrderDown_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolOrderDown(); } /// /// 属性放大. /// /// . /// 事件参数. private void btnPropertyZoomIn_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.PropertyZoomIn(); } /// /// 属性缩小. /// /// . /// 事件参数. private void btnPropertyZoomOut_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.PropertyZoomOut(); } /// /// 粘贴. /// /// . /// 事件参数. private void btnPaste_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolPaste(); } /// /// 复制. /// /// . /// 事件参数. private void btnCopy_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolCopy(); } /// /// 剪切. /// /// . /// 事件参数. private void btnCut_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolCut(); } /// /// 删除. /// /// 删除主按钮. /// 事件参数. private void btnDeleteMain_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { btnDelete.Down = btnDeleteMain.Down; if (btnDeleteMain.Down) { mainView.ToolDeleteNormal(); } else { mainView.RestoreToolDefault(); } } /// /// 删除. /// /// . /// 事件参数. private void btnDelete_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { btnDeleteMain.Down = btnDelete.Down; if (btnDelete.Down) { mainView.ToolDeleteNormal(); } else { mainView.ToolRestore(); } } /// /// The btnDelete_DownChanged. /// /// The sender. /// The e. private void btnDelete_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDelete.Down || btnDeleteOutRegion.Down || btnDeleteInRegion.Down) { btnDeleteMain.Down = true; } else { btnDeleteMain.Down = false; } } /// /// 删除区域外图形. /// /// . /// 事件参数. private void btnDeleteOutRegion_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { btnDeleteMain.Down = btnDeleteOutRegion.Down; if (btnDeleteOutRegion.Down) { mainView.ToolDeleteOut(); } else { mainView.ToolRestore(); } } /// /// The btnDeleteOutRegion_DownChanged. /// /// The sender. /// The e. private void btnDeleteOutRegion_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDelete.Down || btnDeleteOutRegion.Down || btnDeleteInRegion.Down) { btnDeleteMain.Down = true; } else { btnDeleteMain.Down = false; } } /// /// 删除区域内部. /// /// . /// 事件参数. private void btnDeleteInRegion_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { btnDeleteMain.Down = btnDeleteInRegion.Down; if (btnDeleteInRegion.Down) { mainView.ToolDeleteIn(); } else { mainView.ToolRestore(); } } /// /// The btnDeleteInRegion_DownChanged. /// /// The sender. /// The e. private void btnDeleteInRegion_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnDelete.Down || btnDeleteOutRegion.Down || btnDeleteInRegion.Down) { btnDeleteMain.Down = true; } else { btnDeleteMain.Down = false; } } /// /// 查找. /// /// . /// 事件参数. private void btnSearchMain_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolFind(false); } /// /// 查找. /// /// . /// 事件参数. private void btnFind_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolFind(false); } /// /// 替换. /// /// . /// 事件参数. private void btnReplace_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolFind(true); } /// /// 筛选. /// /// . /// 事件参数. private void btnFilter_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolFilter(); } /// /// 全选. /// /// . /// 事件参数. private void btnSelectAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSelectAll(); } /// /// 选择所有线. /// /// . /// 事件参数. private void btnSelectAllCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSelectAllCurve(); } /// /// 选择所有点. /// /// . /// 事件参数. private void btnSelectAllPoint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSelectAllPoint(); } /// /// 清除点个性. /// /// . /// 事件参数. private void btnClearPointProperty_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolClearPointProperty(); } /// /// 设置点类个性. /// /// . /// 事件参数. private void btnSetPointPropert_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSetPointProperty(); } /// /// 清除线类个性. /// /// . /// 事件参数. private void btnClearCurveProperty_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolClearCurveProperty(); } /// /// 设置线个性. /// /// . /// 事件参数. private void btnSetCurveProperty_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSetCurveProperty(); } /// /// 左对齐. /// /// . /// 事件参数. private void btnAlignLeft_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolAlignLeft(); } /// /// 右对齐. /// /// . /// 事件参数. private void btnAlignRight_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolAlignRight(); } /// /// 顶对齐. /// /// . /// 事件参数. private void btnAlignTop_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolAlignTop(); } /// /// 底对齐. /// /// . /// 事件参数. private void btnAlignBottom_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolAlignBottom(); } /// /// 垂直居中. /// /// . /// 事件参数. private void btnAlignMiddle_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolAlignCenterV(); } /// /// 水平居中. /// /// . /// 事件参数. private void btnAlignCenter_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolAlignCenterH(); } /// /// 水平镜像. /// /// . /// 事件参数. private void btnMirrorH_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolMirrorH(); } /// /// 垂直镜像. /// /// . /// 事件参数. private void btnMirrorV_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolMirrorV(); } /// /// 坐标运算. /// /// . /// 事件参数. private void btnCoordinateCalculate_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolCoordinateChange(); } /// /// 坐标交换. /// /// . /// 事件参数. private void btnCoordinateExchange_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolCoordinateExchange(); } /// /// 数据导入. /// /// . /// 事件参数. private void btnImport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ImportDataFile(); } /// /// 数据导出. /// /// . /// 事件参数. private void btnExport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ExportDataFile(); } /// /// 矩形区域截图. /// /// . /// 事件参数. private void btnImageCutRectangle_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolImageCutRange(); } /// /// 自定义截图 /// /// 按钮 /// 事件参数 private void btnImageCutEx_ItemClick(object sender, ItemClickEventArgs e) { mainView.ToolImageCutRangeEx(); } /// /// 截图所有图元. /// /// . /// 事件参数. private void btnImageCutAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolImageCutAll(); } /// /// 截图窗口区域. /// /// . /// 事件参数. private void btnImageCutWindow_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolImageCutWindow(); } /// /// 生成文件保存路径. /// /// . /// 事件参数. private string GetSaveFileName(string extName) { var sfd = new SaveFileDialog(); sfd.Filter = extName; sfd.FileName = "新建文件"; sfd.AddExtension = true; sfd.RestoreDirectory = true; if (sfd.ShowDialog(this) != DialogResult.OK) { return string.Empty; } return sfd.FileName.ToString(); } /// /// 保存为符号. /// /// . /// 事件参数. private void btnTake2Symbol_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.FileSaveToMark(); } /// /// 保存为Xyz. /// /// . /// 事件参数. private void btnTake2Xyz_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "XYZ File (*.xyz)|*.xyz|All Files(*.*)|*.*||"; string filePath = GetSaveFileName(extName); if (string.IsNullOrEmpty(filePath)) { return; } mainView.FileSaveToXyz(filePath); } /// /// 保存曲线. /// /// . /// v. private void btnTakeCurves_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); if (string.IsNullOrEmpty(filePath)) { return; } mainView.FileSaveCurve(filePath); } /// /// 保存显示的内容. /// /// . /// 事件参数. private void btnTakeDisplay_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); mainView.FileSaveView(filePath); } /// /// 保存充填的内容. /// /// . /// 事件参数. private void btnTakeFilled_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); if (!string.IsNullOrEmpty(filePath)) { mainView.FileSaveSolid(filePath); } } /// /// 保存点数据. /// /// . /// 事件参数. private void btnTakePoints_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); if (string.IsNullOrEmpty(filePath)) { return; } mainView.FileSavePoint(filePath); } /// /// 保存净曲线. /// /// . /// 事件参数. private void btnTakePurerCurves_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); if (string.IsNullOrEmpty(filePath)) { return; } mainView.FileSaveCleanCurve(filePath); } /// /// 保存选中的内容. /// /// . /// 事件参数. private void btnTakeSelected_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); mainView.FileSaveSelect(filePath); } /// /// 保存文字. /// /// . /// 事件参数. private void btnTakeTexts_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { string extName = "KE Files (*.kev)|*.kev|All file(*.*)|*.*||"; string filePath = GetSaveFileName(extName); if (string.IsNullOrEmpty(filePath)) { return; } mainView.FileSaveText(filePath); } /// /// 合并文件. /// /// . /// 事件参数. private void btnMergeFile_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //var openFile = new OpenFileDialog(); //openFile.Title = "合并文件"; //openFile.Filter = "*.kev|*.kev|*.pcg|*.pcg|*.*|*.*"; //openFile.FilterIndex = 0; //openFile.Multiselect = false; //if (openFile.ShowDialog() == DialogResult.OK) //{ // mainView.FileMerge(openFile.FileName); // mainView.ToolRedraw(); //} } /// /// 平面图. /// /// . /// 事件参数. private void bbtnPlaneFigure_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var openFile = new OpenFileDialog(); openFile.Title = "合并文件"; openFile.Filter = "*.kev|*.kev|*.pcg|*.pcg|*.*|*.*"; openFile.FilterIndex = 0; openFile.Multiselect = false; if (openFile.ShowDialog() == DialogResult.OK) { mainView.FileMerge(openFile.FileName); mainView.ToolRedraw(); } } /// /// 单井图. /// /// . /// 事件参数. private void bbtnWellFigure_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var openFile = new OpenFileDialog(); openFile.Title = "合并单井图文件"; openFile.Filter = "*.pcg|*.pcg"; openFile.FilterIndex = 0; openFile.Multiselect = false; if (openFile.ShowDialog() == DialogResult.OK) { mainView.WellPoleFileMerge(openFile.FileName); mainView.ToolRedraw(); } } /// /// 剖面图. /// /// . /// 事件参数. private void bbtnSectionFigure_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { var openFile = new OpenFileDialog(); openFile.Title = "合并剖面图文件"; openFile.Filter = "*.pcg|*.pcg"; openFile.FilterIndex = 0; openFile.Multiselect = false; if (openFile.ShowDialog() == DialogResult.OK) { mainView.MultiWellSectionFileMerge(openFile.FileName); mainView.ToolRedraw(); } } /// /// 设置投影参数. /// /// . /// 事件参数. private void btnProjection_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSetProjection(); } /// /// 转换投影. /// /// . /// 事件参数. private void btnProjectionChange_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolProjectionChange(); } /// /// 打印. /// /// . /// 事件参数. private void btnPrint_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.PrintDraw(); } /// /// 保存. /// /// . /// 事件参数. private void btnSaveMain_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (!SaveFile()) { MessageBox.Show("保存文件失败"); } } /// /// 另存为. /// /// . /// 事件参数. private void btnSaveAs_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SaveAs(); } /// /// 背景网格. /// /// . /// 事件参数. private void btnBKGrid_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.DisplayBackgroundGrid(btnBKGrid.Down); } /// /// 设置背景网格尺寸. /// /// . /// 事件参数. private void btnBkGridSize_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolSetBKGridSize(); } /// /// 高亮提示. /// /// . /// 事件参数. private void btnHighLight_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ToolEnableHighLight(btnHighLight.Down); } /// /// 绘制弧. /// /// . /// 事件参数. private void btnDrawArc_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //SetDrawShapeMainStatus(); if (btnDrawArc.Down) { mainView.ToolAcr(); } } /// /// 画弓形. /// /// . /// 事件参数. private void btnDrawChord_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //SetDrawShapeMainStatus(); if (btnDrawChord.Down) { mainView.ToolChord(); } } /// /// 画扇形. /// /// . /// 事件参数. private void btnDrawFan_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //SetDrawShapeMainStatus(); if (btnDrawFan.Down) { mainView.ToolPie(); } } /// /// 画五边形. /// /// . /// 事件参数. private void btnDrawPentagon_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //SetDrawShapeMainStatus(); if (btnDrawPentagon.Down) { mainView.ToolEquilateral(); // btnDrawShape.ImageOptions.Image = } } /// /// The btnDrawShape_DownChanged. /// /// The sender. /// The e. private void btnDrawShape_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { } /// /// 分数点. /// /// . /// 事件参数 private void btnDrawFractionPoint_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SetCrossPointMainStatus(); if (btnDrawFractionPoint.Down) { mainView.ToolDrawFractionPoint(); } } /// /// 十字点. /// /// . /// 事件参数. private void btnDrawCrossPoint_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SetCrossPointMainStatus(); if (btnDrawCrossPoint.Down) { mainView.ToolAddCrossPoint(); } } /// /// The btnDrawCrossPointMain_DownChanged. /// /// The sender. /// The e. private void btnDrawCrossPointMain_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SetCrossPointMainStatus(); } /// /// 设置十字点主按钮的选中状态. /// private void SetCrossPointMainStatus() { if (btnDrawCrossPoint.Down || btnDrawFractionPoint.Down) { btnDrawCrossPointMain.Down = true; } else { btnDrawCrossPointMain.Down = false; } } /// /// 外切矩形式. /// /// . /// 事件参数. private void btnCutOutRectangle_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCutOutRectangle.Down) { btnCutOutMain.Down = true; mainView.ToolCutOutByRect(); } } /// /// 外切拾取式. /// /// . /// 事件参数. private void btnCutOutPick_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCutOutPick.Down) { btnCutOutMain.Down = true; mainView.ToolCutOutByPickup(); } } /// /// 外切主菜单. /// /// . /// 事件参数. private void btnCutOutMain_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCutOutRectangle.Down || btnCutOutPick.Down) { btnCutOutMain.Down = true; } else { btnCutOutMain.Down = false; } } /// /// 内切拾取式. /// /// . /// 事件参数. private void btnCutInPickup_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCutInPickup.Down) { btnCutInMain.Down = true; mainView.ToolCutInByPickup(); } } /// /// 内切矩形式. /// /// . /// 事件参数. private void btnCutInRectangle_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCutInRectangle.Down) { btnCutInMain.Down = true; mainView.ToolCutInByRect(); } } /// /// 内切主按钮. /// /// . /// 事件参数. private void btnCutInMain_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCutInPickup.Down || btnCutInRectangle.Down) { btnCutInMain.Down = true; } else { btnCutInMain.Down = false; } } /// /// 曲线处理主参数. /// /// The source of the event. /// The instance containing the event data. private void btnCurveProcessMain_DownChanged(object sender, ItemClickEventArgs e) { if (bbtnCurveSmooth.Down || bbtnShape2Curve.Down || bbtnSurfaceCurveZ.Down) { if (this.btnCurveNameMain.Down != true) { this.btnCurveNameMain.Down = true; } } else { if (this.btnCurveNameMain.Down != false) { this.btnCurveNameMain.Down = false; } } } /// /// 曲线名称主按钮. /// /// . /// 事件参数. private void btnCurveNameMain_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveNameSet.Down || btnCurveName2Z.Down || btnCurveNameFromZ.Down || btnCurveNameFindEmpty.Down || btnContourNameSet.Down) { btnCurveNameMain.Down = true; } else { btnCurveNameMain.Down = false; } } /// /// 设置曲线名称. /// /// . /// 事件参数. private void btnCurveNameSet_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveNameSet.Down) { btnCurveNameMain.Down = true; mainView.ToolCurveNameSet(); } } /// /// 等值线名称设置. /// /// . /// 事件参数. private void btnContourNameSet_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnContourNameSet.Down) { btnCurveNameMain.Down = true; mainView.ToolSetContourName(); } } /// /// The btnCurveName2Z_DownChanged. /// /// The sender. /// The e. private void btnCurveName2Z_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveName2Z.Down) { btnCurveNameMain.Down = true; mainView.ToolCurveName2z(); } } /// /// The btnCurveNameFromZ_DownChanged. /// /// The sender. /// The e. private void btnCurveNameFromZ_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveNameFromZ.Down) { btnCurveNameMain.Down = true; mainView.ToolCurveZ2Name(); } } /// /// The btnCurveNameFindEmpty_DownChanged. /// /// The sender. /// The e. private void btnCurveNameFindEmpty_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (btnCurveNameFindEmpty.Down) { btnCurveNameMain.Down = true; mainView.ToolCurveFindEmptyName(); } } /// /// 网格生成等值线. /// /// . /// 事件参数. private void btnGridGenerateContour_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.GridGeneraterContour(); } /// /// 网格平滑. /// /// . /// 参数 private void btnGridSmooth_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolGridSmooth(); } /// /// 设置Z值. /// /// . /// e private void btnGridSetZValue_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolGridSetZValue(); } /// /// 等值线生成网格. /// /// . /// 事件参数. private void btnContourGenerateGrid_ItemClickAsync(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //mainView?.ToolGridStatics(); //mainView?.CreateMeshByDataAsync(); ppmGenerateGrid.ShowPopup(Control.MousePosition); } /// /// 数据生成网格. /// /// . /// 事件参数. private void bbtnDataGenerateGrid_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.CreateMeshByDataAsync(); } /// /// 图片生成网格. /// /// . /// 事件参数. private void bbtnImageGenerateGrid_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.CreateMeshByImageAsync(); } /// /// 网格体积计算. /// /// . /// 事件参数. private void btnGridVolume_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolGridVolumeCalculate(); } /// /// 是否消除网格锯齿. /// /// . /// 参数 private void ckbGridAnti_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolGridEnablePack(bbtnMeshPack.Down); } /// /// 曲线延伸. /// /// 延伸按钮. /// 事件参数. private void btnCurveExtendSetting_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolCurveExtendSetting(); } /// /// 四点校正. /// /// 事件按钮. /// 事件参数. private void btnCoordinateAdjust4Point_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolCalibration4(); } /// /// 两点校正. /// /// 事件按钮. /// 事件参数. private void btnCoordinateAdjust2Point_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolCalibration2(); } /// /// 重新处理网格锯齿. /// /// . /// 事件参数. private void bbtnMeshPackForce_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView.ForceMeshPack = true; bbtnMeshPack.Down = true; mainView?.ToolGridEnablePack(bbtnMeshPack.Down); mainView.ForceMeshPack = false; } /// /// 区域连通点击事件. /// /// The sender. /// The e. private void bbtnPolygonConnect_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolCurveConnect(); } /// /// 曲线加密. /// /// 事件按钮. /// 事件参数. private void bbtnCurveNodeInsert_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolCurveDensity(); } /// /// 由曲面设置曲线节点Z值. /// /// The source of the event. /// The instance containing the event data. private void bbtnSurfaceCurveZ_DownChanged(object sender, ItemClickEventArgs e) { mainView?.ToolCurveZFromSuface(); } /// /// 取消去冗余. /// /// 事件按钮. /// 事件参数. private void bbtnCurveNodeRedundant_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolCurveRedundancy(); } /// /// 曲线光滑. /// /// 事件按钮. /// 事件参数. private void bbtnCurveSmooth_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolCurveSmooth(); } /// /// 形状转曲线. /// /// 事件按钮. /// 事件参数. private void bbtnShape2Curve_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolShape2Curve(); } /// /// The ppcEditorMeshPack_Closed. /// /// The sender. /// The e. private void ppcEditorMeshPack_Closed(object sender, DevExpress.XtraEditors.Controls.ClosedEventArgs e) { } /// /// The ppcEditorMeshPack_QueryDisplayText. /// /// The sender. /// The e. private void ppcEditorMeshPack_QueryDisplayText(object sender, DevExpress.XtraEditors.Controls.QueryDisplayTextEventArgs e) { } /// /// The ppc3dLayerEdit_QueryDisplayText. /// /// The sender. /// The e. private void ppc3dLayerEdit_QueryDisplayText(object sender, DevExpress.XtraEditors.Controls.QueryDisplayTextEventArgs e) { } /// /// The ppcEditorMeshPack_QueryResultValue. /// /// The sender. /// The e. private void ppcEditorMeshPack_QueryResultValue(object sender, DevExpress.XtraEditors.Controls.QueryResultValueEventArgs e) { if (e.Value == null || !e.Value.Equals(layerPopNode)) { e.Value = layerPopNode; } } private void ppc3dLayerEdit_QueryResultValue(object sender, DevExpress.XtraEditors.Controls.QueryResultValueEventArgs e) { if (e.Value == null || !e.Value.Equals(layerPopNode)) { e.Value = layerPopNode; } } /// /// 断层图层弹出. /// /// 事件按钮. /// 事件参数. private void ppcEditorMeshPack_Popup(object sender, EventArgs e) { TreeNode tnRoot = LayerControl.GetLayerNodes(); trvLayer.CheckBoxes = (popupTreeType == "3维显示挖空图层" || popupTreeType == "3维显示边界范围" || popupTreeType == "3维显示井图层"); trvLayer.Nodes.Clear(); trvLayer.Nodes.Add(tnRoot); trvLayer.Nodes[0].Expand(); var nodes = TreeViewHelper.TraverseTreeNode(trvLayer.Nodes[0]); trvLayer.Nodes[0].Checked = false; nodes.ForEach(n => n.Checked = false); // 取消选中 if (popupTreeType == "网格编辑控制点图层" || popupTreeType == "网格编辑断层图层" || popupTreeType == "网格编辑等值线图层" || popupTreeType == "3维显示挖空图层" || popupTreeType == "3维显示边界范围" || popupTreeType == "3维显示井图层") { trvLayer.Nodes.Insert(0, "<无>"); } var header = "图层"; var layerPopNodes = new List(); if (trvLayer.CheckBoxes) { layerPopNodes = layerPopNode.Split(';').Where(n => !string.IsNullOrEmpty(n)).ToList(); } if (layerPopNodes.Count == 0) { layerPopNodes.Add(layerPopNode); } foreach (var currPopNode in layerPopNodes) { if (currPopNode == header) { continue; } string strCurrentNodePath = $"{header}\\{currPopNode}"; TreeNode tnFind = FindNodeByValue(tnRoot, strCurrentNodePath); if (tnFind != null) { Expand2Node(tnFind); if (trvLayer.CheckBoxes) { tnFind.Checked = true; continue; } else { trvLayer.SelectedNode = tnFind; break; } } } } /// /// 获取指定value值的节点. /// /// 指定节点. /// value值. /// 找到的树节点. private TreeNode FindNodeByValue(TreeNode tnParent, string strValues) { if (tnParent == null) { return null; } if (tnParent.FullPath == strValues) { return tnParent; } TreeNode tnRet = null; foreach (TreeNode tn in tnParent.Nodes) { tnRet = FindNodeByValue(tn, strValues); if (tnRet != null) { break; } } return tnRet; } /// /// The Expand2Node. /// /// The treeNode. private void Expand2Node(TreeNode treeNode) { TreeNode tnParent = treeNode.Parent; if (tnParent != null) { tnParent.Expand(); Expand2Node(tnParent); } else { return; } } /// /// The InitToolTip. /// private void InitToolTip() { } /// /// 边界设置窗口显示事件. /// /// 事件按钮. /// 事件参数. private void bdtBorderLayer_ShowingEditor(object sender, DevExpress.XtraBars.ItemCancelEventArgs e) { layerPopNode = mainView.BorderLayer; } /// /// 设置网格的边界图层. /// /// The sender. /// The e. private void bdtBorderLayer_EditValueChanged(object sender, EventArgs e) { if (!layerPopNode.Equals(mainView.BorderLayer)) { mainView.BorderLayer = layerPopNode; bbtnMeshPackForce_ItemClick(null, null); } } private void btiWellLayer_EditValueChanged(object sender, EventArgs e) { } private void btiDigEmptyLayer_EditValueChanged(object sender, EventArgs e) { } private void btiBorderControlLayer_EditValueChanged(object sender, EventArgs e) { } /// /// 断层设置窗口显示. /// /// 事件按钮. /// 事件参数. private void bdtFaultLayer_ShowingEditor(object sender, DevExpress.XtraBars.ItemCancelEventArgs e) { layerPopNode = mainView.FaultLayer; } /// /// The bdtFaultLayer_EditValueChanged. /// /// The sender. /// The e. private void bdtFaultLayer_EditValueChanged(object sender, EventArgs e) { if (!layerPopNode.Equals(mainView.FaultLayer)) { mainView.FaultLayer = layerPopNode; bbtnMeshPackForce_ItemClick(null, null); } } /// /// btis the grid contour layer_ edit value changed. /// /// The sender. /// The e. private void btiGridContourLayer_EditValueChanged(object sender, EventArgs e) { //string strContourLayer = $"{btiGridContourLayer.EditValue}"; //if (!string.IsNullOrEmpty(strContourLayer)) //{ // GridContourLayer = strContourLayer; //} } /// /// bdis the grid fault layer_ edit value changed. /// /// The sender. /// The e. private void bdiGridFaultLayer_EditValueChanged(object sender, EventArgs e) { //string strLayer = $"{bdiGridFaultLayer.EditValue}"; //if (!string.IsNullOrEmpty(strLayer)) //{ // GridFaultLayer = strLayer; //} } /// /// 图层选择下拉框弹出前事件. /// /// The sender. /// The e. private void ppmGridEditorLayer_BeforePopup(object sender, CancelEventArgs e) { btiGridContourLayer.EditValue = GridContourLayer; bdiGridFaultLayer.EditValue = GridFaultLayer; btiGridControlPointLayer.EditValue = ControlPointLayer; btnOtherLineLayer.EditValue = OtherLineLayer; } private void btiGridContourLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "网格编辑等值线图层"; layerPopNode = this.GridContourLayer; ppcEditorMeshPack.PopupControl = ppcMeshPack; } private void bdiGridFaultLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "网格编辑断层图层"; layerPopNode = this.GridFaultLayer; ppcEditorMeshPack.PopupControl = ppcMeshPack; } /// /// 控制点图形选择框显示事件. /// /// The sender. /// The e. private void btiGridControlPointLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "网格编辑控制点图层"; layerPopNode = this.ControlPointLayer; ppcEditorMeshPack.PopupControl = ppcMeshPack; } /// /// 其它线弹出编辑框事件 /// /// The sender. /// The e. private void btnOtherLineLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "网格编辑附加线图层"; layerPopNode = this.OtherLineLayer; ppcEditorMeshPack.PopupControl = ppcMeshPack; } /// /// btis the dig empty layer_ showing editor. /// /// The sender. /// The e. private void btiDigEmptyLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "3维显示挖空图层"; layerPopNode = this.HoleLayer; ppc3dLayerEdit.PopupControl = ppcMeshPack; } private void btiBorderControlLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "3维显示边界范围"; layerPopNode = this.BorderControlLayer; ppc3dLayerEdit.PopupControl = ppcMeshPack; } private void btiWellLayer_ShowingEditor(object sender, ItemCancelEventArgs e) { popupTreeType = "3维显示井图层"; layerPopNode = this.WellLayer; ppc3dLayerEdit.PopupControl = ppcMeshPack; } /// /// 关闭网格补丁图层. /// private void ClosePopupMeshPack() { if (ppcMeshPack.OwnerEdit != null) { ppcMeshPack.OwnerEdit.ClosePopup(); } } /// /// The trvLayer_NodeMouseDoubleClick. /// /// The sender. /// The e. private void trvLayer_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { string strPath = e.Node.FullPath; this.SetPopupData(strPath); } private void btnPopOK_Click(object sender, EventArgs e) { var checkedItems = TreeViewHelper.TraverseTreeView(trvLayer).Where(n => n.Checked).Select(n => n.FullPath).ToList(); if (trvLayer.SelectedNode == null && checkedItems.Count == 0) { ClosePopupMeshPack(); return; } string strPath = string.Empty; if (popupTreeType == "3维显示挖空图层" || popupTreeType == "3维显示边界范围" || popupTreeType == "3维显示井图层") { strPath = string.Join(";", checkedItems); } else { strPath = trvLayer.SelectedNode.FullPath; } this.SetPopupData(strPath); } private void btnPopCancel_Click(object sender, EventArgs e) { ClosePopupMeshPack(); } private void SetPopupData(string strPath) { if (strPath == "图层") { return; } if (this.popupTreeType == "网格编辑等值线图层") { string strLayer = strPath.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { GridContourLayer = strLayer; } if (strPath == "<无>") { GridContourLayer = string.Empty; } } else if (this.popupTreeType == "网格编辑断层图层") { string strLayer = strPath.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { GridFaultLayer = strLayer; } if (strPath == "<无>") { GridFaultLayer = string.Empty; } } else if (this.popupTreeType == "网格编辑控制点图层") { string strLayer = strPath.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { this.ControlPointLayer = strLayer; } if (strPath == "<无>") { ControlPointLayer = string.Empty; } } else if (this.popupTreeType == "网格编辑附加线图层") { string strLayer = strPath.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { this.OtherLineLayer = strLayer; } if (strPath == "<无>") { this.OtherLineLayer = string.Empty; } } else if (this.popupTreeType == "3维显示挖空图层") { if (strPath == "<无>") { HoleLayer = string.Empty; mainView.FaultLayer3D = string.Empty; } else { var strPaths = strPath.Split(';'); var digEmpthLayerList = new List(); foreach (var strP in strPaths) { if (string.IsNullOrEmpty(strP)) { continue; } string strLayer = strP.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { digEmpthLayerList.Add(strLayer); } } HoleLayer = string.Join(";", digEmpthLayerList); mainView.FaultLayer3D = HoleLayer; } } else if (this.popupTreeType == "3维显示边界范围") { if (strPath == "<无>") { BorderControlLayer = string.Empty; mainView.BorderLayer3D = string.Empty; } else { var strPaths = strPath.Split(';'); var borderControlLayerList = new List(); foreach (var strP in strPaths) { if (string.IsNullOrEmpty(strP)) { continue; } string strLayer = strP.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { borderControlLayerList.Add(strLayer); } } BorderControlLayer = string.Join(";", borderControlLayerList); mainView.BorderLayer3D = BorderControlLayer; } } else if (this.popupTreeType == "3维显示井图层") { if (strPath == "<无>") { WellLayer = string.Empty; mainView.WellLayer3D = string.Empty; } else { var strPaths = strPath.Split(';'); var wellLayerList = new List(); foreach (var strP in strPaths) { if (string.IsNullOrEmpty(strP)) { continue; } string strLayer = strP.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { wellLayerList.Add(strLayer); } } WellLayer = string.Join(";", wellLayerList); mainView.WellLayer3D = WellLayer; } } if (!strPath.Equals(layerPopNode)) { if (strPath.Contains(";")) { var strPaths = strPath.Split(';'); var digEmpthLayerList = new List(); foreach (var strP in strPaths) { string strLayer = strP.Remove(0, 3); if (!string.IsNullOrEmpty(strLayer) && strPath != "<无>") { digEmpthLayerList.Add(strLayer); } } layerPopNode = string.Join(";", digEmpthLayerList); } else { layerPopNode = strPath.Remove(0, 3); } ClosePopupMeshPack(); } } /// /// 反走样设置. /// /// 事件按钮. /// 事件参数. private void btnAntiAlias_DownChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolAntiAlias(btnAntiAlias.Down); } /// /// The btnDisplayScale_ItemClick. /// /// The sender. /// The e. private void btnDisplayScale_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { mainView?.ToolDisplayScale(); } private void DelaunayButton_ItemClick(object sender, ItemClickEventArgs e) { //mainView?.ToolDelaunay(); } /// /// 简单三角剖分. /// /// The sender. /// The e. private void btnDelaunaySimple_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolDelaunay(); } /// /// 带约束的三角剖分. /// /// The sender. /// The e. private void btnDelaunayConstraint_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolDelaunayConstraint(); } /// /// 龟背图生成事件. /// /// The source of the event. /// The instance containing the event data. private void bbtnVoronoi_ItemClick(object sender, ItemClickEventArgs e) { //mainView?.ToolVoronoi(); } private void bbtnVoronoi1_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolVoronoi(); } private void bbtnVoronoi2_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolVoronoi2(); } /// /// 图层面板是否显示. /// /// 图层控制按钮. /// 选中事件. private void bckiPanelLayer_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { LayerPanelVisible = bckiPanelLayer.Checked; } /// /// 统计面板是否显示. /// /// 事件按钮. /// 事件参数. private void bckiPanelStatistic_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { StatisticPanelVisible = bckiPanelStatistic.Checked; } /// /// 属性面板是否显示. /// /// 事件按钮. /// 事件参数. private void bckiPanelProperty_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (PropertyPanel == null) { return; } try { //if (bckiPanelProperty.Checked) //{ //PropertyPanel.Visibility = DockVisibility.Visible; //} //else //{ //PropertyPanel.Visibility = DockVisibility.AutoHide; //} PropertyPanelVisible = bckiPanelProperty.Checked; } finally { } } /// /// The MergePanels. /// public void MergePanels() { // 状态条 if (DrawerStatusBar != null) { StatisticPanel.ControlContainer.Controls.Clear(); DrawerStatusBar.UnMergeStatusBar(); drawerStatusBar.MergeStatusBar(ribbonMain.StatusBar); } // 图层树控件的处理 if (LayerControl != null) { LayerPanel.ControlContainer.Controls.Clear(); //this.LayerPanel.ControlContainer.Controls[i] LayerPanel.ControlContainer.Controls.Add(LayerControl); LayerPanel.Text = $"{DrawerView.CurrentLayer}"; LayerControl.Dock = DockStyle.Fill; if (LayerPanel.Visibility == DockVisibility.Hidden || LayerPanel.Visibility == DockVisibility.AutoHide) { bckiPanelLayer.Checked = false; } else { bckiPanelLayer.Checked = true; } LayerPanel.VisibilityChanged -= LayerPanel_VisibilityChanged; LayerPanel.VisibilityChanged += LayerPanel_VisibilityChanged; } // 属性控件的处理 if (PropertyPanel != null && PropertyControl != null) { PropertyPanel.ControlContainer.Controls.Clear(); PropertyPanel.ControlContainer.Controls.Add(PropertyControl); PropertyControl.Dock = DockStyle.Fill; } if (this.CreateMapPanel != null && CreateMapPanel.ControlContainer != null && GraphControl != null) { CreateMapPanel.ControlContainer.Controls.Clear(); CreateMapPanel.ControlContainer.Controls.Add(GraphControl); GraphControl.Dock = DockStyle.Fill; } //if (this.CreateMapPanel != null) //{ // 数据成图控件的处理 //if (!IsChildPanelExist(PropertyPanel.ParentPanel, "成图") && dcpProperty.Parent != null) //if (CreateMapPanel.Controls.Count == 0) //{ // CreateMapPanel.Controls.Add(GraphControl); // GraphControl.Dock = DockStyle.Fill; //} //if (!IsChildPanelExist(PropertyPanel.ParentPanel, "成图")) //// if (!PropertyPanel.Controls.Contains(dcpCreate)) //{ // PropertyPanel.Controls.Add(this.dcpCreate); // //DockPanel dockPanel = dcpProperty.AddPanel(); // //DockPanel dockPanel = dcpCreate; // dcpCreate.Text = "成图"; // dockManager1.AddPanel(DockingStyle.Fill, dcpCreate); // dcpCreate.DockTo(PropertyPanel, DockingStyle.Fill); // PropertyPanel.ParentPanel.ActiveChild = PropertyPanel; //} //} // 统计面板 if (StatisticControl != null) { statisticPanel.ControlContainer.Controls.Clear(); StatisticPanel.ControlContainer.Controls.Add(StatisticControl); StatisticControl.Dock = DockStyle.Fill; if (StatisticPanel.Visibility == DockVisibility.Hidden || StatisticPanel.Visibility == DockVisibility.AutoHide) { bckiPanelStatistic.Checked = false; } else { bckiPanelStatistic.Checked = true; } StatisticPanel.VisibilityChanged -= StatisticPanel_VisibilityChanged; StatisticPanel.VisibilityChanged += StatisticPanel_VisibilityChanged; } } /// /// 取消面板合并. /// public void UnMergePanels() { DrawerStatusBar?.UnMergeStatusBar(); if (LayerPanel != null) { LayerPanel.ControlContainer.Controls.Clear(); LayerPanel.Text = "图层"; } PropertyPanel?.ControlContainer.Controls.Clear(); statisticPanel?.ControlContainer.Controls.Clear(); } private UserControl ConvertFormToUserControl(Form form) { var uc = new UserControl(); form.FormBorderStyle = FormBorderStyle.None; form.TopLevel = false; uc.Controls.Add(form); form.Dock = DockStyle.Fill; return uc; } /// /// 添加控件到底部面板. /// /// 名称. /// 标题. /// 子控件. /// 是否显示关闭按钮 /// 是否覆盖已经存在的标签页 /// 面板. public DockPanel AddPanel2Bottom(string panelName, string panelText, Control childControl, bool showCloseButton = true, bool overwrite = true) { statisticPanel.SuspendLayout(); if (overwrite) { RemoveBottomPanel(panelName); } // 显示 statisticPanel 并暂停布局 statisticPanel.Visibility = DockVisibility.Visible; statisticPanel.Tabbed = true; // 创建 DockPanel DockPanel dockPanel = statisticPanel.AddPanel(); dockPanel.Name = panelName; dockPanel.Text = panelText; dockPanel.Options.ShowCloseButton = showCloseButton; // 设置 statisticPanel 的父面板 if (statisticPanel.ParentPanel != null) { statisticPanel.ParentPanel.ActiveChild = dockPanel; statisticPanel.ParentPanel.Tabbed = true; } // 恢复布局并返回面板 statisticPanel.ResumeLayout(); // 使用更高效的停靠方式 dockManager1.BeginUpdate(); try { dockPanel.Visibility = DockVisibility.Visible; dockManager1.AddPanel(DockingStyle.Fill, dockPanel); dockPanel.DockTo(statisticPanel, DockingStyle.Fill); } finally { dockManager1.EndUpdate(); } // 添加子控件到 DockPanel childControl.Dock = DockStyle.Fill; if (childControl is Form form) { form.TopLevel = false; form.FormBorderStyle = FormBorderStyle.None; dockPanel.Controls.Add(form); form.Show(); form.Dock = DockStyle.Fill; } else if (childControl is GridControl grid) { dockPanel.Controls.Add(grid); grid.Show(); grid.Dock = DockStyle.Fill; } // 强制刷新一次 if (statisticPanel.Parent is Control parent) { parent.Refresh(); } return dockPanel; } /// /// 移除底部指定面板 /// /// 面板名称 public void RemoveBottomPanel(string panelName) { DockPanel targetPanel = statisticPanel.ParentPanel?.Controls .OfType() .FirstOrDefault(p => p.Name == panelName); if (targetPanel != null) { statisticPanel.ParentPanel.RemovePanel(targetPanel); } } /// /// 移除底部所有面板 /// public void ClearBottomPanel() { } /// /// 在 dockManager1 中查找指定名称的 DockPanel /// /// 标题 /// 成功返回对应的 DockPanel,失败返回 null private DockPanel FindPanelByText(string text) { return dockManager1.Panels.Cast().FirstOrDefault(x => x.Text == text); } /// /// 判断子控件中是否存在指定 text 的 dockPanel /// /// 被查询的控件 /// 名称 /// true/false private bool IsChildPanelExist(DockPanel dockPanel, string text) { return dockPanel?.Controls .OfType() .Any(child => child.Text == text) ?? false; } /// /// The LayerPanel_VisibilityChanged. /// /// The sender. /// The e. private void LayerPanel_VisibilityChanged(object sender, VisibilityChangedEventArgs e) { SuspendLayout(); // Thread.Sleep(5000); if (LayerPanel.Visibility == DockVisibility.Hidden) { if (bckiPanelLayer.Checked) { bckiPanelLayer.Checked = false; } } if (LayerPanel.Visibility == DockVisibility.Visible || LayerPanel.Visibility == DockVisibility.AutoHide) { if (bckiPanelLayer.Checked == false) { bckiPanelLayer.Checked = true; } } ResumeLayout(); } /// /// The StatisticPanel_VisibilityChanged. /// /// The sender. /// The e. private void StatisticPanel_VisibilityChanged(object sender, VisibilityChangedEventArgs e) { if (StatisticPanel.Visibility == DockVisibility.Hidden) { if (bckiPanelStatistic.Checked) { bckiPanelStatistic.Checked = false; } } if (StatisticPanel.Visibility == DockVisibility.Visible || StatisticPanel.Visibility == DockVisibility.AutoHide) { if (bckiPanelStatistic.Checked == false) { bckiPanelStatistic.Checked = true; } } } /// /// btns the zoom window_ item click. /// /// The sender. /// The e. private void btnZoomWindow_ItemClick(object sender, ItemClickEventArgs e) { } /// /// 生成三角网 /// /// sender /// e private void btnDelaunay_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolDelaunay(); } private void btnSetXyzClore_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolZColor(); } private void SimplifyButton_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolSimplify(); } private void btnImageCutPolygon_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolImageCutPolygon(); } private void btnIntersectRegionFill_DownChanged(object sender, ItemClickEventArgs e) { if (btnIntersectRegionFill.Down || btnLinkRegionFill.Down || btnAutoRegionFill.Down) { btnCurveFill.Down = true; } else { mainView.ToolRestore(); } } private void btnIntersectRegionFill_ItemClick(object sender, ItemClickEventArgs e) { if (btnIntersectRegionFill.Down) { mainView.ToolCurveConnectFill(); } } private void btnLinkRegionFill_DownChanged(object sender, ItemClickEventArgs e) { if (btnIntersectRegionFill.Down || btnLinkRegionFill.Down || btnAutoRegionFill.Down) { btnCurveFill.Down = true; } else { mainView.ToolRestore(); } } private void btnLinkRegionFill_ItemClick(object sender, ItemClickEventArgs e) { if (btnLinkRegionFill.Down) { mainView.ToolSolidLink(); } } private void btnAutoRegionFill_DownChanged(object sender, ItemClickEventArgs e) { if (btnIntersectRegionFill.Down || btnLinkRegionFill.Down || btnAutoRegionFill.Down) { btnCurveFill.Down = true; } else { mainView.ToolRestore(); } } /// /// btns the auto region fill_ item click. /// /// The sender. /// The e. private void btnAutoRegionFill_ItemClick(object sender, ItemClickEventArgs e) { if (btnAutoRegionFill.Down) { mainView.ToolSolidAuto(); } } /// /// 水平井绘制 /// /// 事件按钮 /// 事件参数 private void btiWellGroup_ItemClick(object sender, ItemClickEventArgs e) { if (btiWellGroup.Down) { mainView.ToolWellGroup(); } } /// /// 编辑网格和等值线 /// /// 事件按钮 /// 事件参数 private void bbtnGridProgress_ItemClick(object sender, ItemClickEventArgs e) { if (FindGridEditorProcess(KepGridEditor.FormMain.ProcessName)) { MessageBox.Show("编辑模块正在运行中,请结束后再启动!", "启动编辑" , MessageBoxButtons.OK, MessageBoxIcon.Information); return; } IntPtr pXy = mainView.DrawerXY; KepGridEditor.FormMain editor = new KepGridEditor.FormMain( this.DrawerView.ViewControl.Geo, this.GridContourLayer, this.GridFaultLayer , this.ControlPointLayer, this.OtherLineLayer) { StartPosition = FormStartPosition.CenterScreen, }; //editor.EditorMouseMoveEvent += async (mx, my) => //{ // await Task.Run(() => { mainView.SetDrawerMouseLocation(mx, my); }); //}; // 等网编辑,修改了数据 editor.PushDataClick += (object btn, EventArgs ea) => { //更新图层列表 LayerControl.LoadLayerTree(); mainView.ToolDefault(); mainView.ToolRedraw(); // 网格操作我们不支持回退,太占内存了,于是这里要手动设置一下修改标识 mainView.SetDocumentModified(true); }; editor.Show(); } /// /// 轮廓刻画. /// /// The sender. /// The e. private void bbtnOutline_ItemClick(object sender, ItemClickEventArgs e) { if (FindGridEditorProcess(RiverPortray.FormMain.ProcessName)) { MessageBox.Show("轮廓刻画模块正在运行中,请结束后再启动!", "启动轮廓刻画" , MessageBoxButtons.OK, MessageBoxIcon.Information); return; } IntPtr pXy = mainView.DrawerXY; RiverPortray.FormMain frmMain = new RiverPortray.FormMain(pXy); // 取消区域刻画最上显示,这个操作耗时较长,如果最上显示的话,在这个过程中无法去做别的事情 frmMain.TopMost = false; // 回写了数据 frmMain.PushDataClick += (object btn, EventArgs ea) => { mainView.ToolDefault(); mainView.ToolRedraw(); mainView.LoadLayerTree(); // 网格操作我们不支持回退,太占内存了,于是这里要手动设置一下修改标识 mainView.SetDocumentModified(true); }; frmMain.Show(this); } /// /// 查找指定名称的进程 /// /// 窗口名称 /// 是否找到 private bool FindGridEditorProcess(string processName) { foreach (Form f in Application.OpenForms) { if (f.Text == processName) { return true; } } return false; } private void btnSymbolManager_ItemClick(object sender, ItemClickEventArgs e) { EditFileSymbol(); } /// /// 编辑当前文件相关的符号. /// public void EditFileSymbol() { DirectoryInfo symbolFilePath = Directory.GetParent(Application.StartupPath); string symbolFile = Path.Combine(symbolFilePath.FullName, "Symbol"); if (DrawerView == null) { SymbolLibInterface.SymbolHelp.ShowSymbolUI(null, symbolFile); } else { SymbolLibInterface.SymbolHelp.ShowSymbolUI(mainView, symbolFile); } } /// /// vtk 视图, 一个ucdrawedit 对应一个 UCVtkEdit /// public UCVtkEdit VtkEdit { get; set; } /// protected override void OnHandleDestroyed(EventArgs e) { faultEditForm?.Close(); faultEditForm = null; base.OnHandleDestroyed(e); } private FaultEditForm faultEditForm; /// /// 断层外扩按钮点击事件. /// /// The sender. /// The e. private void bbtnFaultBroaden_ItemClick(object sender, ItemClickEventArgs e) { if (faultEditForm == null) // 防止用户点多次出来多个弹框 { faultEditForm = new FaultEditForm(mainView); faultEditForm.Show(this); faultEditForm.FormClosed += (s, _) => faultEditForm = null; // 关闭时置 null,为了下次能够启动起来 } } /// /// 断层简化按钮点击事件 click. /// /// The sender. /// The e. private void bbtnFaultSimplyfy_ItemClick(object sender, ItemClickEventArgs e) { if (bbtnFaultSimplyfy.Down) { mainView?.ToolFaultSimply(); } } private void bbtnCurveCaculate_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolMergeCurve(); } /// /// 曲线连接按钮点击事件 /// /// 事件按钮 /// 事件参数 private void bbtnJoinCurves_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ToolAutoJoinCurves(); } private void btnReverseZ_ItemClick(object sender, ItemClickEventArgs e) { mainView?.ReverseCurveAndMeshZValue(); } private void btnDeleteDuplicate_ItemClick(object sender, ItemClickEventArgs e) { mainView?.DeleteDuplicationElements(); } private void barButtonItemVtk_ItemClick(object sender, ItemClickEventArgs e) { ShowVtkEventArgs vea = new ShowVtkEventArgs("Show Vtk Event triggered"); vea.FilePath = this.FileFullName; vea.HoleLayer = this.HoleLayer; vea.BoundaryLayer = this.BorderControlLayer; vea.WellLayer = this.WellLayer; Drawer drawer = this.DrawerView.ViewControl.Drawer; // 获取主网格 IntPtr mainMesh = IntPtr.Zero; String layerName = this.GetMainMeshLayer(); // 如果没有手动设置主网格的情况,自动获取并设置主网格 if (this.VtkMainMesh == IntPtr.Zero) { // 从主网格图层获取主网格,获取图件的第一个网格做为主网格 if (string.IsNullOrEmpty(layerName)) { mainMesh = drawer.Geo.GetKevFirstMesh(); drawer.SetVtkMainMeshEvent?.Invoke(drawer.DrawFileName, mainMesh); } else { mainMesh = mainView.ViewControl.Geo.GetMainMeshByLayer3D(layerName); drawer.SetVtkMainMeshEvent?.Invoke(drawer.DrawFileName, mainMesh); } } //获取图层数据,传送数据 this.LayerControl.GetVtkData(vea); //显示VTK控件 ShowVtkEvent?.Invoke(this, vea); } /// /// 设置三维设置参数 /// /// 三维参数,如果为 Intptr.Zero 表示清空 public void SetSceneParameter(IntPtr sceneParameter) { var geo = mainView?.ViewControl.Drawer.Geo; geo?.VtkSetSceneParameter(sceneParameter); } /// /// 获取三维设置参数 /// /// 参数指针,如果 IntPtr.Zero 表示三维参数不存在 public IntPtr GetSceneParameter() { var geo = mainView?.ViewControl.Drawer.Geo; if (geo == null) { return IntPtr.Zero; } return geo.VtkGetSceneParameter(); } /// /// 获取三维配置参数明细 /// /// 参数明细 /// 成功返回 true,失败返回 false public bool GetSceneParameterDetails(ref KevVtkSceneParameter parameter) { var geo = mainView?.ViewControl.Drawer.Geo; if (geo == null) { return false; } return geo.VtkGetSceneParameterDetails(ref parameter); } /// /// 设置三维配置信息到 vtkChild /// /// 目标对象 public void SetVtkSettings(UCVtkEdit vtkChild) { if (vtkChild == null) { throw new ArgumentNullException(nameof(vtkChild)); } IntPtr parameter = this.GetSceneParameter(); if (parameter != IntPtr.Zero) { UpdatePropertyPanel(vtkChild); vtkChild.SetSceneParameter(parameter); } } private Color ColorFromDouble(double r, double g, double b) { int red = (int)(r * 255); int green = (int)(g * 255); int blue = (int)(b * 255); return Color.FromArgb(red, green, blue); } private Color ColorRefToColor(uint color) { // 提取红、绿、蓝分量 byte red = (byte)((color >> 16) & 0xFF); byte green = (byte)((color >> 8) & 0xFF); byte blue = (byte)(color & 0xFF); // 创建Color对象(Alpha设为255,即不透明) return Color.FromArgb(255, red, green, blue); } /// /// 更新面板属性值 /// /// Vtk界面 private void UpdatePropertyPanel(UCVtkEdit vtkEdit) { try { var ucdrawEdit = this; var parameter = default(KevVtkSceneParameter); if (!ucdrawEdit.GetSceneParameterDetails(ref parameter)) { return; } // general vtkEdit.VtkProerty.ShowMeshEdge = (parameter.m_showMeshLinearExtrusion != 0); vtkEdit.VtkProerty.ShowCoordinateGrid = (parameter.m_showAxies != 0); vtkEdit.VtkProerty.ShowScalarBar = (parameter.m_showScalarBar != 0); vtkEdit.VtkProerty.ShowCoordinateGridLine = (parameter.m_ShowCoordinateGridLine != 0); vtkEdit.VtkProerty.ShowMeshEdgeColorGradient = (parameter.m_ShowMeshEdgeColorGradient != 0); vtkEdit.VtkProerty.ZScale = parameter.m_zScale; vtkEdit.VtkProerty.MeshEdgeMode = (MeshEdgeModeEnum)parameter.m_mesh_edge_mode; vtkEdit.VtkProerty.Thickness = parameter.m_thickness; // background vtkEdit.VtkProerty.BackgroundColor = ColorFromDouble( parameter.m_background_color_r, parameter.m_background_color_g, parameter.m_background_color_b); // camera vtkEdit.VtkProerty.CameraHAngle = parameter.m_camera_azimuth; vtkEdit.VtkProerty.CameraVAngle = parameter.m_camera_elevation; // actor vtkEdit.VtkProerty.ActorAmbientColor = ColorFromDouble( parameter.m_actor_ambientColor_r, parameter.m_actor_ambientColor_g, parameter.m_actor_ambientColor_b); vtkEdit.VtkProerty.ActorDiffusedColor = ColorFromDouble( parameter.m_actor_diffuseColor_r, parameter.m_actor_diffuseColor_g, parameter.m_actor_diffuseColor_b); vtkEdit.VtkProerty.ActorSpecularColor = ColorFromDouble( parameter.m_actor_specularColor_r, parameter.m_actor_specularColor_g, parameter.m_actor_specularColor_b); vtkEdit.VtkProerty.ActorAmbient = (int)(parameter.m_actor_ambient * 100); vtkEdit.VtkProerty.ActorDiffused = (int)(parameter.m_actor_diffuse * 100); vtkEdit.VtkProerty.ActorSpecular = (int)(parameter.m_actor_specular * 100); // light vtkEdit.VtkProerty.LightMode = (parameter.m_light_mode == 0 ? SigmaDrawerElement.LightModeEnum.相机光 : SigmaDrawerElement.LightModeEnum.方向光); vtkEdit.VtkProerty.MeshEdgeMode = (parameter.m_mesh_edge_mode == 0 ? SigmaDrawerElement.MeshEdgeModeEnum.平移 : SigmaDrawerElement.MeshEdgeModeEnum.水平); vtkEdit.VtkProerty.LightIntensity = (int)(parameter.m_light_intensity * 100); vtkEdit.VtkProerty.LightColor = ColorFromDouble( parameter.m_light_color_r, parameter.m_light_color_g, parameter.m_light_color_b); vtkEdit.VtkProerty.LightAmbientColor = ColorFromDouble( parameter.m_light_ambientColor_r, parameter.m_light_ambientColor_g, parameter.m_light_ambientColor_b); vtkEdit.VtkProerty.LightDiffusedCorlor = ColorFromDouble( parameter.m_light_diffuseColor_r, parameter.m_light_diffuseColor_g, parameter.m_light_diffuseColor_b); vtkEdit.VtkProerty.LightSpecularColor = ColorFromDouble( parameter.m_light_specularColor_r, parameter.m_light_specularColor_g, parameter.m_light_specularColor_b); vtkEdit.VtkProerty.MeshEdgeColor = ColorFromDouble( parameter.m_mesh_edge_color_r, parameter.m_mesh_edge_color_g, parameter.m_mesh_edge_color_b); vtkEdit.VtkProerty.LightElevation = parameter.m_light_elevation; vtkEdit.VtkProerty.LightAzimuth = parameter.m_light_azimuth; vtkEdit.VtkProerty.SingularValueFilterFlag = (parameter.m_singularValueFilterFlag != 0); vtkEdit.VtkProerty.SingularThreshold = parameter.m_singularThreshold; vtkEdit.VtkProerty.ZMaxScale = parameter.m_zMaxScale; vtkEdit.VtkProerty.WellMode = (Enum.IsDefined(typeof(WellModeEnum), parameter.m_wellMode) ? vtkEdit.VtkProerty.WellMode = (WellModeEnum)parameter.m_wellMode : WellModeEnum.平面); vtkEdit.VtkProerty.WellColumnHeight = parameter.m_wellColumnHeight; vtkEdit.VtkProerty.WellColumnRadius = parameter.m_wellColumnRadius; vtkEdit.VtkProerty.WellColumnColor = ColorRefToColor(parameter.m_wellColumnColor); vtkEdit.VtkProerty.WellColumnNameColor = ColorRefToColor(parameter.m_wellColumnNameColor); vtkEdit.VtkProerty.WellColumnNameSize = parameter.m_wellColumnNameSize; vtkEdit.VtkProerty.WellColumnNameGap = parameter.m_wellColumnNameGap; vtkEdit.VtkProerty.FaultMode = (FaultModeEnum)parameter.m_faultModeEnum; vtkEdit.propertyGridControl.Refresh(); } finally { } } private void WindowSync_DownChanged(object sender, ItemClickEventArgs e) { BarButtonItem item = (BarButtonItem)(sender); DrawerConfig.Instance.SetConfigValue("MultiView", "OnSynchronize", item.Down); DrawerConfig.Instance.Save(); } private void btnMeasure_ItemClick(object sender, ItemClickEventArgs e) { mainView.ToolMeasure(); } private void btnRotation_ItemClick(object sender, ItemClickEventArgs e) { var form = new FrmRotation(); if (form.ShowDialog(this) == DialogResult.OK) { mainView.Rotation(form.RotationParameter.Origin.X, form.RotationParameter.Origin.Y, form.RotationParameter.Angle); } } private void barSnapItem_CheckedChanged(object sender, ItemClickEventArgs e) { mainView?.ViewControl.Drawer.Geo.EnableSnape(barSnapItem.Checked); } private void ListBoxControl1_SelectedIndexChanged(object sender, EventArgs e) { if (listBoxControl1.SelectedIndex >= 0) { var selectedValue = listBoxControl1.SelectedItem.ToString(); // 更新按钮显示当前选中的值 btnAddMapLayer.Hint = $"卫星图片({selectedValue})"; if(selectedValue == "无") { mainView.DeleteMapViewLayer(); mainView.SetMapViewState(false); } else { mainView.DeleteMapViewLayer(); int zoom = Convert.ToInt32(selectedValue); mainView.AddMapViewLayer(zoom); mainView.SetMapViewState(true); } if (btnAddMapLayer.DropDownControl != null) { btnAddMapLayer.DropDownControl.HidePopup(); } mainView.LoadLayerTree(); mainView.ViewControl.Redraw(); } } private void btnAddMapLayer_ItemClick(object sender, ItemClickEventArgs e) { MapInfoDialog mapInfoDialog = new MapInfoDialog(); TreeNode tnRoot = LayerControl.GetLayerNodes(); mapInfoDialog.SetTreeView(tnRoot); if (mapInfoDialog.ShowDialog() == DialogResult.OK) { //记录参数 var geo = mainView?.ViewControl.Drawer.Geo; geo.MapUrlString = mapInfoDialog.UrlTemplate; //边界 geo.MapBorderLayer = mapInfoDialog.BorderSelectionLayer; } } } }