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

5653 lines
171 KiB
C#

1 month ago
// <copyright file="MainView.cs" company="PlaceholderCompany">.Dock = DockStyle.Right;
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Base;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraReports.UI;
using DQ.Construction.NewLook.Result;
using GeoSigma.SigmaDrawerStyle;
using GeoSigma.SigmaDrawerUtil;
using GeoSigma.UCDraw.Drawtool;
using GeoSigma.UCDraw.Tool;
using GeoSigma.UCDraw.UC;
using GeoSigmaDrawLib;
using Krypton.Docking;
using Krypton.Navigator;
using SigmaDrawerElement;
using SymbolLibInterface;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using UCDraw;
using UCDraw.Print;
using UCDraw.Tool;
using UCDraw.UC;
namespace GeoSigma.UCDraw
{
// public delegate void XyStatusEventHandler(string xyInfo);
// public delegate void FileModifyEventHandle(object sender, bool isModified);
// public delegate void ToolStatusChangedHandler(string toolName, bool enable);
// public delegate void ReloadFileHandler();
// public delegate void SaveFileEventHandle(CancelEventArgs e);
// public delegate void ButtonStatusChangeEventHanler(DrawToolType toolType, bool bChecked);
/// <summary>
/// 绘图模块的视图管理类
/// </summary>
public partial class WellPoleMainView : Form
{
/// <summary>
/// 鼠标移动事件
/// </summary>
public event XyStatusEventHandler MouseMoveXYEvent;
/// <summary>
/// 提示消息事件
/// </summary>
public event MainTipMessageHandler TipMessageHandler;
/// <summary>
/// 编辑状态切换事件
/// </summary>
public event ButtonStatusChangeEventHanler ButtonStatusChangeEvent;
/// <summary>
/// 获得长度和角度事件
/// </summary>
public event MainFrameHandle GetLengthAngleEvent;
public EventHandler<EventArgs> DrawerGotFocus { get; set; }
/// <summary>
/// 图层选中
/// </summary>
public EventHandler<PropertyChangedEventArgs> LayerSelected { get; set; }
/// <summary>
/// 显示统计结果
/// </summary>
public event EventHandler<EventArgs> ShowStatisticResult;
/// <summary>
/// 图层可见性变化事件
/// </summary>
public event ChangeControlVisible LayerVisibleChanged;
public event ChangeControlVisible PanelVisibleChanged;
/// <summary>
/// 文件保存前
/// </summary>
public event SaveFileEventHandle BeforeSaveFileEvent;
public event ToolStatusChangedHandler ToolStatusChandedEvent;
public event ReloadFileHandler ReloadFileEvent;
public static readonly string POSITION = "Position";
public DrawerMouseMoveEventHandler DrawerOnMouseMoveEvent
{
get { return this.viewer?.DrawerOnMouseMoveEvent; }
set { this.viewer.DrawerOnMouseMoveEvent = value; }
}
/// <summary>
/// 设置是否自动释放 pView 资源,如果设置为 false需要手工负责资源的释放
/// </summary>
public bool AutoReleaseView { get; set; } = true;
/// <summary>
/// 等待事件.
/// </summary>
public WaitProgressEventHandler WaitProgressEvent
{
get
{
return this.viewer?.WaitProgressEvent;
}
set
{
if (this.viewer != null)
{
this.viewer.WaitProgressEvent = value;
}
}
}
/// <summary>
/// 文件修改状态变化事件
/// </summary>
public event FileModifyEventHandle FileModifyEvent;
private bool isNewDocument = false;
/// <summary>
/// 是否新建文件
/// </summary>
public bool IsNewDocument
{
get { return this.isNewDocument; }
}
// private LayerTree layerTree;
/// <summary>
/// 图层树控件
/// </summary>
// public LayerTree LayerTreeControl => layerTree;
/// <summary>
/// 井类对象属性页控件
/// </summary>
private WellPolePanelProperty pnlWellProperty;
/// <summary>
/// 图形属性控件
/// </summary>
public WellPolePanelProperty PropertyWellControl => pnlWellProperty;
/// <summary>
/// 普通图元对象属性页控件
/// </summary>
private PanelEleProperty pnlProperty;
public PanelEleProperty PropertyEleControl => pnlProperty;
// private WellPoleDrawViewer viewer;
private WellBaseDrawView viewer;
/// <summary>
/// 绘图区控件
/// </summary>
// public WellPoleDrawViewer ViewControl => viewer;
public WellBaseDrawView ViewControl => viewer;
/// <summary>
/// 数据统计控件
/// </summary>
//public DataGridView StaticsControl => dgvStatics;
// private PanelControl staticsPanel = new PanelControl();
/// <summary>
/// 数据统计控件
/// </summary>
// public PanelControl StaticsControl => staticsPanel;
/// <summary>
/// 当前图层
/// </summary>
//public string CurrentLayer
//{
// get
// {
// return ViewControl.GetCurrentLayer();
// }
// set
// {
// ViewControl.SetCurrentLayer(value);
// }
//}
/// <summary>
/// 启动抗锯齿补丁
/// </summary>
public bool EnableMeshPack { get; set; } = true;
private GridControl dgvStatics = new GridControl();
// 当前的统计数据
private DataTable StaticsDataTable { get; set; } = new DataTable();
/// <summary>
/// 显示图层面板
/// </summary>
public bool EnableLayerPanel { get; set; } = true;
private bool layerVisible = true;
/// <summary>
/// 图层面板是否可见
/// </summary>
public bool LayerVisible
{
get
{
if (EnableLayerPanel)
{
layerVisible = kryptonDockingManager.IsPageShowing("图层");
}
return layerVisible;
}
set
{
layerVisible = value;
if (EnableLayerPanel)
{
if (layerVisible)
{
kryptonDockingManager.ShowPages(new string[] { "图层" });
kryptonDockingManager.MakeDockedRequest("图层");
}
else
{
kryptonDockingManager.HidePages(new string[] { "图层" });
}
}
}
}
// public GeoSigmaWellPoleXY.NewWellInfo mNewWellInfo = new GeoSigmaWellPoleXY.NewWellInfo();
/// <summary>
/// 显示属性面板
/// </summary>
public bool EnablePropertyPanel { get; set; } = true;
private bool propertyVisible = true;
/// <summary>
/// 属性面板是否可见
/// </summary>
public bool PropertyVisible
{
get
{
if (EnablePropertyPanel)
{
bool bShowing = kryptonDockingManager.IsPageShowing("属性");
if (bShowing)
{
propertyVisible = true;
}
else
{
propertyVisible = false;
}
}
return propertyVisible;
}
set
{
propertyVisible = value;
if (EnableLayerPanel)
{
if (propertyVisible == true)
{
kryptonDockingManager.ShowPages(new string[] { "属性" });
// kryptonDockingManager.MakeDockedRequest("属性");
kryptonDockingManager.SwitchAutoHiddenGroupToDockedCellRequest("属性");
}
else
{
kryptonDockingManager.HidePages(new string[] { "属性" });
}
}
}
}
/// <summary>
/// 显示统计面板
/// </summary>
public bool EnableStatisticPanel { get; set; } = true;
private bool statisticVisble = true;
/// <summary>
/// 统计面板是否可见
/// </summary>
public bool StatisticVisble
{
get
{
if (EnableStatisticPanel)
{
bool bShowing = kryptonDockingManager.IsPageShowing("统计");
if (bShowing)
{
statisticVisble = true;
}
else
{
statisticVisble = false;
}
}
return statisticVisble;
}
set
{
statisticVisble = value;
if (EnableStatisticPanel)
{
if (statisticVisble == true)
{
kryptonDockingManager.ShowPages(new string[] { "统计" });
kryptonDockingManager.MakeDockedRequest("统计");
}
else
{
kryptonDockingManager.HidePages(new string[] { "统计" });
}
}
}
}
private bool toolElementVisible = true;
/// <summary>
/// 文件是否被修改
/// </summary>
public bool IsFileDirty { get; set; } = false;
public bool ToolElementVisible
{
get
{
return toolElementVisible;
}
set
{
toolElementVisible = value;
tspElement.Visible = value;
}
}
/// <summary>
/// 选择的图元变化事件.
/// </summary>
public EventHandler<ElementArgs> SelectedElementChanged
{
get
{
if (this.viewer == null)
{
return null;
}
return this.viewer.SelectedElementChanged;
}
set
{
if (this.viewer.SelectedElementChanged != null)
{
this.viewer.SelectedElementChanged = value;
}
}
}
public EventHandler<MultiElementArgs> SelectedMultiElements
{
get
{
if (viewer == null)
{
return null;
}
return viewer.SelectedMultiElements;
}
set
{
if (viewer != null)
{
viewer.SelectedMultiElements = value;
}
}
}
/// <summary>
/// 图元工具条
/// </summary>
public ToolStrip ToolstripElements
{
get
{
return tspElement;
}
}
/// <summary>
/// 视图工具条
/// </summary>
public ToolStrip ToolstripView
{
get
{
return tspArrange;
}
}
public bool ToolMainVisible
{
get
{
return this.tsbtnSave.Visible;
}
set
{
this.tsbtnSave.Visible = value;
this.tsbtnLayerPanel.Visible = value;
tssepMain.Visible = value;
}
}
public int ID
{
get
{
if (viewer != null)
{
return viewer.ID;
}
return 0;
}
}
public IntPtr DrawerXY
{
get => viewer.DrawerXY;
}
private string fileFullName;
/// <summary>
/// 文件的全路径
/// </summary>
public string FileFullName
{
get
{
return fileFullName;
}
set
{
fileFullName = value;
}
}
public bool IsElementSelected
{
get
{
return viewer.SelectedElementPosition > 0;
}
}
public double ZColorWidth { get; set; } = 25;
private string symbolPath;
/// <summary>
/// 符号库所在路径
/// </summary>
public string SymbolPath
{
get
{
return symbolPath;
}
set
{
if (value == null)
{
return;
}
if (!value.Equals(this.symbolPath))
{
this.symbolPath = value;
string strNodeData = string.Empty;
GeoSigmaDrawLib.GeoSigmaXY.InitLibrary(symbolPath, ref strNodeData);
}
}
}
public CommandExecutionHandler ViewerCommandStart
{
get
{
return this.viewer?.ViewerCommandStart;
}
set
{
if (this.viewer != null)
{
this.viewer.ViewerCommandStart = value;
}
}
}
public CommandExecutionHandler ViewerCommandFinish
{
get
{
return this.viewer?.ViewerCommandFinish;
}
set
{
if (this.viewer != null)
{
this.viewer.ViewerCommandFinish = value;
}
}
}
/// <summary>
/// 显示导航信息事件.
/// </summary>
/// <param name="elementTypes">图元类型.</param>
/// <param name="eventHandler">处理事件.</param>
public void SetNavigationEvent(List<DrawElementType> elementTypes, ShowNavigationEventHandler eventHandler)
{
if (elementTypes == null)
{
throw new ArgumentNullException(nameof(elementTypes));
}
if (eventHandler == null)
{
throw new ArgumentNullException(nameof(eventHandler));
}
this.viewer?.SetNavigationEvent(elementTypes, eventHandler);
}
/// <summary>
/// 获得图层的数据
/// </summary>
/// <param name="layerName">图层名称</param>
/// <returns>数据列表</returns>
public List<DrawerElementProperty> GetDataByLayer(string layerName)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
return viewer?.GetDataByLayer(layerName);
}
/// <summary>
/// 获得图层的所有曲线
/// </summary>
/// <param name="layerName">图层名称</param>
/// <returns>曲线数据</returns>
public List<DrawerElementProperty> LayerGetCurves(string layerName)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
return viewer?.GetLayerCurve(layerName);
}
/// <summary>
/// 根据名称选中图元
/// </summary>
/// <param name="nameData">图元名称,多个图元名称以逗号分割</param>
/// <returns>选中图元个数</returns>
public int SelectByNames(string nameData)
{
if (nameData == null)
{
throw new ArgumentNullException(nameof(nameData));
}
return viewer.SelectByNames(nameData);
}
/// <summary>
/// 根据名称查找并激活图元
/// </summary>
/// <param name="content">图元名称</param>
/// <param name="matchAll">全字匹配</param>
/// <param name="matchCase">匹配大小写</param>
/// <param name="elementType">图元类型</param>
/// <param name="editableOnly">是否只查找可编辑图元</param>
/// <returns>查找结果</returns>
public int FindElementByName(string content, bool matchAll = false, bool matchCase = false, int elementType = 0, bool editableOnly = true)
{
if (content == null)
{
throw new ArgumentNullException(nameof(content));
}
return viewer.FindElementByName(content, matchAll, matchCase, elementType, editableOnly);
}
/// <summary>
/// position 转 DrawerElement
/// </summary>
/// <param name="positions">position列表</param>
/// <returns>DrawerElementProperty列表</returns>
public List<Tuple<long, DrawerElementProperty>> PositionsToDrawerElements(List<long> positions)
{
return positions.Select((pos) =>
{
return Tuple.Create(pos, PositionToDrawerElement(pos));
})
.ToList();
}
/// <summary>
/// 搜索元素
/// </summary>
/// <param name="name">搜索的内容</param>
/// <param name="ignoreCase">忽略大小写</param>
/// <param name="matchWholeWord">完全匹配</param>
/// <returns>position列表</returns>
/// <exception cref="ArgumentNullException">name参数不能为null</exception>
public List<long> SearchElementPositions(string name, bool ignoreCase = false, bool matchWholeWord = false)
{
if (name == null)
{
throw new ArgumentNullException(nameof(name));
}
return viewer.Geo.SearchElement(name, ignoreCase, matchWholeWord);
}
/// <summary>
/// 搜索元素
/// </summary>
/// <param name="name">搜索的内容</param>
/// <param name="ignoreCase">忽略大小写</param>
/// <param name="matchWholeWord">完全匹配</param>
/// <returns>position列表</returns>
/// <returns>元素列表,注意:有的 DrawerElementProperty 可能为 null</returns>
public List<Tuple<long, DrawerElementProperty>> SearchElements(string name, bool ignoreCase = false, bool matchWholeWord = false)
{
List<long> positions = SearchElementPositions(name, ignoreCase, matchWholeWord);
return PositionsToDrawerElements(positions);
}
private DrawerElementProperty PositionToDrawerElement(long pos)
{
string strElementData = string.Empty;
if (viewer.Geo.Select_GetElementByPosition(ref strElementData, pos))
{
return DrawerElementHelp.Deserialize(strElementData);
}
else
{
return null;
}
}
/// <summary>
/// 添加点
/// </summary>
/// <param name="layerName">图层名称</param>
/// <param name="pt">点</param>
public void AddDrawPoint(string layerName, DrawerPoint pt)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (pt == null)
{
throw new ArgumentNullException(nameof(pt));
}
viewer?.AddDrawPoint(layerName, pt);
}
/// <summary>
/// 通过字符串添加元素,这个 api 内部没对字符串格式做验证
/// </summary>
/// <param name="data">字符串</param>
/// <exception cref="ArgumentNullException">null或空string异常</exception>
public void AddBufferData(string data)
{
if (data == null)
{
throw new ArgumentNullException(nameof(data));
}
viewer?.Drawer?.AddBufferData(data);
}
/// <summary>
/// 重新设置线样式
/// </summary>
/// <param name="curveName">名称</param>
/// <param name="layerName">图层</param>
/// <param name="curveStyle">样式</param>
/// <returns>应用数量</returns>
public int ResetCurveStyle(string curveName, string layerName, CurveView curveStyle)
{
if (curveName == null)
{
throw new ArgumentNullException(nameof(curveName));
}
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (curveStyle == null)
{
throw new ArgumentNullException(nameof(curveStyle));
}
int nCount = viewer.ResetCurveStyle(curveName, layerName, curveStyle);
return nCount;
}
/// <summary>
/// 获取图层的样式
/// </summary>
/// <param name="layerName">图层名称</param>
/// <returns>图层样式</returns>
public DrawerStyle GetLayerLayerStyle(string layerName)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
string strCurveData = string.Empty;
string strPointData = string.Empty;
viewer.GetLayerStyleData(layerName, ref strCurveData, ref strPointData);
DrawerStyle drawerStyle = new DrawerStyle();
if (strCurveData != string.Empty)
{
drawerStyle.DeserializeCurve(strCurveData);
}
if (strPointData != string.Empty)
{
drawerStyle.DeserializePoint(strPointData);
}
return drawerStyle;
}
/// <summary>
/// 获得选中的所有图元
/// </summary>
/// <returns>选中图元的列表</returns>
public List<DrawerElementProperty> GetSelectedElements()
{
return viewer?.GetSelectedElements();
}
/// <summary>
/// 设置光标位置
/// </summary>
/// <param name="dx">x</param>
/// <param name="dy">y</param>
public void SetDrawerMouseLocation(double dx, double dy)
{
viewer?.SetDrawerMouseLocation(dx, dy);
}
/// <summary>
/// 为图层树节点添加自定义命令
/// </summary>
/// <param name="text">命令名称</param>
/// <param name="handler">事件句柄</param>
public void InsertLayerCommand(string text, EventHandler handler)
{
if (text == null)
{
throw new ArgumentNullException(nameof(text));
}
if (handler == null)
{
throw new ArgumentNullException(nameof(handler));
}
// layerTree.InsertCommand(text, handler);
}
#region 对外接口
/// <summary>
/// 将全部内容当前分辨率保存到指定输出文件.
/// </summary>
/// <param name="outputFile">The output file.</param>
/// <param name="left"></param>
/// <param name="top"></param>
/// <param name="right"></param>
/// <param name="bottom"></param>
public void Draw2Image(string outputFile, double left = 0, double top = 0, double right = 0, double bottom = 0)
{
viewer?.Draw2Image(outputFile, left, top, right, bottom);
}
/// <summary>
/// 添加地震剖面
/// </summary>
/// <param name="sectionData">属性数据</param>
/// <returns>图元索引</returns>
public long AddSeismicSection(string sectionData, float[] values)
{
if (viewer == null)
{
return -1;
}
return viewer.Drawer.AddSeismicSection(sectionData, values);
}
/// <summary>
/// 添加点数据
/// </summary>
/// <param name="layerName">图层名</param>
/// <param name="points">点列表</param>
public void AddDrawPoints(string layerName, List<DrawerPoint> points)
{
if (viewer == null)
{
return;
}
viewer.AddDrawPoints(layerName, points);
}
/// <summary>
/// 删除点数据
/// </summary>
/// <param name="layerName">图层名称</param>
/// <param name="ptName">点名称</param>
public void DeleteDrawPoint(string layerName, string ptName)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (ptName == null)
{
throw new ArgumentNullException(nameof(ptName));
}
viewer?.DeletePoint(layerName, ptName);
}
/// <summary>
/// 删除点数据
/// </summary>
/// <param name="layerName">图层</param>
/// <param name="ptNames">名称列表</param>
public void DeleteDrawPoints(string layerName, List<string> ptNames)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (ptNames == null)
{
throw new ArgumentNullException(nameof(ptNames));
}
viewer?.DeletePoints(layerName, ptNames);
}
/// <summary>
/// 删除点数据
/// </summary>
/// <param name="layerName">图层</param>
/// <param name="eleNames">名称列表</param>
public void DeleteDrawPoints(string layerName, List<DrawerPoint> eleNames)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
this.viewer?.DeletePoints(layerName, eleNames);
}
/// <summary>
/// 添加线
/// </summary>
/// <param name="layerName">图层</param>
/// <param name="name">线名</param>
/// <param name="pts">坐标点</param>
public void AddDrawCurve(string layerName, string name, List<PointD> pts)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (name == null)
{
throw new ArgumentNullException(nameof(name));
}
if (pts == null)
{
throw new ArgumentNullException(nameof(pts));
}
viewer?.Drawer.AddCurve(layerName, name, pts);
}
/// <summary>
/// 删除图层
/// </summary>
/// <param name="layers">图层列表</param>
/// <param name="withSublayer">是否删除子层</param>
public void DeleteLayers(List<string> layers, bool withSublayer = false)
{
if (layers == null)
{
throw new ArgumentNullException(nameof(layers));
}
viewer?.DeleteLayer(layers, withSublayer);
}
/// <summary>
/// 设置图层曲线属性
/// </summary>
/// <param name="layerName">图层名称</param>
/// <param name="curveView">曲线修饰</param>
/// <param name="index">下标,曲线修饰可以有很多个,这个表示设置第几个</param>
/// <returns>成功/失败</returns>
public bool SetLayerCurveStyle(string layerName, CurveView curveView, int index)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (curveView == null)
{
throw new ArgumentNullException(nameof(curveView));
}
if (index < 0)
{
throw new ArgumentOutOfRangeException(nameof(index));
}
return viewer.SetLayerStyle(curveView, layerName, index);
}
/// <summary>
/// 设置点属性
/// </summary>
/// <param name="layerName">图层名称</param>
/// <param name="pointStyle">属性</param>
/// <param name="replace">是否替换已有样式</param>
/// <returns>成功/失败</returns>
public bool SetLayerPointStyle(string layerName, DrawerPointStyle pointStyle, bool replace)
{
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (pointStyle == null)
{
throw new ArgumentNullException(nameof(pointStyle));
}
string strPointStyle = pointStyle.SerialXml();
return viewer.SetLayerHowtoViewPoint(layerName, strPointStyle, replace);
}
/// <summary>
/// 显示符号管理
/// </summary>
/// <param name="symbolPath">符号库的路径</param>
public void ShowSymbolManager(string symbolPath)
{
if (!string.IsNullOrEmpty(symbolPath))
{
SymbolPath = symbolPath;
}
SymbolHelp.ShowSymbolUI(this, symbolPath);
}
/// <summary>
/// Adds the data as symble.
/// </summary>
/// <param name="data">The data.</param>
/// <param name="symbolName">The symbol name.</param>
/// <param name="overwrite">If true, overwrite.</param>
/// <returns>An int.</returns>
public int AddDataAsSymble(string data, string symbolName, bool overwrite = false)
{
return viewer.AddDataAsSymble(data, symbolName, overwrite);
}
#endregion 对外接口
//private readonly KryptonPage pageStatistic;
GeoSigmaXY.eViewType mViewType;
/// <summary>
/// Initializes a new instance of the <see cref="MainView"/> class.
/// </summary>
public WellPoleMainView(GeoSigmaXY.eViewType vType = GeoSigmaXY.eViewType.plane)
{
//.mNewWellInfo = new GeoSigmaWellPoleXY.newWellInfo();
mViewType = vType;
this.TopLevel = false;
InitializeComponent();
// Setup docking functionality
KryptonDockingWorkspace w = kryptonDockingManager.ManageWorkspace(kryptonDockableWorkspace);
kryptonDockingManager.ManageControl(kryptonPanel1, w);
kryptonDockingManager.ManageFloating(this);
// Add docking pages
// kryptonDockingManager.AddDockspace("Control", DockingEdge.Left, new KryptonPage[] { MakeLayerTreePanel() });
//pageStatistic = MakeStatisticPanel();
//kryptonDockingManager.AddDockspace("Control", DockingEdge.Bottom, new KryptonPage[] { pageStatistic });
kryptonDockingManager.AddDockspace("Control", DockingEdge.Left, new KryptonPage[] { MakePropertyPanel() });//生成最终用到的属性页
kryptonDockingManager.AddAutoHiddenGroup("Control", DockingEdge.Right, new KryptonPage[] { MakeWellPropertyPanel() });//生成最终用到的属性页
this.kryptonWorkspaceCell1.Pages.Clear();
this.kryptonWorkspaceCell1.Pages.AddRange(
new Krypton.Navigator.KryptonPage[] { MakeViewerDoc() });
pnlProperty.Viewer = this.viewer;
// this.TopLevel = false;
//this.sbtnEllipse.Tag = this.sbtnEllipse.DropDownItems[0];
BindEvent();
// layerTree.AutoAdjustDirectionEvent += OnAutoAdjustDirection;
// InitStatisticPanel();
//GradientColorManager.LoadTemplate(false);
}
private void MainView_Load(object sender, EventArgs e)
{
//kryptonDockingManager.HidePages(new string[] { "统计" });
//tspElement.Visible = ToolElementVisible;
//if (!string.IsNullOrEmpty(CurrentLayer))
//{
// layerTree_LayerSelect("Layer:\\" + CurrentLayer);
//}
}
/// <summary>
/// 关闭断层编辑弹框
/// </summary>
public void CloseFaultEditor()
{
faultEditForm?.Close();
faultEditForm = null;
}
/// <inheritdoc/>
protected override void OnClosed(EventArgs e)
{
CloseFaultEditor();
base.OnClosed(e);
}
/// <inheritdoc/>
protected override void OnParentVisibleChanged(EventArgs e)
{
if (!this.Visible)
{
CloseFaultEditor();
}
base.OnParentVisibleChanged(e);
}
private KryptonPage MakeViewerDoc()
{
if (mViewType == GeoSigmaXY.eViewType.wellsection)
this.viewer = new WellSectionDrawViewer(mViewType);
else
this.viewer = new WellPoleDrawViewer(mViewType);
this.viewer.BackColor = System.Drawing.Color.White;
this.viewer.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
// this.viewer.EnableMeshPack = true;
this.viewer.Geo = null;
this.viewer.Location = new System.Drawing.Point(219, 23);
this.viewer.Margin = new System.Windows.Forms.Padding(4);
this.viewer.Name = "viewer";
this.viewer.Size = new System.Drawing.Size(517, 132);
this.viewer.TabIndex = 7;
this.viewer.Dock = DockStyle.Fill;
KryptonPage p = new KryptonPage();
p.Text = "绘图";
p.TextTitle = p.Text;
p.TextDescription = p.Text;
p.UniqueName = p.Text;
//p.ImageSmall = imageListSmall.Images[image];
// Add the control for display inside the page
p.Controls.Add(viewer);
return p;
}
/// <summary>
/// 初始化统计面板
/// </summary>
private void InitStatisticPanel()
{
if (dgvStatics.MainView == null)
{
GridView gridView = new GridView(dgvStatics);
dgvStatics.MainView = gridView;
gridView.OptionsView.ShowGroupPanel = false;
gridView.OptionsBehavior.Editable = false;
gridView.VertScrollVisibility = ScrollVisibility.Always;
gridView.KeyDown += DvgStatics_KeyDown;
gridView.DoubleClick += DgvStatisc_DoubleClick;
dgvStatics.DataSourceChanged += (sender, e) =>
{
GridView view = dgvStatics.MainView as GridView;
view.OptionsSelection.MultiSelect = true;
view.PopulateColumns();
// 隐藏 Position 列,该列是用来定位的
var column = view.Columns.Cast<GridColumn>()
.FirstOrDefault(col => col.FieldName.Equals(POSITION, StringComparison.OrdinalIgnoreCase));
if (column != null)
{
column.Visible = false;
}
};
}
}
private ToolStripButton CreateExportButton(string name, string text, Image image)
{
ToolStripButton button = new System.Windows.Forms.ToolStripButton
{
DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image,
Image = image,
ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None,
ImageTransparentColor = System.Drawing.Color.Silver,
Name = name,
Size = new System.Drawing.Size(23, 24),
Text = text,
};
return button;
}
private void BtnDelete_Click(object sender, EventArgs e)
{
GridView view = dgvStatics.MainView as GridView;
int[] rows = view.GetSelectedRows();
var positions = new List<long>();
for (int i = rows.Length - 1; i >= 0; i--)
{
int rowIndex = rows[i];
string value = view.GetRowCellValue(rowIndex, POSITION) as string;
if (long.TryParse(value, out long position))
{
positions.Add(position);
view.DeleteRow(rowIndex);
}
}
RemoveElement(positions.ToArray());
this.viewer.Redraw();
}
private void BtnLocation_Click(object sender, EventArgs e)
{
List<long> positions = new List<long>();
GridView view = dgvStatics.MainView as GridView;
int[] rows = view.GetSelectedRows();
foreach (int row in rows)
{
string value = view.GetRowCellValue(row, POSITION) as string;
if (Int64.TryParse(value, out Int64 position))
{
positions.Add(position);
}
}
ActiveElements(positions.ToArray());
viewer.Redraw();
}
private bool CurrentStatsicPanelIsResourceComment()
{
GridView view = dgvStatics.MainView as GridView;
return view?.Columns.ColumnByFieldName("WKT") != null;
}
private bool ExportResourceComment(string path)
{
int posIndex = StaticsDataTable.Columns.IndexOf("Position");
return DataTableExporter.ExportCsv(StaticsDataTable, path, new[] { posIndex });
}
private void BtnExport_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog
{
Filter = "*.csv|*.csv|*.*|*.*",
AddExtension = true,
OverwritePrompt = true,
RestoreDirectory = true,
};
if (sfd.ShowDialog(this) != DialogResult.OK)
{
return;
}
string strFile = sfd.FileName;
GridView view = dgvStatics.MainView as GridView;
if (view.Columns.Count() == 0)
{
MessageBox.Show("导出失败,数据为空!");
return;
}
// 矿权统计界面显示的不是完整内容,要从数据里面去导,
// 实际上按照良好的设计来说,本来也该从 model 去导数据
// 因为界面呈现方式本来就是可以灵活调整的
if (CurrentStatsicPanelIsResourceComment())
{
if (ExportResourceComment(strFile))
{
MessageBox.Show("导出表格成功!");
}
else
{
MessageBox.Show($"导出表格失败!\r\n");
}
return;
}
try
{
if (ExportGrid2Csv(dgvStatics, strFile))
{
MessageBox.Show("导出表格成功!");
}
else
{
MessageBox.Show($"导出表格失败!\r\n");
}
}
catch (Exception ex)
{
MessageBox.Show($"导出表格失败!\r\n{ex.Message}");
}
}
private void DvgStatics_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
{
BtnDelete_Click(sender, e);
return;
}
OnKeyDown(e);
}
//private KryptonPage MakeStatisticPanel()
//{
// KryptonPage p = new KryptonPage
// {
// Text = "统计",
// };
// p.TextTitle = p.Text;
// p.TextDescription = p.Text;
// p.UniqueName = p.Text;
// var btnDelete = CreateExportButton("btnStatisticDelete", "删除", global::GeoSigma.UCDraw.Properties.Resources.shanchu1);
// btnDelete.Click += BtnDelete_Click;
// var btnSelectAll = CreateExportButton("btnStatisticSelectall", "全选", global::GeoSigma.UCDraw.Properties.Resources.quanxuan1);
// btnSelectAll.Click += (sender, e) =>
// {
// GridView view = dgvStatics.MainView as GridView;
// view?.SelectAll();
// };
// // 定位按钮
// var btnLocation = CreateExportButton("btnStatisticLocation", "定位图元", global::GeoSigma.UCDraw.Properties.Resources.xuanzetuyuan);
// btnLocation.Click += BtnLocation_Click;
// var btnExport = CreateExportButton("btnStatisticExport", "导出", global::GeoSigma.UCDraw.Properties.Resources.daochu);
// btnExport.Click += BtnExport_Click;
// ToolStrip tspStatistic = new ToolStrip();
// tspStatistic.Items.AddRange(new System.Windows.Forms.ToolStripItem[]
// {
// btnSelectAll,
// btnLocation,
// btnDelete,
// btnExport,
// });
// tspStatistic.LayoutStyle = ToolStripLayoutStyle.VerticalStackWithOverflow;
// dgvStatics.Dock = DockStyle.Fill;
// tspStatistic.Dock = DockStyle.Right;
// staticsPanel.AddControl(dgvStatics);
// staticsPanel.AddControl(tspStatistic);
// // Add the control for display inside the page
// staticsPanel.Dock = DockStyle.Fill;
// p.Controls.Add(staticsPanel);
// return p;
//}
private void DgvStatics_Sorted(object sender, EventArgs e)
{
throw new NotImplementedException();
}
private bool isAscending = true; // 表示是否是升序排序
private DataGridViewColumn clickedColumn = null; // 记录点击的列
// 移除排序标识
private string RemoveOrderIndicator(string title)
{
if (title.EndsWith("↑") || title.EndsWith("↓"))
{
return title.Remove(title.Length - 1);
}
return title;
}
private void DataGridViewColumnHeader_MouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
DataGridView dataGridView = sender as DataGridView;
DataGridViewColumn newClickedColumn = dataGridView.Columns[e.ColumnIndex];
// 判断是否点击的同一列
if (clickedColumn != null && clickedColumn == newClickedColumn)
{
// 切换排序方式
isAscending = !isAscending;
}
else
{
// 默认为升序排序
isAscending = true;
clickedColumn = newClickedColumn;
}
// 设置排序图标
dataGridView.Columns.Cast<DataGridViewColumn>().ToList().ForEach(column =>
{
if (column.SortMode != DataGridViewColumnSortMode.NotSortable)
{
// 去掉前面附加的箭头
column.HeaderCell.Value = RemoveOrderIndicator(column.HeaderCell.Value.ToString());
}
});
DataGridViewColumnHeaderCell currentHeaderCell = newClickedColumn.HeaderCell;
// 设置当前列的排序标识
if (isAscending)
{
currentHeaderCell.SortGlyphDirection = SortOrder.Ascending;
currentHeaderCell.Value = currentHeaderCell.Value.ToString() + "↑";
}
else
{
currentHeaderCell.SortGlyphDirection = SortOrder.Descending;
currentHeaderCell.Value = currentHeaderCell.Value.ToString() + "↓";
}
// 排序
ListSortDirection direction = isAscending ? ListSortDirection.Ascending : ListSortDirection.Descending;
dataGridView.Sort(newClickedColumn, direction);
}
private bool ExportGrid2Csv(GridControl grid, string fileName, string columnExcept = "Position")
{
Stream stream = null;
StreamWriter sw = null;
try
{
stream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.ReadWrite);
sw = new StreamWriter(stream, System.Text.Encoding.UTF8);
GridView gridView = grid.MainView as GridView;
// Write column headers
string columnTitle = string.Empty;
for (int i = 0; i < gridView.Columns.Count; i++)
{
if (gridView.Columns[i].FieldName.Equals(columnExcept, StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
if (!string.IsNullOrEmpty(columnTitle))
{
columnTitle += ",";
}
columnTitle += gridView.Columns[i].FieldName;
}
sw.WriteLine(columnTitle);
// Write rows data
for (int j = 0; j < gridView.RowCount; j++)
{
string columnValue = string.Empty;
for (int k = 0; k < gridView.Columns.Count; k++)
{
if (gridView.Columns[k].FieldName.Equals(columnExcept, StringComparison.CurrentCultureIgnoreCase))
{
continue;
}
if (!string.IsNullOrEmpty(columnValue))
{
columnValue += ",";
}
object cellValue = gridView.GetRowCellValue(j, gridView.Columns[k]);
string strValue = cellValue?.ToString() ?? string.Empty;
if (strValue.Contains(","))
{
// Escape commas by wrapping value in quotes
columnValue += "\"" + strValue + "\"";
}
else
{
columnValue += strValue;
}
}
sw.WriteLine(columnValue);
}
return true;
}
catch (Exception e)
{
throw new Exception("Failed to export grid data", e);
}
finally
{
sw?.Close();
stream?.Close();
}
}
private KryptonPage MakeWellPropertyPanel()
{
this.pnlWellProperty = new WellPolePanelProperty();
this.pnlWellProperty.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlWellProperty.Location = new System.Drawing.Point(0, 0);
this.pnlWellProperty.Margin = new System.Windows.Forms.Padding(4);
this.pnlWellProperty.Name = "pnlWellProperty";
this.pnlWellProperty.Size = new System.Drawing.Size(381, 257);
this.pnlWellProperty.TabIndex = 0;
this.pnlWellProperty.ElementChanged += PnlWellProperty_ElementChanged;
KryptonPage p = new KryptonPage();
p.Width = 400;
p.Text = "属性";
p.TextTitle = p.Text;
p.TextDescription = p.Text;
p.UniqueName = p.Text;
//p.ImageSmall = imageListSmall.Images[image];
// Add the control for display inside the page
p.Controls.Add(pnlWellProperty);
return p;
}
private KryptonPage MakePropertyPanel()
{
this.pnlProperty = new PanelEleProperty();
this.pnlProperty.CurrentStyle = null;
this.pnlProperty.Dock = System.Windows.Forms.DockStyle.Fill;
this.pnlProperty.ElementProperty = null;
this.pnlProperty.LayerName = null;
this.pnlProperty.Location = new System.Drawing.Point(0, 0);
this.pnlProperty.Margin = new System.Windows.Forms.Padding(4);
this.pnlProperty.Name = "pnlProperty";
this.pnlProperty.Size = new System.Drawing.Size(381, 257);
this.pnlProperty.TabIndex = 0;
this.pnlProperty.Viewer = null;
KryptonPage p = new KryptonPage();
p.Width = 400;
p.Text = "属性1";
p.TextTitle = p.Text;
p.TextDescription = p.Text;
p.UniqueName = p.Text;
//p.ImageSmall = imageListSmall.Images[image];
// Add the control for display inside the page
p.Controls.Add(pnlProperty);
return p;
}
//private KryptonPage MakeLayerTreePanel()
//{
// this.layerTree = new LayerTree();
// this.layerTree.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
// this.layerTree.CurrentNode = null;
// this.layerTree.Dock = System.Windows.Forms.DockStyle.Fill;
// this.layerTree.DrawViewer = null;
// this.layerTree.LayerActiveEvent = null;
// this.layerTree.Location = new System.Drawing.Point(0, 0);
// this.layerTree.Margin = new System.Windows.Forms.Padding(4);
// this.layerTree.Name = "layerTree";
// this.layerTree.Size = new System.Drawing.Size(215, 369);
// this.layerTree.TabIndex = 0;
// KryptonPage p = new KryptonPage();
// p.Text = "图层";
// p.TextTitle = p.Text;
// p.TextDescription = p.Text;
// p.UniqueName = p.Text;
// //p.ImageSmall = imageListSmall.Images[image];
// // Add the control for display inside the page
// p.Controls.Add(layerTree);
// return p;
//}
public void GetLengthAngle(string info)
{
GetLengthAngleEvent?.Invoke(info);
}
private void Application_Idle(object sender, EventArgs e)
{
if (viewer == null)
{
return;
}
GeoSigmaXY geo = viewer.GetGeoSigma();
if (geo == null)
{
return;
}
SetStatusOfControls();
SetStatusFileDirty();
}
private void SetStatusFileDirty()
{
GeoSigmaXY geo = viewer.GetGeoSigma();
bool isModified = geo.Sigma_IsDocumentModified();
if (this.IsFileDirty != isModified)
{
this.IsFileDirty = isModified;
string strTitleOld = this.Text;
if (string.IsNullOrEmpty(strTitleOld))
{
this.FileModifyEvent?.Invoke(this, this.IsFileDirty);
return;
}
if (isModified)
{
if (strTitleOld[0] != '*')
{
strTitleOld = $"*{strTitleOld}";
}
}
else
{
if (strTitleOld[0] == '*')
{
strTitleOld = strTitleOld.Remove(0, 1);
}
}
this.Text = strTitleOld;
this.FileModifyEvent?.Invoke(this, this.IsFileDirty);
}
}
private void SetStatusOfControls()
{
GeoSigmaXY geo = viewer.GetGeoSigma();
bool bCanUndo = geo.GeoSigma_CanUndo();
bool bIsEdit = false;
if( this.ViewControl.Drawer.ActiveTool == DrawToolType.SelectWellPole)
{
DrawToolWellPole drawToolWellPole = (DrawToolWellPole)this.ViewControl.Drawer.ActiveDrawTool;
if(drawToolWellPole.IsEditStatus)
{//当处于文本框编辑状态时不要使用undo/redo
bIsEdit = true;
}
}
if (this.ViewControl.Drawer.ActiveTool == DrawToolType.SelectWellSection)
{
DrawToolWellSection drawToolWellSection = (DrawToolWellSection)this.ViewControl.Drawer.ActiveDrawTool;
if (drawToolWellSection.IsEditStatus)
{//当处于文本框编辑状态时不要使用undo/redo
bIsEdit = true;
}
}
if (bIsEdit)
{
bCanUndo = false;
}
if (bCanUndo != undoButton.Enabled)
{
undoButton.Enabled = bCanUndo;
ToolStatusChandedEvent?.Invoke("undo", bCanUndo);
}
bool bCanRedo = geo.GeoSigma_CanRedo();
if(bIsEdit)
{
bCanRedo = false;
}
if (bCanRedo != redoButton.Enabled)
{
redoButton.Enabled = bCanRedo;
ToolStatusChandedEvent?.Invoke("redo", bCanRedo);
}
bool bCanUndoView = geo.GeoSigma_GetZoomStackCount() > 0;
if (bCanUndoView != undoViewButton.Enabled)
{
undoViewButton.Enabled = bCanUndoView;
ToolStatusChandedEvent?.Invoke("undoView", bCanUndoView);
}
}
private void DgvStatisc_DoubleClick(object sender, EventArgs e)
{
try
{
GridView view = sender as GridView;
Point mousePosition = view.GridControl.PointToClient(Control.MousePosition);
GridHitInfo hitInfo = view.CalcHitInfo(mousePosition);
int rowHandle = hitInfo.RowHandle; // 行索引
string cellValue = view.GetRowCellValue(rowHandle, POSITION) as string;
if (long.TryParse(cellValue, out long position))
{
ActiveElement(position);
this.viewer.Redraw();
}
}
catch (Exception ex)
{
Trace.WriteLine(ex.Message);
}
}
/// <summary>
/// 激活某图元,选中并显示属性.
/// </summary>
/// <param name="position">The position.</param>
public void ActiveElement(long position)
{
if (position <= 0)
{
throw new ArgumentOutOfRangeException(nameof(position));
}
ToolSelect();
viewer.GetGeoSigma().ActiveEelement(position);
viewer.Drawer.RefreshProperty();
}
/// <summary>
/// 激活某图元,选中并显示属性.
/// </summary>
/// <param name="positions">选中的 position 集合</param>
public void ActiveElements(long[] positions)
{
if (positions == null)
{
throw new ArgumentNullException(nameof(positions));
}
ToolSelect();
viewer.GetGeoSigma().ActiveElements(positions);
}
/// <summary>
/// 删除某图元
/// </summary>
/// <param name="positions">The position.</param>
public void RemoveElement(long[] positions)
{
if (positions == null)
{
throw new ArgumentNullException(nameof(positions));
}
viewer.GetGeoSigma().DeleteElement(positions);
}
public void ShowMouseInfo(string mouseXY)
{
MouseMoveXYEvent?.Invoke(mouseXY);
}
public void ShowTipMessage(string tipMessage)
{
TipMessageHandler?.Invoke(tipMessage);
}
public bool SelectWriteTemplate(string outputFile)
{
return viewer.SelectWriteTemplate(outputFile);
}
#region 文件操作
/// <summary>
/// 合并图片文件
/// </summary>
/// <param name="fileName">输入文件</param>
/// <param name="onBottom">是否插入到最底层</param>
/// <param name="locationX">起始坐标X</param>
/// <param name="locationY">起始坐标Y</param>
/// <param name="endX">终止坐标X</param>
/// <param name="endY">终止坐标Y</param>
/// <param name="layerName">图层名称</param>
public void ImageFileMerge(string fileName, bool onBottom,
double locationX, double locationY, double endX, double endY, string layerName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.ImageFileMerge(fileName, onBottom,
locationX, locationY, endX, endY, layerName);
}
/// <summary>
/// 合并平面图文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <param name="onBottom">是否在最底层</param>
/// <returns>是否成功</returns>
public bool FileMerge(string fileName, bool onBottom = false)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileMerge(fileName, onBottom);
// viewer.Redraw();
LoadLayerTree();
return true;
}
/// <summary>
/// 合并单井图文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <param name="onBottom">是否在最底层</param>
/// <returns>是否成功</returns>
public bool WellPoleFileMerge(string fileName, bool onBottom = false)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.WellPoleFileMerge(fileName, onBottom);
// viewer.Redraw();
LoadLayerTree();
return true;
}
/// <summary>
/// 合并剖面图文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <param name="onBottom">是否在最底层</param>
/// <returns>是否成功</returns>
public bool MultiWellSectionFileMerge(string fileName, bool onBottom = false)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.MultiWellSectionFileMerge(fileName, onBottom);
// viewer.Redraw();
LoadLayerTree();
return true;
}
/// <summary>
/// 在指定层位前合并文件.
/// </summary>
/// <param name="fileName">Name of the file.</param>
/// <param name="layerBefore">The layer before.</param>
/// <returns>是否成功</returns>
public bool FileMergeBefore(string fileName, string layerBefore)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
if (layerBefore == null)
{
throw new ArgumentNullException(layerBefore);
}
viewer.Geo.FileMergeBefore(fileName, layerBefore);
// viewer.Redraw();
LoadLayerTree();
return true;
}
/// <summary>
/// 在指定层位后合并文件.
/// </summary>
/// <param name="fileName">Name of the file.</param>
/// <param name="layerAfter">The layer after.</param>
/// <returns>是否成功</returns>
public bool FileMergeAfter(string fileName, string layerAfter)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
if (layerAfter == null)
{
throw new ArgumentNullException(layerAfter);
}
viewer.Geo.FileMergeAfter(fileName, layerAfter);
LoadLayerTree();
return true;
}
/// <summary>
/// 保存显示数据
/// </summary>
/// <param name="fileName">文件路径</param>
/// <returns>是否成功</returns>
public bool FileSaveView(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveView(fileName);
return true;
}
/// <summary>
/// 保存选择的数据
/// </summary>
/// <param name="fileName">文件名</param>
/// <returns>成功/失败</returns>
public bool FileSaveSelect(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveSelect(fileName);
return true;
}
/// <summary>
/// 保存点
/// </summary>
/// <param name="fileName">文件路径名</param>
/// <returns>成功/失败</returns>
public bool FileSavePoint(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSavePoint(fileName);
return true;
}
/// <summary>
/// 保存曲线
/// </summary>
/// <param name="fileName">文件路径名</param>
/// <returns>成功/失败</returns>
public bool FileSaveCurve(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveCurve(fileName);
return true;
}
public bool FileSaveSolid(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveSolid(fileName);
return true;
}
public bool FileSaveText(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveText(fileName);
return true;
}
public bool FileSaveCleanCurve(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveCleanCurve(fileName);
return true;
}
public bool FileSaveToXyz(string fileName)
{
if (fileName == null)
{
throw new ArgumentNullException(nameof(fileName));
}
viewer.Geo.FileSaveToXyz(fileName);
return true;
}
public bool FileSaveToMark()
{
//viewer.Drawer.Cursor = CustomDrawCursors.Range;
//if (ViewControl.Drawer.ActiveTool != DrawToolType.SaveAsSymbol)
//{
// viewer.Drawer.ActiveTool = DrawToolType.SaveAsSymbol;
//}
//viewer.Geo.FileSaveToMark(string.Empty);
return true;
}
public void ImportDataFile()
{
var import = new ImportFileDialog()
{
StartPosition = FormStartPosition.CenterScreen,
GeoObj = this.viewer.Geo,
};
// 要考虑数据本身就有问题的情况,导入模块可能无法分析出所有情况,所以这个异常捕捉不要移除
try
{
if (import.ShowDialog(this) == DialogResult.OK)
{
this.LoadLayerTree();
}
viewer.Redraw();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
/// <summary>
/// 导出文件
/// </summary>
public void ExportDataFile()
{
var exportFile = new ExporFilesDialog
{
Geo = this.viewer.Geo,
StartPosition = FormStartPosition.CenterScreen,
};
if (exportFile.ShowDialog(this) == DialogResult.OK)
{
this.LoadLayerTree();
}
}
public bool ReloadFile()
{
if (viewer.ReloadFile() == false)
{
return false;
}
ReloadFileEvent?.Invoke();
LoadLayerTree();
// FIXME: 重新加载之后,统计界面元素的 position 已经全部失效了,这里先把这个界面清空,后续有需要的话,再刷新一下上次的操作
if (dgvStatics != null)
{
dgvStatics.DataSource = null;
}
return true;
}
public void ClearGeo()
{
viewer.ClearGeo();
}
public void SetBackColor(int r, int g, int b)
{
viewer.SetBackColor(r, g, b);
}
public void SetSymbolView(bool isSymbolView)
{
viewer.SetSymbolView(isSymbolView);
}
/// <summary>
/// 保存文档
/// </summary>
/// <returns>成功、失败,如果在 cancelEvent 里面设置了取消,将不会保存文件,并返回成功</returns>
public bool SaveFile()
{
if (BeforeSaveFileEvent != null)
{
var cancelEventArgs = new CancelEventArgs();
BeforeSaveFileEvent.Invoke(cancelEventArgs);
if (cancelEventArgs.Cancel)
{
return true;
}
}
if (viewer == null)
{
return false;
}
if (string.IsNullOrEmpty(FileFullName))
{
FileFullName = DocHelper.SaveDialog(this.Text);
if (string.IsNullOrEmpty(FileFullName))
{
return false;
}
}
return viewer.SaveFile(FileFullName);
}
private double pdfLeftMargin = 0;
private double pdfRightMargin = 0;
private double pdfTopMargin = 0;
private double pdfBottomMargin = 0;
/// <summary>
/// 另存为
/// </summary>
/// <returns>是否成功</returns>
public bool SaveAs()
{
if (viewer == null)
{
return false;
}
string strFileName = DocHelper.SaveDialog(FileFullName);
if (string.IsNullOrEmpty(strFileName))
{
return false;
}
FileFullName = strFileName;
FileInfo fi = new FileInfo(FileFullName);
bool bSuccess = false;
string fileExtension = fi.Extension;
if (fileExtension == ".pdf")
{
FrmPdfExport frmPafSetting = new FrmPdfExport(FileFullName);
if (frmPafSetting.ShowDialog(this) != DialogResult.OK)
{
return false;
}
FileFullName = frmPafSetting.FilePath;
int pdfPaperType = frmPafSetting.PaperType;
pdfLeftMargin = frmPafSetting.LeftMargin;
pdfRightMargin = frmPafSetting.RightMargin;
pdfTopMargin = frmPafSetting.TopMargin;
pdfBottomMargin = frmPafSetting.BottomMargin;
int pdfRgpAHIndex = frmPafSetting.RgpAHIndex;
int pdfRgpPaperIndex = frmPafSetting.RgpPaperIndex;
bSuccess = viewer.SaveFile(FileFullName, pdfLeftMargin, pdfRightMargin,
pdfTopMargin, pdfBottomMargin, pdfPaperType, pdfRgpAHIndex, pdfRgpPaperIndex);
if (bSuccess)
{
this.Text = fi.Name;
this.isNewDocument = false;
}
return bSuccess;
}
bSuccess = viewer.SaveFile(FileFullName);
if (bSuccess)
{
this.Text = fi.Name;
this.isNewDocument = false;
}
return bSuccess;
}
/// <summary>
/// 另存到新文件
/// </summary>
/// <param name="newFile">文件名</param>
/// <returns>是否成功</returns>
public bool SaveTo(string newFile)
{
if (viewer == null)
{
return false;
}
FileInfo fi = new FileInfo(newFile);
bool bSuccess = viewer.SaveFile(newFile);
if (bSuccess)
{
this.Text = fi.Name;
this.isNewDocument = false;
}
return bSuccess;
}
public bool NewFile(string fileName, GeoSigmaXY.eViewType vType = GeoSigmaXY.eViewType.plane)
{
if (viewer == null)
{
return false;
}
FileFullName = fileName;
//viewer.
viewer.NewFile(fileName, vType);
this.Text = fileName;
LoadLayerTree();
this.isNewDocument = true;
tspElement.Enabled = true;
return true;
}
/// <summary>
/// 打开文件
/// </summary>
/// <param name="filePath">文件全路径</param>
/// <param name="setZColor">是否以色块显示点数据</param>
/// <returns>是否成功</returns>
public bool OpenFile(string filePath, bool setZColor = false, GeoSigmaXY.eViewType vType = GeoSigmaXY.eViewType.plane)
{
// viewer.EnableMeshPack = this.EnableMeshPack;
if (viewer.OpenFile(filePath, vType) == false)
{
return false;
}
if (setZColor)
{
this.SetZColorDefault(this.ZColorWidth);
}
this.isNewDocument = false;
FileFullName = filePath;
this.Text = Path.GetFileName(filePath);
string extention = Path.GetExtension(filePath);
extention = extention.ToUpper();
if (extention == ".JPG" || extention == ".BMP" || extention == ".PNG")
{
this.isNewDocument = true;
string directory = Path.GetDirectoryName(filePath);
string fileName = Path.GetFileNameWithoutExtension(filePath);
string newExtension = "kev";
FileFullName = Path.Combine(directory, $"{fileName}.{newExtension}");
}
LoadLayerTree();
tspElement.Enabled = true;
return true;
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="fileFullPath">文件全路径</param>
/// <returns>是否成功</returns>
public bool DeleteFile(string fileFullPath)
{
try
{
if (File.Exists(fileFullPath))
{
File.Delete(fileFullPath);
}
else
{
return false;
}
}
catch (Exception e)
{
return false;
}
return true;
}
/// <summary>
/// 导出到图片
/// </summary>
/// <param name="fileFullPath">文件全路径</param>
/// <returns>是否成功</returns>
public bool Export2Image(string fileFullPath)
{
return viewer.Export2Image(fileFullPath);
}
private void BindEvent()
{
//layerTree.LayerActiveEvent += layerTree_LayerSelect;
//layerTree.StatiscElementLoadEvent += LoadElementData;
//layerTree.StatiscTrapsLoadEvent += LoadTrapsData;
//layerTree.StatiscFaultLoadEvent += LoadFaultDataNew;
//layerTree.StatiscSurveyLoadEvent += LoadSurveyData;
//layerTree.StatiscLayerLoadEvent += LoadLayerData;
//layerTree.StatiscWellsLoadEvent += LoadWellsData;
//layerTree.StatiscVolumnLoadEvent += LoadVolumnData;
//layerTree.StatiscResourceAnalysisEvent += LoadResourcComment;
//layerTree.StatiscRangeEvent += LoadRangeRation;
//layerTree.StatiscCurveCrossPointEvent += StatiscCurveCrossPoints;
//layerTree.StatiscWellInclinationPointEvent += LoadWellInclination;
//layerTree.StatiscBlockElementsEvent += StatiscBlockElements;
//layerTree.StatiscAzimuthElementsEvent += StatiscAzimuthElements;
//layerTree.BeginStatisticsEvent += LayerTree_BeginStatisticsEvent;
//layerTree.EndStatisticsEvent += LayerTree_EndStatisticsEvent;
//layerTree.DrawerGotFocus += (sender, ea) =>
//{
// DrawerGotFocus?.Invoke(sender, ea);
//};
viewer.ENCurveLoadHandler += LoadElementData;
viewer.DrawerGotFocus += (obj, ea) =>
{
DrawerGotFocus?.Invoke(obj, ea);
};
if (this.viewer.ViewerCommandStart == null)
{
this.viewer.ViewerCommandStart += OnCommandStart;
}
if (this.viewer.ViewerCommandFinish == null)
{
this.viewer.ViewerCommandFinish += OnCommandFinish;
}
this.viewer.MouseMoveEvent += ShowMouseInfo;
if (this.viewer.SelectedElementChanged == null)
{
this.viewer.SelectedElementChanged += viewer_SelectedElementChanged;
}
if (this.viewer.Drawer.SelectedWell == null)
{
this.viewer.Drawer.SelectedWell += viewer_SelectedWell;
}
this.viewer.ChangeLayerEvent += OnChangeLayer;
this.viewer.GetLengthAngleEvent += GetLengthAngle;
Application.Idle += Application_Idle;
}
private WellTrackAccessor trackAccessor; //井道属性界面与数据的关联器
private void viewer_SelectedWell(object sender, EventArgs e) //选中井或剖面的事件函数
{
GeoSigmaWellPoleXY wellGeo = (GeoSigmaWellPoleXY)this.viewer.Geo;
try
{
trackAccessor = new WellTrackAccessor(wellGeo);
trackAccessor.bOpenWorkArea = PcgDrawR.FormMain.s_bOpenWorkArea;
object obj = trackAccessor.LoadWellTrack(this.viewer.mViewType);
PropertyWellControl.SelectedObject = obj;
PropertyWellControl.ExpandPropertyGridValueColumn();
PropertyWellControl.Visible = true;
}
catch (Exception ex)
{
}
}
private void PnlWellProperty_ElementChanged(object sender, EventArgs e)
{
if (trackAccessor != null)
{
trackAccessor.SaveWellTrack(pnlWellProperty.SelectedObject, this.viewer.mViewType);
if (pnlWellProperty.SelectedObject is SigmaDrawerElement.WellPole)
{//井柱发生变化如果深度发生变化需要更改VScroll
this.ViewControl.ViewExtendWidth();
}
viewer.Drawer.EnableRedraw = true;
viewer.Drawer.ReDraw();
}
}
private void LayerTree_EndStatisticsEvent(string title)
{
WaitProgressEvent?.Invoke(this, new ProgressEventArgs(title, 0, false));
}
private void LayerTree_BeginStatisticsEvent(string title)
{
WaitProgressEvent?.Invoke(this, new ProgressEventArgs(title, 0, true));
}
private object ConvertToType(string value, Type targetType)
{
if (string.IsNullOrWhiteSpace(value))
{
return DBNull.Value;
}
try
{
if (targetType == typeof(int))
{
return int.Parse(value);
}
if (targetType == typeof(double))
{
return double.Parse(value);
}
if (targetType == typeof(long))
{
return long.Parse(value);
}
if (targetType == typeof(string))
{
return value;
}
throw new InvalidCastException($"不支持的目标类型: {targetType}");
}
catch (Exception ex)
{
throw new FormatException($"无法将值 '{value}' 转换为类型 {targetType}: {ex.Message}");
}
}
private void StatiscCurveCrossPoints(string xml)
{
}
private void LoadWellInclination(string xml)
{
if (string.IsNullOrEmpty(xml))
{
dgvStatics.DataSource = null;
ShowStatisticResult?.Invoke(this, new DataControlArgs("井点倾角统计"));
return;
}
// 创建表
DataTable dtStatistic = new DataTable("ROOT");
dtStatistic.Columns.AddRange(new DataColumn[]
{
new DataColumn("序号", Type.GetType("System.Int32")),
new DataColumn("井名", Type.GetType("System.String")),
new DataColumn("倾角", Type.GetType("System.Double")),
new DataColumn("井点X", Type.GetType("System.Double")),
new DataColumn("井点Y", Type.GetType("System.Double")),
new DataColumn("井点Z", Type.GetType("System.Double")),
new DataColumn("目标X", Type.GetType("System.Double")),
new DataColumn("目标Y", Type.GetType("System.Double")),
new DataColumn("目标Z", Type.GetType("System.Double")),
new DataColumn("Position", Type.GetType("System.String")),
});
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
foreach (XmlNode currNode in doc.DocumentElement.ChildNodes)
{
DataRow newRow = dtStatistic.NewRow();
foreach (XmlNode childNode in currNode.ChildNodes)
{
string columnName = childNode.Name;
string cellValue = childNode.InnerText;
if (dtStatistic.Columns.Contains(columnName))
{
DataColumn column = dtStatistic.Columns[columnName];
newRow[columnName] = ConvertToType(cellValue, column.DataType);
}
}
dtStatistic.Rows.Add(newRow);
}
dgvStatics.DataSource = dtStatistic;
ShowStatisticResult?.Invoke(this, new DataControlArgs("井点倾角统计"));
}
catch (Exception ex)
{
MessageBox.Show($"加载统计数据失败: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
public bool OpenXy(IntPtr pXy)
{
if (pXy == IntPtr.Zero)
{
return false;
}
//viewer.EnableMeshPack = this.EnableMeshPack;
if (viewer.OpenXy(pXy) == false)
{
return false;
}
viewer.Drawer.Geo.AutoReleaseView = AutoReleaseView;
FileFullName = string.Empty;
LoadLayerTree();
this.isNewDocument = false;
return true;
}
/// <summary>
/// 设置标题
/// </summary>
/// <param name="filePath">文件全路径或文件名</param>
private void SetTitle(string filePath)
{
this.Text = Path.GetFileName(filePath);
}
/// <summary>
/// 查找并激活图元
/// </summary>
/// <param name="elementName">图元名称</param>
/// <returns>查找结果</returns>
public int ActiveElementByName(string elementName)
{
if (elementName == null)
{
throw new ArgumentNullException(nameof(elementName));
}
int nReturn = viewer.Geo.ActiveElementByName(elementName);
this.ToolRedraw();
return nReturn;
}
/// <summary>
/// 激活图元
/// </summary>
/// <param name="elementName">图元名称</param>
/// <param name="x">x</param>
/// <param name="y">y</param>
/// <param name="layerName">图层名称</param>
public void ActiveElement(string elementName, double x, double y, string layerName)
{
if (elementName == null)
{
throw new ArgumentNullException(nameof(elementName));
}
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
//int nReturn = viewer.Geo.ActiveElementByName(elementName);
long pos = viewer.Geo.FindPointByInfo(elementName, x, y, layerName);
if (pos > 0)
{
this.ActiveElement(pos);
this.ToolRedraw();
}
return;
}
/// <summary>
/// 点类数据修改.
/// </summary>
/// <param name="elementName">Name of the element.</param>
/// <param name="x">The x.</param>
/// <param name="y">The y.</param>
/// <param name="layerName">Name of the layer.</param>
/// <param name="newName">The new name.</param>
/// <param name="newX">The new x.</param>
/// <param name="newY">The new y.</param>
/// <returns></returns>
public bool ReplacePoint(string elementName, double x, double y, string layerName
, string newName, double newX, double newY)
{
long pos = viewer.Geo.FindPointByInfo(elementName, x, y, layerName);
string strElementData = viewer.Geo.GetElementByPosition(pos);
//DrawerElementHelp elementHelp = new DrawerElementHelp();
DrawerElementProperty property = DrawerElementHelp.Deserialize(strElementData);
if (property == null)
{
return false;
}
else if (property.ElementType == DrawElementType.ELEMENT_POINT)
{
DrawerPoint dp = property.Element as DrawerPoint;
if (dp != null)
{
dp.Name = newName;
dp.X = newX;
dp.Y = newY;
string strData = DrawerElementHelp.Serialize(property);
if (viewer.Geo.SelectSetElement(strData, pos))
{
return true;
}
}
}
return false;
}
private void btnTest_Click(object sender, EventArgs e)
{
ActiveElementByName("Point");
}
#endregion 文件操作
public bool IsDocumentModified()
{
if (viewer == null || viewer.Geo == null)
{
return false;
}
return viewer.GetGeoSigma().Sigma_IsDocumentModified();
}
public void SetDocumentModified(bool isModified)
{
if (viewer == null || viewer.Geo == null)
{
return;
}
viewer.GetGeoSigma().Sigma_SetDocumentModified(isModified);
}
public void PrintDraw()
{
FormPrintPreview frmPrint = new FormPrintPreview(viewer.GetGeoSigma())
{
StartPosition = FormStartPosition.CenterScreen,
};
frmPrint.ShowDialog(this);
viewer.Redraw();
}
/// <summary>
/// 处理Esc按键事件.
/// </summary>
public void Escape()
{
if (viewer == null)
{
return;
}
viewer.ActiveTool = DrawToolType.Finsih;
viewer.Redraw();
}
/// <summary>
/// 清理图层树
/// </summary>
public void ClearLayerTree()
{
//if (layerTree != null)
//{
// layerTree.ResetLayers(string.Empty);
//}
}
/// <summary>
/// 增加树控件
/// </summary>
public void LoadLayerTree()
{
//if (viewer == null)
//{
// layerTree.ResetLayers(string.Empty);
// return;
//}
//string strLayers = viewer.GetLayers(true);
//CurrentLayer = viewer.GetCurrentLayer();
//layerTree.DrawViewer = this.viewer;
//layerTree.ResetLayers(strLayers);
//layerTree.SetCurrentLayer(CurrentLayer);
// CurrentLayer = CurrentLayer;
// this.navigatorLeft.Pages[0].Text = "当前图层-" + CurrentLayer;
}
public void ReActiveCurrentLayer()
{
if (viewer != null)
{
//CurrentLayer = viewer.GetCurrentLayer();
//layerTree.SetCurrentLayer(CurrentLayer);
}
}
public void OnChangeLayer(string eventKind)
{
if (eventKind == "update layer")
{
LoadLayerTree();
}
else if (eventKind == "change current layer")
{
// LoadLayerTree();
string layerName = viewer.Geo.GetCurrentLayer();
//layerTree.SetCurrentLayer(layerName);
}
else if (eventKind == "change element layer")
{
}
}
/// <summary>
/// 设置图层的曲线样式
/// </summary>
/// <param name="curveStyle">样式</param>
/// <param name="layerName">图层名称</param>
/// <param name="propertyIndex">样式的索引号</param>
public void SetLayerStyle(CurveView curveStyle, string layerName, int propertyIndex)
{
if (curveStyle == null)
{
throw new ArgumentNullException(nameof(curveStyle));
}
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
if (propertyIndex < 0)
{
throw new ArgumentOutOfRangeException(nameof(propertyIndex));
}
//string strCurveStyle = ((CurveView)curveStyle).SerialXml();
//strCurveStyle = strCurveStyle.Replace("true", "1");
//strCurveStyle = strCurveStyle.Replace("false", "0");
viewer.SetLayerStyle(curveStyle, layerName, propertyIndex);
}
/// <summary>
/// 重命名图元
/// </summary>
/// <param name="oldName">旧名称</param>
/// <param name="newName">新名称</param>
/// <param name="layerName">图层</param>
/// <returns>替换的数量</returns>
public int RenameElement(string oldName, string newName, string layerName)
{
if (oldName == null)
{
throw new ArgumentNullException(nameof(oldName));
}
if (newName == null)
{
throw new ArgumentNullException(nameof(newName));
}
if (layerName == null)
{
throw new ArgumentNullException(nameof(layerName));
}
int nCount = viewer.RenameElement(oldName, newName, layerName);
return nCount;
}
///// <summary>
///// 重新设置线样式
///// </summary>
///// <param name="curveName">名称</param>
///// <param name="layerName">图层</param>
///// <param name="curveStyle">样式</param>
///// <returns>应用数量</returns>
//public int ResetCurveStyle(string curveName, string layerName, CurveView curveStyle)
//{
// int nCount = viewer.ResetCurveStyle(curveName, layerName, curveStyle);
// return nCount;
//}
///// <summary>
///// 获取图层的样式
///// </summary>
///// <param name="layerName">图层名称</param>
///// <returns>图层样式</returns>
//public DrawerStyle GetLayerLayerStyle(string layerName)
//{
// string strCurveData = string.Empty;
// string strPointData = string.Empty;
// viewer.GetLayerStyleData(layerName, ref strCurveData, ref strPointData);
// DrawerStyle drawerStyle = new DrawerStyle();
// if (strCurveData != string.Empty)
// {
// drawerStyle.DeserializeCurve(strCurveData);
// }
// if (strPointData != string.Empty)
// {
// drawerStyle.DeserializePoint(strPointData);
// }
// return drawerStyle;
//}
private void layerTree_LayerSelect(string layerName)
{
// DrawerGotFocus?.Invoke(layerName, EventArgs.Empty);
string strCurveData = string.Empty;
string strPointData = string.Empty;
viewer.GetLayerStyleData(layerName, ref strCurveData, ref strPointData);
string strLayerText = layerName.Replace("Layer:\\", string.Empty);
// this.navigatorLeft.Pages[0].Text = layerName.Replace("Layer:\\", string.Empty);
// 当前层位设置事件
LayerSelected?.Invoke(this, new PropertyChangedEventArgs(strLayerText));
DrawerStyle drawerStyle = new DrawerStyle();
if (strCurveData != string.Empty)
{
drawerStyle.DeserializeCurve(strCurveData);
for (int i = 0; i < drawerStyle.CurveStyle.Properties.Count; i++)
{
drawerStyle.CurveStyle.Properties[i].Geo = this.viewer.GetGeoSigma();
}
}
if (strPointData != string.Empty)
{
drawerStyle.DeserializePoint(strPointData);
drawerStyle.PontStyle.Geo = this.viewer.GetGeoSigma();
}
}
private void UpdateDrawerElementPropertyGeo(DrawerElementProperty property)
{
if (property.PointStyle != null)
{
property.PointStyle.Geo = viewer.Geo;
}
if (property.CurveStyle != null)
{
foreach (var curveView in property.CurveStyle.Properties)
{
curveView.Geo = viewer.Geo;
}
}
}
/// <summary>
/// 设置图元属性(通用图元)
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void viewer_SelectedElementChanged(object sender, ElementArgs e)
{
if (e == null)
{
return;
}
DrawerElementProperty property = e.Data;
UpdateDrawerElementPropertyGeo(property);
pnlProperty.ShowElementProperty(property, e.Position);
// string strLayerName = string.Empty;
if (this.viewer.SelectGetLayerName(out string strLayerName))
{
//this.layerTree.SelectLayer(strLayerName);
}
}
#region 工具栏操作
public void GridGeneraterContour()
{
viewer.GridGenerateContour();
}
/// <summary>
/// 当前绘图状态
/// </summary>
public DrawToolType ActiveTool
{
get
{
return viewer.ActiveTool;
}
}
public ViewOperationKind ViewStatus
{
get
{
return this.viewer.GetViewOperationKind();
}
}
public void ToolGridSmooth()
{
viewer.GridSmooth();
}
/// <summary>
/// 放大
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">e</param>
private void btnZoomIn_Click(object sender, EventArgs e)
{
viewer.ZoomIn();
}
public void ToolZoomIn()
{
viewer.ZoomIn();
}
/// <summary>
/// 缩小
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">e</param>
private void btnZoomOut_Click(object sender, EventArgs e)
{
viewer.ZoomOut();
}
public void ToolZoomOut()
{
viewer.ZoomOut();
}
private void tsbPan_Click(object sender, EventArgs e)
{
tsbPan.Checked = !tsbPan.Checked;
if (tsbPan.Checked == true)
{
viewer.SetViewOperationKind(ViewOperationKind.ViewPan);
}
else
{
viewer.SetViewOperationKind(ViewOperationKind.Invalid);
}
tsbViewWindow.Checked = false; //去掉窗口缩放按钮的选中图标
}
/// <summary>
/// 设置浏览方式,窗口方式、拖动方式、取消浏览
/// </summary>
/// <param name="operationKind">浏览方式</param>
public void SetViewOperation(ViewOperationKind operationKind)
{
viewer.SetViewOperationKind(operationKind);
}
private void tsbViewWindow_Click(object sender, EventArgs e)
{
tsbViewWindow.Checked = !tsbViewWindow.Checked;
if (tsbViewWindow.Checked == true)
{
viewer.SetViewOperationKind(ViewOperationKind.ViewWindow);
}
else
{
viewer.SetViewOperationKind(ViewOperationKind.Invalid);
}
this.tsbPan.Checked = false; //去掉平移按钮的选中状态
}
private void tsbViewAll_Click(object sender, EventArgs e)
{
ToolViewAll();
}
/// <summary>
/// 全图显示
/// </summary>
public void ToolViewAll()
{
viewer.ViewAll();
}
/// <summary>
/// 扩展矩形范围大小到全屏
/// </summary>
/// <param name="rect">范围</param>
public void Extend(RectangleF rect)
{
viewer.Extend(rect);
}
public void InitlizePaint(RectangleF rect)
{
viewer.InitlizePaint(rect);
}
/// <summary>
/// 重绘
/// </summary>
/// <param name="sender">sender</param>
/// <param name="e">e</param>
private void tsbRedraw_Click(object sender, EventArgs e)
{
ToolRedraw();
}
public void ToolRedraw()
{
viewer.Redraw();
}
private void tsbToolDefault_Click(object sender, EventArgs e)
{
ToolDefault();
}
public void ToolRestore()
{
viewer.ToolRestore();
}
public void RestoreToolDefault()
{
viewer.RestoreToolDefault();
}
/// <summary>
/// 默认状态
/// </summary>
public void ToolDefault()
{
viewer.ActiveTool = DrawToolType.Default;
}
private void tsbSelect_Click(object sender, EventArgs e)
{
if (ToolSelect())
{
//CancelSelectedStatusOfButton(tsbSelect);
}
}
/// <summary>
/// 选择工具
/// </summary>
/// <returns>成功/失败</returns>
public bool ToolSelect()
{
if (viewer.ActiveTool == DrawToolType.Select)
{
tsbSelect.Checked = true;
return false;
}
viewer.ActiveTool = DrawToolType.Select;
return true;
}
public bool ToolWellGroupEdit()
{
if (viewer.ActiveTool == DrawToolType.WellGroupEdit)
{
//tsbSelect.Checked = true;
return false;
}
viewer.ActiveTool = DrawToolType.WellGroupEdit;
return true;
}
//public bool ToolWellBranchCurve()
//{
// if (viewer.ActiveTool == DrawToolType.EditWellGroupBranchCurveNode)
// {
// //tsbSelect.Checked = true;
// return false;
// }
// viewer.ActiveTool = DrawToolType.EditWellGroupBranchCurveNode;
// return true;
//}
private void tsbPointAdd_Click(object sender, EventArgs e)
{
ToolAddPoint();
//CancelSelectedStatusOfButton(null);
/*
List<Point2D> pts = new List<Point2D>();
Point2D pt1 = new Point2D();
pt1.pointName = "pt1";
pt1.x = 100;
pt1.y = 200;
Point2D pt2 = new Point2D();
pt2.pointName = "pt1";
pt2.x = 200;
pt2.y = 300;
pts.Add(pt1);
pts.Add(pt2);
viewer.Drawer.AddPoints("图层0", pts);
*/
}
private void crossPointButton_Click(object sender, EventArgs e)
{
ToolAddCrossPoint();
}
/// <summary>
/// 加点工具
/// </summary>
public void ToolAddPoint()
{
viewer.ActiveTool = DrawToolType.Point;
}
/// <summary>
/// 绘制十字点
/// </summary>
public void ToolAddCrossPoint()
{
viewer.ActiveTool = DrawToolType.CrossPoint;
}
private void tsbCurveAdd_Click(object sender, EventArgs e)
{
ToolAddCurve();
}
/// <summary>
/// 画线工具
/// </summary>
public void ToolAddCurve()
{
viewer.ActiveTool = DrawToolType.Curve;
}
private void tsbProportionAdd_Click(object sender, EventArgs e)
{
ToolAddProportion();
}
/// <summary>
/// 画比例尺
/// </summary>
public void ToolAddProportion()
{
viewer.ActiveTool = DrawToolType.Proportion;
}
private void rectangularCSGridButton_Click(object sender, EventArgs e)
{
ToolCSGrid();
}
/// <summary>
/// 坐标网工具
/// </summary>
public void ToolCSGrid()
{
viewer.ActiveTool = DrawToolType.RectangularCSGrid;
}
private void drawRectangleButton_Click(object sender, EventArgs e)
{
ToolRectangle();
}
/// <summary>
/// 矩形绘制工具
/// </summary>
public void ToolRectangle()
{
viewer.ActiveTool = DrawToolType.Rectangle;
}
private void sbtnEllipse_ButtonClick(object sender, EventArgs e)
{
ToolStripMenuItem item = sbtnEllipse.Tag as ToolStripMenuItem;
item.PerformClick();
}
private void drawEllipseButton_Click(object sender, EventArgs e)
{
sbtnEllipse.Tag = sender;
ToolEllipse();
sbtnEllipse.Image = ((ToolStripMenuItem)sender).Image;
sbtnEllipse.ToolTipText = ((ToolStripMenuItem)sender).ToolTipText;
}
/// <summary>
/// 椭圆工具
/// </summary>
public void ToolEllipse()
{
viewer.ActiveTool = DrawToolType.Ellipse;
}
private void drawArcButton_Click(object sender, EventArgs e)
{
sbtnEllipse.Tag = sender;
ToolAcr();
sbtnEllipse.Image = ((ToolStripMenuItem)sender).Image;
sbtnEllipse.ToolTipText = ((ToolStripMenuItem)sender).ToolTipText;
}
/// <summary>
/// 弧工具
/// </summary>
public void ToolAcr()
{
viewer.ActiveTool = DrawToolType.Arc;
}
private void drawChordButton_Click(object sender, EventArgs e)
{
sbtnEllipse.Tag = sender;
ToolChord();
sbtnEllipse.Image = ((ToolStripMenuItem)sender).Image;
sbtnEllipse.ToolTipText = ((ToolStripMenuItem)sender).ToolTipText;
}
/// <summary>
/// 玄工具
/// </summary>
public void ToolChord()
{
viewer.ActiveTool = DrawToolType.Chord;
}
private void drawPieButton_Click(object sender, EventArgs e)
{
sbtnEllipse.Tag = sender;
ToolPie();
sbtnEllipse.Image = ((ToolStripMenuItem)sender).Image;
sbtnEllipse.ToolTipText = ((ToolStripMenuItem)sender).ToolTipText;
}
/// <summary>
/// 饼状工具
/// </summary>
public void ToolPie()
{
viewer.ActiveTool = DrawToolType.Pie;
}
private void drawEquilateralButton_Click(object sender, EventArgs e)
{
sbtnEllipse.Tag = sender;
ToolEquilateral();
sbtnEllipse.Image = ((ToolStripMenuItem)sender).Image;
sbtnEllipse.ToolTipText = ((ToolStripMenuItem)sender).ToolTipText;
}
/// <summary>
/// 等边多边形工具
/// </summary>
public void ToolEquilateral()
{
viewer.ActiveTool = DrawToolType.Equilateral;
}
private void drawTextButton_Click(object sender, EventArgs e)
{
ToolText();
}
/// <summary>
/// 文本绘制工具
/// </summary>
public void ToolText()
{
if (viewer.ActiveTool == DrawToolType.Text)
{
viewer.ActiveTool = DrawToolType.Finsih;
}
else
{
viewer.ActiveTool = DrawToolType.Text;
}
}
private void breakDirectButton_Click(object sender, EventArgs e)
{
ToolBreakDirect();
}
/// <summary>
/// 直接打断
/// </summary>
public void ToolBreakDirect()
{
viewer.ActiveTool = DrawToolType.BreakDirect;
}
private void breakCurveButton_Click(object sender, EventArgs e)
{
ToolBreakCurve();
}
/// <summary>
/// 曲线打断
/// </summary>
public void ToolBreakCurve()
{
viewer.ActiveTool = DrawToolType.Break;
}
private void deleteNormalButton_Click(object sender, EventArgs e)
{
ToolDeleteNormal();
}
public void ToolDeleteNormal()
{
viewer.ActiveTool = DrawToolType.Delete;
}
private void deleteInButton_Click(object sender, EventArgs e)
{
ToolDeleteIn();
}
/// <summary>
/// 区域内删除
/// </summary>
public void ToolDeleteIn()
{
viewer.ActiveTool = DrawToolType.DeleteIn;
}
private void deleteOutButton_Click(object sender, EventArgs e)
{
ToolDeleteOut();
}
/// <summary>
/// 区域外删除
/// </summary>
public void ToolDeleteOut()
{
viewer.ActiveTool = DrawToolType.DeleteOut;
}
private void extendCurveButton_Click(object sender, EventArgs e)
{
//ToolExtendCurve();
}
private void extendCurveTSSButton_Click(object sender, EventArgs e)
{
ToolExtendCurve();
}
/// <summary>
/// 延伸曲线
/// </summary>
public void ToolExtendCurve()
{
viewer.ActiveTool = DrawToolType.ExtendCurve;
}
private void trimCurveButton_Click(object sender, EventArgs e)
{
ToolTrimCurve();
}
/// <summary>
/// 曲线裁剪
/// </summary>
public void ToolTrimCurve()
{
viewer.ActiveTool = DrawToolType.TrimCurve;
}
private void closeCurveButton_Click(object sender, EventArgs e)
{
ToolCloseCurve();
}
/// <summary>
/// 曲线闭合
/// </summary>
public void ToolCloseCurve()
{
viewer.ActiveTool = DrawToolType.CloseCurve;
}
private void moveCurveNameButton_Click(object sender, EventArgs e)
{
ToolMoveCurveName();
}
/// <summary>
/// 移动曲线名字
/// </summary>
public void ToolMoveCurveName()
{
viewer.ActiveTool = DrawToolType.MoveCurveName;
}
private void linkCurveButton_Click(object sender, EventArgs e)
{
ToolJoinCurve();
}
/// <summary>
/// 连接曲线
/// </summary>
public void ToolJoinCurve()
{
viewer.ActiveTool = DrawToolType.LinkCurve;
}
public void ToolMergeCurve()
{
var dialog = new MergeCurveDialog();
if (dialog.ShowDialog() != DialogResult.OK)
{
return;
}
viewer.ActiveTool = DrawToolType.MergeCurve;
viewer.Geo.SetLinkCurveMergeMode(dialog.Settings.MergeTypeNum, dialog.Settings.DeleteOld);
}
public void ToolAutoJoinCurves()
{
int nResult = viewer.AutoJoinCurves();
if (nResult > 0)
{
viewer.Redraw();
}
}
private void reverseCurveButton_Click(object sender, EventArgs e)
{
ToolReverseCurve();
}
/// <summary>
/// 反转曲线工具
/// </summary>
public void ToolReverseCurve()
{
viewer.ActiveTool = DrawToolType.ReverseCurve;
}
private void nameToZButton_Click(object sender, EventArgs e)
{
ToolName2Z();
}
/// <summary>
/// 名字转Z值
/// </summary>
public void ToolName2Z()
{
viewer.ActiveTool = DrawToolType.NameToZ;
}
#endregion 工具栏操作
private void copybtn_Click(object sender, EventArgs e)
{
ToolCopy();
}
public void ToolCopy()
{
viewer.Copy();
}
private void pastebtn_Click(object sender, EventArgs e)
{
ToolPaste();
}
public void ToolPaste()
{
viewer.Paste();
}
private void cutbtn_Click(object sender, EventArgs e)
{
ToolCut();
}
public void ToolCut()
{
viewer.CutX();
}
//private void viewer_DrawerGotFocus(object sender, EventArgs e)
//{
// if (DrawerGotFocus != null)
// {
// DrawerGotFocus(sender, e);
// }
//}
private void rangeToImageButton_Click(object sender, EventArgs e)
{
ToolImageCutRange();
}
public void ToolImageCutRange()
{
viewer.ActiveTool = DrawToolType.RangeToImage;
}
public void ToolImageCutRangeEx()
{
viewer.ActiveTool = DrawToolType.RangeToImageEx;
}
/// <summary>
/// 多边形截图(任意边界截图)
/// </summary>
public void ToolImageCutPolygon()
{
long pos = viewer.Geo.SelectGetPolygon();
if (pos <= 0)
{
MessageBox.Show("先选中一个多边形!");
return;
}
viewer.ActiveTool = DrawToolType.PolygonToImage;
}
private void copyAllToImageButton_Click(object sender, EventArgs e)
{
ToolImageCutAll();
}
public void ToolImageCutAll()
{
viewer?.ImageCutAll();
}
private void copyWindowButton_Click(object sender, EventArgs e)
{
ToolImageCutWindow();
}
public void ToolImageCutWindow()
{
viewer.ImageCutWindow();
}
private void leftAlignButton_Click(object sender, EventArgs e)
{
ToolAlignLeft();
}
public void ToolAlignLeft()
{
viewer.ActiveTool = DrawToolType.LeftAlignment;
}
private void rightAlignButton_Click(object sender, EventArgs e)
{
ToolAlignRight();
}
public void ToolAlignRight()
{
viewer.ActiveTool = DrawToolType.RightAlignment;
}
private void topAlignButton_Click(object sender, EventArgs e)
{
ToolAlignTop();
}
public void ToolAlignTop()
{
viewer.ActiveTool = DrawToolType.TopAlignment;
}
private void bottomAlignButton_Click(object sender, EventArgs e)
{
ToolAlignBottom();
}
public void ToolAlignBottom()
{
viewer.ActiveTool = DrawToolType.BottomAlignment;
}
private void hCenterAlignButton_Click(object sender, EventArgs e)
{
ToolAlignCenterH();
}
public void ToolAlignCenterH()
{
viewer.ActiveTool = DrawToolType.HCenterAlignment;
}
private void vCenterAlignButton_Click(object sender, EventArgs e)
{
ToolAlignCenterV();
}
public void ToolAlignCenterV()
{
viewer.ActiveTool = DrawToolType.VCenterAlignment;
}
private void displaOrderTopButton_Click(object sender, EventArgs e)
{
ToolOrderTop();
}
/// <summary>
/// 对选中图元进行排序
/// </summary>
/// <param name="type">O: 最上显示; 1: 最下显示;2: 上移一层; 3: 下移一层</param>
private void ToolOrder(int type)
{
viewer.Geo.DisplayOrder_Set(type);
viewer.Geo.EnableRedraw(true);
viewer.Drawer.ReDraw();
}
public void ToolOrderTop()
{
ToolOrder(0);
}
public void ToolOrderBottom()
{
ToolOrder(1);
}
public void ToolOrderUp()
{
ToolOrder(2);
}
public void ToolOrderDown()
{
ToolOrder(3);
}
private void displayOrderBottomButton_Click(object sender, EventArgs e)
{
ToolOrderBottom();
}
private void displayOrderFrontButton_Click(object sender, EventArgs e)
{
ToolOrderUp();
}
private void displayOrderBackButton_Click(object sender, EventArgs e)
{
ToolOrderDown();
}
private void horizontalMirrorButton_Click(object sender, EventArgs e)
{
ToolMirrorH();
}
public void ToolMirrorH()
{
viewer.ActiveTool = DrawToolType.HorizontalMirror;
}
private void verticalMirrorButton_Click(object sender, EventArgs e)
{
ToolMirrorV();
}
public void ToolMirrorV()
{
viewer.ActiveTool = DrawToolType.VerticalMirror;
}
private void printButton_Click(object sender, EventArgs e)
{
viewer.PreviewPrint();
}
private void ratioButton_Click(object sender, EventArgs e)
{
ToolDisplayScale();
}
private void setProjectionButton_Click(object sender, EventArgs e)
{
ToolSetProjection();
}
private void changeProjectionButton_Click(object sender, EventArgs e)
{
ToolProjectionChange();
}
public void ToolDisplayScale()
{
double xs, ys;
xs = ys = 0;
viewer.GetGeoSigma().GetXYScale(out xs, out ys);
int xUnit, yUnit;
xUnit = yUnit = 0;
viewer.GetGeoSigma().GetXYUnit(out xUnit, out yUnit);
ScaleDialog dlg = new ScaleDialog()
{
StartPosition = FormStartPosition.CenterScreen,
};
dlg.Init(xs, ys, xUnit, yUnit);
dlg.ShowDialog(this.viewer);
if (dlg.IsOK == false)
{
return;
}
dlg.GetScaleAndUnit(out xs, out ys, out xUnit, out yUnit);
viewer.GetGeoSigma().SetXYScale(xs, ys);
viewer.GetGeoSigma().SetXYUnit(xUnit, yUnit);
viewer.Redraw();
}
public void ToolSetProjection()
{
ProjectionParameterDialog dlg = new ProjectionParameterDialog(viewer.GetGeoSigma())
{
StartPosition = FormStartPosition.CenterScreen,
};
if (dlg.ShowDialog(this) == DialogResult.OK)
{
viewer.GetGeoSigma().Projection_SetParameter(dlg.ProjectParameter);
viewer.Redraw();
}
}
/// <summary>
/// 生成龟背图.
/// </summary>
public void ToolVoronoi()
{
if (viewer.CreateVoronoi() > 0)
{
viewer.Redraw();
LoadLayerTree();
}
else
{
MessageBox.Show("先选中生成范围线,并且范围内至少有两个点数据!");
}
}
/// <summary>
/// Tools the voronoi2.
/// </summary>
public void ToolVoronoi2()
{
if (viewer.CreateVoronoi2() > 0)
{
viewer.Redraw();
LoadLayerTree();
}
else
{
MessageBox.Show("先选中生成范围线,并且范围内至少有两个点数据!");
}
}
/// <summary>
/// 生成三角网
/// </summary>
public void ToolDelaunay()
{
if (viewer.CreateDelaunay() > 0)
{
viewer.Redraw();
LoadLayerTree();
}
else
{
MessageBox.Show("先选中生成范围线,并且范围内至少有两个点数据!");
}
}
/// <summary>
/// 生成三角网
/// </summary>
public void ToolDelaunayConstraint()
{
if (viewer.CreateDelaunayConstraint() > 0)
{
viewer.Redraw();
LoadLayerTree();
}
else
{
MessageBox.Show("先选中生成范围线,并且范围内至少有两个点数据!");
}
}
/// <summary>
/// 是否有选中区域
/// </summary>
/// <returns>bool</returns>
public bool HasSelectedArea()
{
return viewer?.Geo.SelectGetCount() != -1;
}
private int SelectedWellsCount()
{
if (viewer.Geo == null)
{
return -1;
}
return viewer.Geo.Select_PointCount();
}
/// <summary>
/// 抽稀
/// </summary>
public void ToolSimplify()
{
// 获取选中的点
if (!HasSelectedArea())
{
MessageBox.Show("请先选中一个区域");
return;
}
if (SelectedWellsCount() <= 0)
{
MessageBox.Show("选中区域不包含任何点,无法抽稀");
return;
}
var dialog = new SimplifyDialog
{
StartPosition = FormStartPosition.CenterScreen,
};
DialogResult result = dialog.ShowDialog(this);
if (result == DialogResult.OK)
{
viewer?.GetGeoSigma().SimplifySelectPoints(dialog.Value);
viewer?.Redraw();
}
}
private void zoominDecorationButton_Click(object sender, EventArgs e)
{
PropertyZoomIn();
}
public void PropertyZoomIn()
{
viewer.GetGeoSigma().GeoSigma_ScaleFont(true);
viewer.Redraw();
}
private void zoomoutDecorationButton_Click(object sender, EventArgs e)
{
PropertyZoomOut();
}
public void PropertyZoomOut()
{
viewer.GetGeoSigma().GeoSigma_ScaleFont(false);
viewer.Redraw();
}
private void curveDensityNodeButton_Click(object sender, EventArgs e)
{
ToolCurveDensity();
//viewer.ActiveTool = DrawToolType.CurveDensityNode;
//CancelSelectedStatusOfButton(null);
}
/// <summary>
/// 曲线节点加密处理
/// </summary>
public void ToolCurveConnect(bool deleteOrignalCurves = false)
{
int nCount = viewer.CurveConnect(deleteOrignalCurves);
if (nCount > 0)
{
// 如果添加了新的图层,则需要刷新图层树
}
}
/// <summary>
/// 曲线节点加密处理
/// </summary>
public void ToolCurveDensity()
{
viewer.CurveExcuteDensity();
}
/// <summary>
/// 曲线冗余处理事件
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void curveRedundancyButton_Click(object sender, EventArgs e)
{
//viewer.ActiveTool = DrawToolType.CurveRedundancy;
//CancelSelectedStatusOfButton(null);
ToolCurveRedundancy();
}
/// <summary>
/// 曲线冗余处理
/// </summary>
public void ToolCurveRedundancy()
{
//viewer.ActiveTool = DrawToolType.CurveRedundancy;
viewer.CurveRedundancy();
}
private void smoothCurveButton_Click(object sender, EventArgs e)
{
viewer.ActiveTool = DrawToolType.CurveSmooth;
//CancelSelectedStatusOfButton(null);
}
public void ToolCurveSmooth()
{
viewer.ActiveTool = DrawToolType.CurveSmooth;
}
private void cutOutByRectButton_Click(object sender, EventArgs e)
{
ToolCutOutByRect();
}
public void ToolCutOutByRect()
{
viewer.ActiveTool = DrawToolType.CutOutByRect;
}
private void cutInByRectButton_Click(object sender, EventArgs e)
{
ToolCutInByRect();
}
public void ToolCutInByRect()
{
viewer.ActiveTool = DrawToolType.CutInByRect;
}
private void pickupCutOutButton_Click(object sender, EventArgs e)
{
ToolCutOutByPickup();
}
public void ToolCutOutByPickup()
{
viewer.ActiveTool = DrawToolType.CutOutByPickup;
}
private void pickupCutInButton_Click(object sender, EventArgs e)
{
ToolCutInByPickup();
}
public void ToolCutInByPickup()
{
viewer.ActiveTool = DrawToolType.CutInByPickup;
}
private void calcVolumeStripMenuItem_Click(object sender, EventArgs e)
{
ToolGridVolumeCalculate();
}
public void ToolGridVolumeCalculate()
{
viewer.ActiveTool = DrawToolType.CalculateVolume;
}
private void setZOfSurfaceMenuItem_Click(object sender, EventArgs e)
{
ToolGridSetZValue();
}
public void ToolGridSetZValue()
{
viewer.ActiveTool = DrawToolType.SetZValueOfSurface;
}
public void ToolGridStatics()
{
viewer.GridStatics();
}
/// <summary>
/// 由数据重新生成网格.
/// </summary>
/// <returns>A System.Threading.Tasks.Task.</returns>
public async System.Threading.Tasks.Task CreateMeshByDataAsync()
{
await viewer.CreateMeshByDataAsync();
}
/// <summary>
/// 由图片生成网格.
/// </summary>
/// <returns>A System.Threading.Tasks.Task.</returns>
public async System.Threading.Tasks.Task CreateMeshByImageAsync()
{
await viewer.CreateMeshByImageAsync();
}
private void changeCoordinateMenuItem_Click(object sender, EventArgs e)
{
ToolCoordinateChange();
}
public void ToolProjectionChange()
{
ProjectionParameterDialog dlg = new ProjectionParameterDialog(viewer.GetGeoSigma())
{
StartPosition = FormStartPosition.CenterScreen,
};
if (dlg.ShowDialog(this) != DialogResult.OK)
{
return;
}
SigmaProjectionParameter parameter = default(SigmaProjectionParameter);
dlg.GetResult(ref parameter);
viewer.GetGeoSigma().Projection_Change(ref parameter);
viewer.Redraw();
}
/// <summary>
/// 交互XY坐标
/// </summary>
/// <param name="sender">菜单</param>
/// <param name="e">事件参数</param>
private void xyChangeMenuItem_Click(object sender, EventArgs e)
{
ToolCoordinateExchange();
}
public void ToolCoordinateExchange()
{
viewer.GetGeoSigma().GeoSigma_ExchangeXY();
viewer.Redraw();
}
private void undoButton_Click(object sender, EventArgs e)
{
ToolUndo();
}
private bool IsLayerOperation(int type)
{
var actionTypes = new List<ActionType>()
{
ActionType.ActionTypeLayerRename,
ActionType.ActionTypeLayerAdd,
ActionType.ActionTypeLayerDelete,
ActionType.ActionTypeLayerDragDrop,
};
if (Enum.IsDefined(typeof(ActionType), type))
{
return actionTypes.Contains((ActionType)type);
}
return false;
}
private bool IsLayerEmbellishOperation(int type)
{
var actionTypes = new List<ActionType>()
{
ActionType.ActionTypeLayerCurveAdd,
ActionType.ActionTypeLayerCurveDelete,
ActionType.ActionTypeLayerCurveMoveUp,
ActionType.ActionTypeLayerCurveMoveDown,
ActionType.ActionTypeLayerPointAdd,
ActionType.ActionTypeLayerPointDelete,
};
if (Enum.IsDefined(typeof(ActionType), type))
{
return actionTypes.Contains((ActionType)type);
}
return false;
}
public void ToolUndo()
{
int nActionType = viewer.Undo();
viewer.Redraw();
RefreshLayer(nActionType);
}
private void redoButton_Click(object sender, EventArgs e)
{
ToolRedo();
}
public void ToolRedo()
{
int nActionType = viewer.Redo();
viewer.Redraw();
// 重新设置图层树
RefreshLayer(nActionType);
}
// 重新设置图层树
private void RefreshLayer(int actionType)
{
if (IsLayerOperation(actionType))
{
LoadLayerTree();
}
if (IsLayerEmbellishOperation(actionType))
{
ReActiveCurrentLayer();
}
}
public void ToolCoordinateChange()
{
CoordinateChangeDialog dlg = new CoordinateChangeDialog()
{
StartPosition = FormStartPosition.CenterScreen,
};
DialogResult result = dlg.ShowDialog(this);
if (result == DialogResult.Cancel)
{
return;
}
int kind = dlg.GetOperationObjectKind();
string xExpression = dlg.GetXExpression().ToLower();
string yExpression = dlg.GetYExpression().ToLower();
string zExpression = dlg.GetZExpression().ToLower();
string lExpression = dlg.GetLExpression().ToLower();
viewer.GetGeoSigma().Coordinate_ChangeByExpression(kind, xExpression, yExpression, zExpression, lExpression);
viewer.Redraw();
}
private void OnCommandStart(DrawToolType toolType)
{
ChangeButtonStatus(toolType, true);
}
private void OnCommandFinish(DrawToolType toolType)
{
ChangeButtonStatus(toolType, false);
}
public void ChangeButtonStatus(DrawToolType toolType, bool bChecked)
{
tsbPan.Checked = false;
tsbViewWindow.Checked = false;
viewer.SetViewOperationKind(ViewOperationKind.Invalid);
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:
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:
drawTextButton.Checked = bChecked;
break;
case DrawToolType.BreakDirect:
breakDirectButton.Checked = bChecked;
break;
case DrawToolType.Break:
breakCurveButton.Checked = 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:
trimCurveButton.Checked = 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.CrossPoint:
crossPointButton.Checked = bChecked;
break;
case DrawToolType.CurvePropertySet:
tsbSetCurveProperty.Checked = bChecked;
break;
case DrawToolType.CurvePropertyClear:
tsbClearCurveProperty.Checked = bChecked;
break;
case DrawToolType.CurveNameSetting:
tsbClearCurveProperty.Checked = bChecked;
break;
case DrawToolType.FaultSymply:
btnFaultSimplyfy.Checked = bChecked;
break;
default:
break;
}
ButtonStatusChangeEvent?.Invoke(toolType, bChecked);
}
private void kdnStatiscResult_CloseAction(object sender, CloseActionEventArgs e)
{
// this.kdnStatiscResult.Height = 50;
}
/// <summary>
/// 为常用菜单添加自定义命令.
/// </summary>
/// <param name="text">The text.</param>
/// <param name="handler">The handler.</param>
/// <param name="needElement">if set to <c>true</c> [need element].</param>
/// <param name="elementType">操作的图元类型.</param>
public void InsertCommonCommand(string text, EventHandler handler, bool needElement = true
, DrawElementType elementType = DrawElementType.ELEMENT_UNKNOWN)
{
if (text == null)
{
throw new ArgumentNullException(nameof(text));
}
if (handler == null)
{
throw new ArgumentNullException(nameof(handler));
}
viewer?.InsertCommonCommand(text, handler, needElement, elementType);
}
/// <summary>
/// 加载统计元素数据
/// </summary>
/// <param name="xml">数据</param>
public void LoadElementData(string xml)
{
dgvStatics.DataSource = null;
if (!string.IsNullOrEmpty(xml))
{
double realLength = 0;
double area = 0;
int nCurveCount = 0;
int nPointCount = 0;
DataTable dtStatistic = new DataTable("ROOT");
dtStatistic.Columns.AddRange(new DataColumn[]
{
new DataColumn("序号", Type.GetType("System.Int32")),
new DataColumn("名称", Type.GetType("System.String")),
new DataColumn("类型", Type.GetType("System.String")),
new DataColumn("层位", Type.GetType("System.String")),
new DataColumn("所用符号", Type.GetType("System.String")),
new DataColumn("实际长度", Type.GetType("System.Double")),
new DataColumn("面积", Type.GetType("System.Double")),
new DataColumn("方位角", Type.GetType("System.Double")),
new DataColumn("Position", Type.GetType("System.String")),
new DataColumn("X", Type.GetType("System.Double")),
new DataColumn("Y", Type.GetType("System.Double")),
new DataColumn("Z", Type.GetType("System.Double")),
});
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
XmlNode currNode = doc.DocumentElement.FirstChild;
while (currNode != null)
{
DataRow drNew = dtStatistic.NewRow();
for (int i = 0; i < currNode.ChildNodes.Count; i++)
{
string strEle = currNode.ChildNodes[i].InnerText;
if (string.IsNullOrEmpty(strEle))
{
continue;
}
if (i == 0)
{
drNew[i] = Convert.ToInt32(strEle);
}
else if (i == 2)
{
drNew[i] = strEle;
if (strEle.Equals("曲线"))
{
nCurveCount++;
}
else if (strEle.Equals("点"))
{
nPointCount++;
}
}
else if (i == 5)
{
if (double.TryParse(strEle, out double dValue))
{
drNew[i] = dValue;
realLength += dValue;
}
else
{
drNew[i] = DBNull.Value;
}
}
else if (i == 6)
{
if (double.TryParse(strEle, out double dValue))
{
drNew[i] = dValue;
realLength += dValue;
area += dValue;
}
else
{
drNew[i] = DBNull.Value;
}
}
else if (i == 7)
{
if (double.TryParse(strEle, out double dValue))
{
drNew[i] = dValue;
realLength += dValue;
}
else
{
drNew[i] = DBNull.Value;
}
}
else
{
drNew[i] = strEle;
}
}
dtStatistic.Rows.Add(drNew);
currNode = currNode.NextSibling;
}
for (int i = 0; i < dtStatistic.Columns.Count; i++)
{
dtStatistic.Columns[i].ReadOnly = true;
}
dgvStatics.DataSource = dtStatistic;
DataRow drStatis = dtStatistic.NewRow();
drStatis[0] = dtStatistic.Rows.Count + 1;
drStatis[1] = "合计";
drStatis[2] = "曲线:" + nCurveCount + "点:" + nPointCount;
drStatis[5] = realLength;
drStatis[6] = area;
dtStatistic.Rows.Add(drStatis);
}
if (ShowStatisticResult != null)
{
ShowStatisticResult(this, new DataControlArgs("元素统计"));
}
this.StatisticVisble = true;
}
/// <summary>
/// 如果文字过长,截断并在末尾添加省略号
/// </summary>
/// <param name="str">要截断的文字</param>
/// <param name="maxLength">最大长度</param>
/// <returns>返回新的字符串</returns>
private string TruncateLongString(string str, int maxLength)
{
if (str.Length > maxLength)
{
return str.Substring(0, maxLength) + "...";
}
return str;
}
/// <summary>
/// 反转曲线的网格的Z值
/// </summary>
public void ReverseCurveAndMeshZValue()
{
viewer.GetGeoSigma().ReverseCurveAndMeshZValue();
viewer.Redraw();
}
/// <summary>
/// 删除重复元素
/// </summary>
public void DeleteDuplicationElements()
{
//var dialog = new DeduplicationDialog();
//if (dialog.ShowDialog() == DialogResult.OK)
//{
// var serializer = new XmlSerializer(typeof(DeduplicationConfig));
// var writer = new StringWriter();
// serializer.Serialize(writer, dialog.DeduplicationConfig);
// string xml = writer.ToString();
// viewer.GetGeoSigma().XyDeleteDupElements(xml);
// viewer.Redraw();
//}
}
/// <summary>
/// 加载资源评价统计数据
/// </summary>
/// <param name="xml">xml</param>
public void LoadResourcComment(string xml)
{
}
/// <summary>
/// 加载范围关系统计数据
/// </summary>
/// <param name="xml">xml</param>
public void LoadRangeRation(string xml)
{
}
/// <summary>
/// 加载统计测线数据
/// </summary>
/// <param name="xml">数据</param>
public void LoadSurveyData(string xml)
{
}
/// <summary>
/// 加载统计圈闭数据
/// </summary>
/// <param name="xml">数据内容</param>
public void LoadTrapsData(string xml)
{
}
/// <summary>
/// 断层统计
/// </summary>
public void LoadFaultDataNew(string strFileOut)
{
}
//#if DEBUG
// const string DLL_FILE_Fault = "FaultStatisticsLibD.dll";
//#else
// const string DLL_FILE_Fault = "FaultStatisticsLib.dll";
//#endif
// /// <summary>
// /// 断层统计.
// /// </summary>
// /// <param name="inputFile">The input file.</param>
// /// <param name="resultFile">The result file.</param>
// /// <param name="statisticFile">The statistic file.</param>
// /// <param name="faultLayer">The fault layer.</param>
// /// <param name="pillarStep">The pillar step.</param>
// /// <param name="textHeight">Height of the text.</param>
// /// <param name="markColor">Color of the mark.</param>
// /// <param name="markType">Type of the mark.</param>
// /// <returns>是否成功</returns>
// [DllImport(DLL_FILE_Fault, EntryPoint = "CreateFaultStatistic", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl)]
// private static extern bool CreateFaultStatistic(string inputFile, string resultFile, string statisticFile,
// string faultLayer, double pillarStep, double textHeight
// , int markColor, int markType);
/// <summary>
/// 断层统计
/// </summary>
/// <param name="xml">数据内容</param>
public void LoadFaultData(string xml)
{
}
/// <summary>
/// 获得曲面上点的Z值
/// </summary>
/// <param name="x">点坐标X</param>
/// <param name="y">点坐标Y</param>
/// <param name="dZValue">点坐标Z</param>
/// <returns>是否成功</returns>
public bool GetGridPointValue(double x, double y, ref double dZValue)
{
return viewer.Geo.GetGridPointValue(x, y, ref dZValue);
}
/// <summary>
/// 层位统计
/// </summary>
/// <param name="xml">统计数据</param>
public void LoadLayerData(string xml)
{
}
/// <summary>
/// 井位统计
/// </summary>
/// <param name="xml">统计数据</param>
public void LoadWellsData(string xml)
{
}
/// <summary>
/// 体积统计
/// </summary>
/// <param name="xml">数据内容</param>
public void LoadVolumnData(string xml)
{
}
/// <summary>
/// 区块内元素统计.
/// </summary>
/// <param name="xml">统计数据.</param>
public void StatiscBlockElements(string xml)
{
}
private void StatiscAzimuthElements(string statiscResult)
{
}
/// <summary>
/// 区域内井位统计.
/// </summary>
/// <param name="blockLine">The block line.</param>
/// <returns>井位数据Xml格式:序号,名称,图层,X,Y,Z,Position </returns>
public string StaticBlockWells(string blockLine)
{
if (blockLine == null)
{
throw new ArgumentNullException(nameof(blockLine));
}
return viewer.Drawer.Geo.StaticBlockWells(blockLine);
}
/// <summary>
/// 统计范围内的区块.
/// </summary>
/// <param name="blockLine">The block line.</param>
/// <returns>区块的数据</returns>
public string StaticBlocks(string blockLine)
{
if (blockLine == null)
{
throw new ArgumentNullException(nameof(blockLine));
}
return viewer.Drawer.Geo.StaticBlocks(blockLine);
}
public string StaticBlocksInfo(string blockLine)
{
return viewer.Drawer.Geo.StaticBlocksInfo(blockLine);
}
public string CutStaticBlocks(string positionData, string blockLine)
{
return viewer.Drawer.Geo.CutStaticBlocks(positionData, blockLine);
}
public double CaculateBlockArea(string position)
{
return viewer.Drawer.Geo.CaculateBlockArea(position);
}
public void ResetLayerByOther(string pos, string posRefer, string suffix)
{
viewer.Drawer.Geo.ResetLayerByOther(pos, posRefer, suffix);
}
#region 个性处理
/// <summary>
/// 清除点类元素个性
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void tsbClearPointProperty_Click(object sender, EventArgs e)
{
ToolClearPointProperty();
}
public void ToolClearPointProperty()
{
viewer.ActiveTool = DrawToolType.PointPropertyClear;
}
/// <summary>
/// 设置点类图元个性
/// </summary>
/// <param name="sender">按钮</param>
/// <param name="e">事件参数</param>
private void tsbSetPointProperty_Click(object sender, EventArgs e)
{
ToolSetPointProperty();
}
public void ToolSetPointProperty()
{
viewer.ActiveTool = DrawToolType.PointPropertySet;
}
private void gridBtn_Click(object sender, EventArgs e)
{
//viewer.EnableGrid(gridBtn.Checked);
}
private void highLightTipBtn_Click(object sender, EventArgs e)
{
ToolEnableHighLight(this.highLightTipBtn.Checked);
}
public void ToolEnableHighLight(bool enable)
{
this.viewer.EnableHeighLight(enable);
}
private void extendCurveTSSButton_ButtonClick(object sender, EventArgs e)
{
ToolExtendCurve();
}
private void setExtendLengthMenuItem_Click(object sender, EventArgs e)
{
ToolCurveExtendSetting();
}
public void ToolCurveExtendSetting()
{
ExtensionLengthDialog dlg = new ExtensionLengthDialog(viewer.Drawer)
{
StartPosition = FormStartPosition.CenterScreen,
};
dlg.ShowDialog(this.viewer);
}
private void gridTSSButton_ButtonClick(object sender, EventArgs e)
{
viewer.SwitchGrid();
}
/// <summary>
/// 显示背景网格
/// </summary>
/// <param name="show">是/否</param>
public void DisplayBackgroundGrid(bool show)
{
viewer.DisplayBackgroundGrid(show);
}
private void settingGridTSMenuItem_Click(object sender, EventArgs e)
{
ToolSetBKGridSize();
}
public void ToolSetBKGridSize()
{
GridSettingDialog dlg = new GridSettingDialog(viewer.Geo)
{
StartPosition = FormStartPosition.CenterScreen,
};
if (dlg.ShowDialog(this) == DialogResult.OK)
{
viewer.Redraw();
}
}
private void arcToCurveMenuItem_Click(object sender, EventArgs e)
{
ToolShape2Curve();
//CancelSelectedStatusOfButton(null);
}
public void ToolShape2Curve()
{
viewer.ActiveTool = DrawToolType.ArcToCurve;
}
public void ToolCurveZFromSuface()
{
viewer.ActiveTool = DrawToolType.CurveZFromSurface;
}
private void mathFindMenuItem_Click(object sender, EventArgs e)
{
ToolFilter();
}
public void ToolFilter()
{
//MathFindAssistor assistor = new MathFindAssistor();
//assistor.Execute(viewer.Geo, dgvStatics);
//if (ShowStatisticResult != null)
//{
// ShowStatisticResult(this, new DataControlArgs("筛选"));
//}
//this.StatisticVisble = true;
}
private void findMenuItem_Click(object sender, EventArgs e)
{
ToolFind(false);
}
/// <summary>
/// 显示查找窗口.
/// </summary>
public void ToolFind(bool isReplace)
{
var findReplaceDlg = new FindReplaceDialog(viewer.Drawer);
if (isReplace)
{
findReplaceDlg.ChangeToReplaceTab();
}
findReplaceDlg.StartPosition = FormStartPosition.CenterScreen;
findReplaceDlg.FindAll += FindAll;
findReplaceDlg.Show();
}
private bool Match(string text1, string text2, bool exactMatch, bool ignoreCase)
{
if (text1 == null || text2 == null)
{
return false;
}
if (ignoreCase)
{
text1 = text1.ToLower();
text2 = text2.ToLower();
}
if (exactMatch)
{
return text1 == text2;
}
return text1.Contains(text2);
}
/// <summary>
/// 查找所有
/// 原先查找所有逻辑和现在不同,现在要求查找所有和统计元素显示在同一面板,这里干脆先统计元素,再剔除不匹配的行
/// </summary>
/// <param name="text">查找时的文本</param>
/// <param name="exactMatch">完全匹配</param>
/// <param name="ignoreCase">忽略大小写</param>
private void FindAll(string text, bool exactMatch, bool ignoreCase)
{
GeoSigmaXY geo = viewer.GetGeoSigma();
string xml = geo.Statisc(null, true, 0, -1);
LoadElementData(xml);
DataTable dataTable = dgvStatics.DataSource as DataTable;
// 删除最后的合计一行
int lastRowIndex = dataTable.Rows.Count - 1;
if (lastRowIndex >= 0)
{
dataTable.Rows.RemoveAt(lastRowIndex);
}
// 剔除名称不匹配的元素
var exactMatches = dataTable.AsEnumerable()
.Where(row => !Match(row.Field<string>("名称"), text, exactMatch, ignoreCase))
.ToList();
foreach (var row in exactMatches)
{
dataTable.Rows.Remove(row);
}
}
/// <summary>
/// 切换到测量模式
/// </summary>
public void ToolMeasure()
{
viewer.ActiveTool = DrawToolType.Measure;
}
/// <summary>
/// 旋转图件
/// </summary>
/// <param name="x">旋转原点 x 坐标</param>
/// <param name="y">旋转原点 y 坐标</param>
/// <param name="angle">旋转角度</param>
public void Rotation(int x, int y, double angle)
{
viewer.Geo.Rotation(x, y, angle);
viewer.Redraw();
}
///// <summary>
///// Elements the find next.
///// </summary>
///// <param name="content">The content.</param>
///// <param name="matchAll">if set to <c>true</c> [match all].</param>
///// <param name="matchCase">if set to <c>true</c> [match case].</param>
///// <param name="elementType">Type of the element.</param>
///// <param name="editableOnly">if set to <c>true</c> [editable only].</param>
///// <returns>-1--出错, 0--找到了, 1--第一次查找 但没找到, 2--已经搜索完了</returns>
//public int ElementFindNext(string content, bool matchAll, bool matchCase, int elementType = 0, bool editableOnly = true)
//{
// return viewer.Drawer.Geo.FindReplacement_FindNext(
// content, matchAll ? 1 : 0, matchCase ? 1 : 0
// , elementType, editableOnly);
//}
//public void ElementFindActive()
//{
// long lPos = viewer.Drawer.Geo.FindReplace_GetCurrentPostion();
// if (lPos > 0)
// {
// this.ActiveElement(lPos);
// }
//}
///// <summary>
///// 替换上次查找到的结果.
///// </summary>
///// <param name="strFind">The string find.</param>
///// <param name="strReplace">The string replace.</param>
///// <param name="bMatch">if set to <c>true</c> [b match].</param>
///// <param name="bCapitalLower">if set to <c>true</c> [b capital lower].</param>
///// <returns>执行结果</returns>
//public int ElementFindReplace(string strFind, string strReplace, bool bMatch, bool bCapitalLower)
//{
// return viewer.Drawer.Geo.FindReplacement_Replace(
// strFind, strReplace, bMatch ? 1 : 0, bCapitalLower ? 1 : 0);
//}
//public int ElementFindReplaceAll(string strFind, string strReplace, bool bMatch, bool bCapitalLower)
//{
// return viewer.Drawer.Geo.FindReplacement_ReplaceAll(strFind, strReplace, bMatch ? 1 : 0, bCapitalLower ? 1 : 0);
//}
//public void ElementFindStart()
//{
// viewer.Drawer.Geo.FindReplacement_Start();
//}
//public void ElementFindAll(string findContent, bool bMatch, bool bCapitalLower)
//{
// viewer.Drawer.Geo.FindReplacement_FindAll(findContent, bMatch ? 1 : 0, bCapitalLower ? 1 : 0);
// FindAllResultDialog dlg = new FindAllResultDialog(viewer.Drawer.Geo);
// dlg.Show();
//}
private void findAndReplaceButton_ButtonClick(object sender, EventArgs e)
{
this.ToolFind(true);
}
//public void DrawHandleFrameInDrawer(Graphics g)
//{
// IntPtr hdc = g.GetHdc()
// viewer.Drawer.Geo.FindReplacement_Draw(hdc);
// g.ReleaseHdc(hdc);
//}
//public void ToolFindReplace()
//{
// ShowFindReplace();
//}
private void replaceMenuItem_Click(object sender, EventArgs e)
{
ToolFind(true);
}
/// <summary>
/// 全选事件.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
private void selectAllMenuItem_Click(object sender, EventArgs e)
{
ToolSelectAll();
}
/// <summary>
/// 选中所有图元
/// </summary>
public void ToolSelectAll()
{
viewer.SelectAll();
}
private void selectAllPointMenuItem_Click(object sender, EventArgs e)
{
ToolSelectAllPoint();
}
/// <summary>
/// 选中所有点
/// </summary>
public void ToolSelectAllPoint()
{
viewer.SelectAllPoint();
}
private void selectAllCurveMenuItem_Click(object sender, EventArgs e)
{
ToolSelectAllCurve();
}
public void ToolSelectAllCurve()
{
viewer.SelectAllCurve();
}
private void undoViewButton_Click(object sender, EventArgs e)
{
ToolZoomBack();
}
public void ToolZoomBack()
{
viewer.Geo.Sigma_UndoView();
viewer.Redraw();
}
private void crossLineButton_Click(object sender, EventArgs e)
{
if (crossLineButton.CheckState == CheckState.Checked)
{
ToolCrossEnable(true);
//viewer.Redraw();
}
else
{
ToolCrossEnable(false);
//viewer.Redraw();
}
//viewer.GeoSigma.EnableCrossLine(true);
}
public void ToolCrossEnable(bool enable)
{
viewer.EnableCrossLine(enable);
}
private void fourCalibrationMenuItem_Click(object sender, EventArgs e)
{
viewer.ActiveTool = DrawToolType.Calibration4;
}
public void ToolCalibration4()
{
viewer.ActiveTool = DrawToolType.Calibration4;
}
private void twoCalibrationMenuItem_Click(object sender, EventArgs e)
{
viewer.ActiveTool = DrawToolType.Calibration2;
}
public void ToolCalibration2()
{
viewer.ActiveTool = DrawToolType.Calibration2;
}
private void fillByPointMenuItem_Click(object sender, EventArgs e)
{
ToolCurveConnectFill();
}
public void ToolCurveConnectFill()
{
viewer.ActiveTool = DrawToolType.ConnectCurveFilling;
}
public void ToolSolidLink()
{
viewer.ActiveTool = DrawToolType.SolidLink;
}
public void ToolSolidAuto()
{
viewer.ActiveTool = DrawToolType.SolidAuto;
}
public void ToolWellGroup()
{
viewer.ActiveTool = DrawToolType.WellGroup;
}
private void zPositiveNegativeMenuItem_Click(object sender, EventArgs e)
{
viewer.ActiveTool = DrawToolType.PositiveNegativeSign;
}
private void conditionButton_Click(object sender, EventArgs e)
{
viewer.ActiveTool = DrawToolType.DeleteCondition;
}
private void fractionPointMenuItem_Click(object sender, EventArgs e)
{
ToolDrawFractionPoint();
}
public void ToolDrawFractionPoint()
{
viewer.ActiveTool = DrawToolType.FractionPoint;
}
/// <summary>
/// 启动橡皮擦
/// </summary>
public void ToolEraser()
{
viewer.ActiveTool = DrawToolType.Eraser;
}
/// <summary>
/// 断层外扩.
/// </summary>
public void ToolFaultBroaden()
{
viewer.ActiveTool = DrawToolType.CurveBroaden;
}
public void ToolFaultSimply()
{
viewer.ActiveTool = DrawToolType.FaultSymply;
}
private void CurveNameSettingMenuItem_Click(object sender, EventArgs e)
{
ToolCurveNameSet();
}
public void ToolCurveNameSet()
{
viewer.ActiveTool = DrawToolType.CurveNameSetting;
}
public void ToolSetContourName()
{
viewer.ActiveTool = DrawToolType.SetContourName;
}
private void NameToZMenuItem_Click(object sender, EventArgs e)
{
ToolCurveName2z();
}
public void ToolCurveName2z()
{
viewer.ActiveTool = DrawToolType.NameToZ;
}
private void ZToNameToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolCurveZ2Name();
}
public void ToolCurveZ2Name()
{
viewer.ActiveTool = DrawToolType.ZToName;
}
private void EmptyNameCurveToolStripMenuItem_Click(object sender, EventArgs e)
{
ToolCurveFindEmptyName();
}
public void ToolCurveFindEmptyName()
{
viewer.ActiveTool = DrawToolType.FindCurveOfEmptyName;
}
private void BatchCutImageToolStripMenuItem_Click(object sender, EventArgs e)
{
BatchFilesCutImageDialog dlg = new BatchFilesCutImageDialog(viewer.Geo)
{
StartPosition = FormStartPosition.CenterScreen,
};
dlg.ShowDialog(this);
}
private void batchFileTransformationMenuItem_Click(object sender, EventArgs e)
{
BatchFileTransformationDialog dlg = new BatchFileTransformationDialog(viewer.Geo)
{
StartPosition = FormStartPosition.CenterScreen,
};
dlg.ShowDialog(this);
}
private void tsbtnSave_Click(object sender, EventArgs e)
{
this.SaveFile();
}
private void tsbtnLayerPanel_Click(object sender, EventArgs e)
{
LayerVisibleChanged?.Invoke(null, true);
LayerVisible = !LayerVisible;
}
//private void CancelSelectedStatusOfButton(ToolStripButton currentButton)
//{
// if (highLightTipBtn != currentButton)
// {
// highLightTipBtn.Checked = false;
// }
//}
private void tspElement_MouseMove(object sender, MouseEventArgs e)
{
if (tspElement.Focused != true && tspElement.CanFocus)
{
tspElement.Focus();
}
}
private void tspArrange_MouseMove(object sender, MouseEventArgs e)
{
if (!tspArrange.Focused && tspArrange.CanFocus)
{
tspArrange.Focus();
}
}
private void tsbEnableMeshPackage_Click(object sender, EventArgs e)
{
// ToolGridEnablePack(tsbEnableMeshPackage.Checked);
}
public void ToolGridEnablePack(bool enable)
{
if (viewer.Geo == null)
{
return;
}
viewer.Geo.EnableMeshPackage(enable, ForceMeshPack);
viewer.Redraw();
}
/// <summary>
/// 反走样
/// </summary>
/// <param name="enable">是否进行反走样</param>
public void ToolAntiAlias(bool enable)
{
viewer.Geo.SetAntiAlias(enable);
viewer.Redraw();
}
public bool ForceMeshPack { get; set; } = false;
public string FaultLayer
{
get
{
return viewer.Geo.GetFaultLayer();
}
set
{
viewer.Geo.SetFaultLayer(value);
}
}
public string BorderLayer
{
get
{
return viewer.Geo.GetBorderLayer();
}
set
{
viewer.Geo.SetBorderLayer(value);
}
}
public string FaultLayer3D
{
get
{
return viewer.Geo.GetFaultLayer3D();
}
set
{
viewer.Geo.SetFaultLayer3D(value);
}
}
public string BorderLayer3D
{
get
{
return viewer.Geo.GetBorderLayer3D();
}
set
{
viewer.Geo.SetBorderLayer3D(value);
}
}
public string WellLayer3D
{
get
{
return viewer.Geo.GetWellLayer3D();
}
set
{
viewer.Geo.SetWellLayer3D(value);
}
}
public string MainMeshLayer3D
{
get
{
return viewer.Geo.GetMainMeshLayer3D();
}
set
{
viewer.Geo.SetMainMeshLayer3D(value);
}
}
public long MainMeshId3D
{
get
{
return viewer.Geo.GetMainMeshId3D();
}
set
{
viewer.Geo.SetMainMeshId3D(value);
}
}
/// <summary>
/// 根据Z值设置色块显示
/// </summary>
/// <param name="sender">按钮</param>
/// <param name="e">事件参数</param>
private void tsbtnZColor_Click(object sender, EventArgs e)
{
ToolZColor();
}
public void ToolZColor()
{
viewer.SetPointZColor();
viewer.Redraw();
}
/// <summary>
/// 点类数据根据Z值进行色块显示
/// </summary>
/// <param name="zColorSize">colorSize</param>
/// <returns>是否成功</returns>
public bool SetZColorDefault(double zColorSize)
{
double dMin = 0, dMax = 0;
bool bFound = viewer.Geo.GetPointsZRange(ref dMin, ref dMax);
if (!bFound)
{
return false;
}
StringBuilder strbColors = new StringBuilder();
GradientColorTemplate mesh = new GradientColorTemplate { Name = "ZColor" };
mesh.AddColor(255, 0, 0);
mesh.AddColor(255, 255, 0);
mesh.AddColor(70, 255, 255);
mesh.AddColor(192, 255, 255);
mesh.AddColor(0, 128, 251);
mesh.CreateZAverage(0, 100);
mesh.EnableAllContinue(true);
List<GradientColorItem> items = mesh.Generate(dMin, dMax);
foreach (GradientColorItem item in items)
{
int bContnue = item.Smooth == GradientColorItem.SmoothMode.M ? 1 : 0;
strbColors.AppendLine($"{item.Z},{item.R},{item.G},{item.B},{item.T},{bContnue}");
}
if (strbColors.Length > 0)
{
viewer.Geo.SetPointsColor(strbColors.ToString().Trim(), zColorSize, zColorSize);
}
return true;
}
/// <summary>
/// 清除线类图元个性
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void tsbClearCurveProperty_Click(object sender, EventArgs e)
{
ToolClearCurveProperty();
}
public void ToolClearCurveProperty()
{
viewer.ActiveTool = DrawToolType.CurvePropertyClear;
}
/// <summary>
/// 设置线类图元个性
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void tsbSetCurveProperty_Click(object sender, EventArgs e)
{
ToolSetCurveProperty();
}
public void ToolSetCurveProperty()
{
viewer.ActiveTool = DrawToolType.CurvePropertySet;
}
#endregion 个性处理
/// <summary>
/// 抗锯齿
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void tsbAntiAlias_CheckStateChanged(object sender, EventArgs e)
{
ToolAntiAlias(tsbAntiAlias.Checked);
}
/// <summary>
/// 形状转换为曲线
/// </summary>
/// <param name="sender">事件按钮</param>
/// <param name="e">事件参数</param>
private void tsbtnShape2Curve_Click(object sender, EventArgs e)
{
ToolShape2Curve();
}
/// <summary>
/// 自动调整方向
/// </summary>
private void OnAutoAdjustDirection()
{
viewer.Geo.AdjustDirectionAutomatically(0);
viewer.Redraw();
}
/// <summary>
/// 获取当前画布范围的实际范围
/// </summary>
/// <returns>范围</returns>
public GeoSigmaDrawLib.RectangleD GetRealViewRect()
{
double left = 0;
double top = 0;
double right = 0;
double bottom = 0;
viewer.Geo.GetRealViewRect(ref left, ref top, ref right, ref bottom);
return new GeoSigmaDrawLib.RectangleD(left, top, Math.Abs(right - left), Math.Abs(bottom - top));
}
/// <summary>
/// 设置画布显示的实际范围,这个功能尚无法工作
/// </summary>
/// <param name="rect">范围</param>
public void SetRealViewRect(GeoSigmaDrawLib.RectangleD rect)
{
if (rect == null)
{
throw new ArgumentNullException(nameof(rect));
}
viewer.Geo.SetRealViewRect(rect.Left, rect.Top, rect.Right, rect.Y - rect.Height);
viewer.Refresh();
}
/// <summary>
/// 图件当前缩放比
/// </summary>
public SizeD ScaleSize
{
get
{
return viewer.Geo.GetScaleSize();
}
set
{
viewer.Geo.SetScaleSize(value);
}
}
/// <summary>
/// Mains the view_ form closing.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The e.</param>
private void MainView_FormClosing(object sender, FormClosingEventArgs e)
{
if (viewer.Geo != null && viewer.ActiveTool != DrawToolType.Default)
{
this.ToolDefault();
}
}
private void btnMergeCurve_Click(object sender, EventArgs e)
{
ToolMergeCurve();
}
private void btnJoinCurves_Click(object sender, EventArgs e)
{
ToolAutoJoinCurves();
}
private void btnFaultBroaden_Click(object sender, EventArgs e)
{
ToolFaultBroaden();
}
private void btnFaultSimplyfy_Click(object sender, EventArgs e)
{
if (btnFaultSimplyfy.Checked)
{
ToolFaultSimply();
}
}
/// <summary>
/// 清理图件内容。
/// </summary>
public void ClearAll()
{
// ViewControl.Geo.ClearAll(false);
viewer.Geo.ClearAll(false);
}
private FaultEditForm faultEditForm;
private void btnFaultEdit_Click(object sender, EventArgs e)
{
//if (faultEditForm == null) // 防止用户点多次出来多个弹框
//{
// faultEditForm = new FaultEditForm(this);
// faultEditForm.TopMost = true;
// faultEditForm.Show();
// faultEditForm.FormClosed += (s, _) => faultEditForm = null; // 关闭时置 null为了下次能够启动起来
//}
}
public void ViewExtendWidth()
{
viewer.ViewExtendWidth();
}
public void ViewExtendCenter()
{
viewer.ViewExtendCenter();
}
public void AddPictureToWellTrack()
{
viewer.AddPictureToWellTrack();
}
public void testWellObjProperties()
{
//viewer.testGetWellObjectProperties();
}
public void SetLockWellHead()
{
viewer.SetLockWellHead();
}
//public void AddTrack()
//{
// this.viewer.AddTrack();
//}
//public void DeleteSelectedWellObject()
//{
// viewer.DeleteSelectedWellObject();
//}
List<WellLineTypeItem> GetLineTypeItems()
{
List<WellLineTypeItem> items = new List<WellLineTypeItem>();
var geo = viewer.GetGeoSigma();
if (geo is GeoSigmaWellPoleXY geoPole)
{
if (GeoSigmaWellPoleXY.GetWellCurveLineNames(out string[] names))
{
foreach (var name in names)
{
int nWidth = 160;
int nHeight = 20;
Bitmap bitmap = new Bitmap(nWidth, nHeight);
Graphics image = Graphics.FromImage(bitmap);
IntPtr hdc = image.GetHdc();
if (!GeoSigmaWellPoleXY.GetDrawWellCurveLine(name, hdc, nWidth, nHeight))
{
continue;
}
var item = new WellLineTypeItem();
item.Name = name;
item.Image = bitmap;
items.Add(item);
image.ReleaseHdc();
}
}
}
return items;
}
public void TestWellTrack()
{
//WellTrack track = new WellTrack();
//var form = new WellTrackPropertyForm();
//form.SelectObject(track);
//form.Show();
}
public void TestCurveTrack()
{
TestTrack<WellCurveTrack>("E:/Downloads/curveTrack_jsonfile.json");
}
public void TestDepthTrack()
{
//TestTrack<WellDepthTrack>("E:/Downloads/depthTrack_JSONFile.json");
}
private void TestTrack<T>(string path)
where T : class, new()
{
//string str = File.ReadAllText(path);
//JObject jsonObj = JObject.Parse(str);
//T wellTrack = WellSerializer.Deserialize<T>(jsonObj);
//var form = new WellTrackPropertyForm();
//form.SelectObject(wellTrack);
//form.Show();
}
}
}