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.

650 lines
22 KiB
C#

1 month ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
using System.Xml.Serialization;
using GeoSigma;
using GeoSigma.SigmaDrawerElement;
using GeoSigma.SigmaDrawerStyle;
using GeoSigma.SigmaDrawerStyle.Converter;
using SigmaDrawerStyle;
using GeoSigmaDrawLib;
using System.Data;
//using PropertyEditorColor = GeoSigma.SigmaDrawerStyle.PropertyEditorColor;
namespace SigmaDrawerElement
{
#pragma warning disable SA1402 // File may only contain a single type
#pragma warning disable SA1600 // Elements should be documented
#pragma warning disable SA1649 // File name should match first type name
/// <summary>
/// 充填
/// </summary>
public enum WellCurveTrackFillType
{
LeftBorder,
RightBorder,
LeftThreshold,
RightThreshold,
}
public class WellCurveTrackFillTypeConverter : EnumConverter<WellCurveTrackFillType>
{
public static readonly Dictionary<WellCurveTrackFillType, string> Maps = new Dictionary<WellCurveTrackFillType, string>()
{
{ WellCurveTrackFillType.LeftBorder, "左边界" },
{ WellCurveTrackFillType.RightBorder, "右边界" },
// { WellCurveTrackFillType.LeftThreshold, "左阈值" },
// { WellCurveTrackFillType.RightThreshold, "右阈值" },
};
public static readonly Dictionary<WellCurveTrackFillType, string> XmlMaps = new Dictionary<WellCurveTrackFillType, string>()
{
{ WellCurveTrackFillType.LeftBorder, "Left" },
{ WellCurveTrackFillType.RightBorder, "Right" },
{ WellCurveTrackFillType.LeftThreshold, "LeftValue" },
{ WellCurveTrackFillType.RightThreshold, "RightValue" },
};
protected override Dictionary<WellCurveTrackFillType, string> CreateMaps()
{
return Maps;
}
}
/// <summary>
/// 画刷类型
/// </summary>
public enum WellCurveTrackBrushType
{
None,
SingleColor,
Picture,
GradientColor,
}
public class WellCurveTrackBrushTypeConverter : EnumConverter<WellCurveTrackBrushType>
{
public static readonly Dictionary<WellCurveTrackBrushType, string> Maps = new Dictionary<WellCurveTrackBrushType, string>
{
{ WellCurveTrackBrushType.None, string.Empty },
{ WellCurveTrackBrushType.SingleColor, "单色" },
{ WellCurveTrackBrushType.Picture, "图案" },
// { WellCurveTrackBrushType.GradientColor, "渐变色" },
};
protected override Dictionary<WellCurveTrackBrushType, string> CreateMaps()
{
return Maps;
}
}
/// <summary>
/// 标注格式
/// 0.# 到 0.##### 表示 可选小数位数例如0.## 格式可以显示 1、1.1、1.12,但不强制补零
/// 0.0 到 0.00000 表示 固定小数位数例如0.00 会将 1 显示为 1.00
/// </summary>
public enum WellCurveTrackLabelFormat
{
Optional1 = 1, // 对应 0.#
Optional2 = 2, // 对应 0.##
Optional3 = 3, // 对应 0.###
Optional4 = 4, // 对应 0.####
Fixed1 = 101, // 对应 0.0
Fixed2 = 102, // 对应 0.00
Fixed3 = 103, // 对应 0.000
Fixed4 = 104, // 对应 0.0000
}
public class WellCurveTrackLabelFormatConverter : EnumConverter<WellCurveTrackLabelFormat>
{
public static readonly Dictionary<WellCurveTrackLabelFormat, string> Maps = new Dictionary<WellCurveTrackLabelFormat, string>
{
{ WellCurveTrackLabelFormat.Optional1, "0.#" },
{ WellCurveTrackLabelFormat.Optional2, "0.##" },
{ WellCurveTrackLabelFormat.Optional3, "0.###" },
{ WellCurveTrackLabelFormat.Optional4, "0.####" },
{ WellCurveTrackLabelFormat.Fixed1, "0.0" },
{ WellCurveTrackLabelFormat.Fixed2, "0.00" },
{ WellCurveTrackLabelFormat.Fixed3, "0.000" },
{ WellCurveTrackLabelFormat.Fixed4, "0.0000" },
};
protected override Dictionary<WellCurveTrackLabelFormat, string> CreateMaps()
{
return Maps;
}
}
/// <summary>
/// 充填曲线
/// </summary>
public enum WellCurveTrackFillCurve
{
None,
SP,
LLD,
LLS,
AC,
}
public class WellCurveTrackFillCurveConverter : EnumConverter<WellCurveTrackFillCurve>
{
public static readonly Dictionary<WellCurveTrackFillCurve, string> Maps = new Dictionary<WellCurveTrackFillCurve, string>
{
{ WellCurveTrackFillCurve.None, "" },
{ WellCurveTrackFillCurve.SP, "SP" },
{ WellCurveTrackFillCurve.LLD, "LLD" },
{ WellCurveTrackFillCurve.LLS, "LLS" },
{ WellCurveTrackFillCurve.AC, "AC" },
};
protected override Dictionary<WellCurveTrackFillCurve, string> CreateMaps()
{
return Maps;
}
}
public enum WellCurveTrackStyle
{
Curve,
Step,
}
public class WellCurveTrackStyleConverter : EnumConverter<WellCurveTrackStyle>
{
public static readonly Dictionary<WellCurveTrackStyle, string> Maps = new Dictionary<WellCurveTrackStyle, string>
{
{ WellCurveTrackStyle.Curve, "曲线" },
{ WellCurveTrackStyle.Step, "阶梯" },
};
protected override Dictionary<WellCurveTrackStyle, string> CreateMaps()
{
return Maps;
}
}
public enum WellCurveScatter
{
None,
Scatter,
}
public class WellCurveTrackCurveScatterConverter : EnumConverter<WellCurveScatter>
{
public static readonly Dictionary<WellCurveScatter, string> Maps = new Dictionary<WellCurveScatter, string>
{
{ WellCurveScatter.None, "" },
{ WellCurveScatter.Scatter, "散点" },
};
protected override Dictionary<WellCurveScatter, string> CreateMaps()
{
return Maps;
}
}
/// <summary>
/// 曲线道
/// </summary>
[XmlRoot("Pcg")]
[TypeConverter(typeof(PropertySorter))]
public class WellCurveTrack : WellObjectXmlBase
{
//public WellCurveTrack()
//{
// wellPoleContext = new WellPoleContext();
//}
private const string CurveTrackCategory = "\t\t\t\t\t曲线道";
private const string GridCategory = "\t\t\t\t网格";
private const string FillCategory = "\t\t\t充填";
private const string CurveStyleCategory = "\t\t曲线风格";
private const string PointSymbolCategory = "\t点符号";
// 曲线道
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("标题"), PropertyOrder(0)]
public string Title
{
get => CurveTrack.Title.Font.Text;
set => CurveTrack.Title.Font.Text = value;
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("曲线名称"), PropertyOrder(1)]
[TypeConverter(typeof(curveNamesConverter))]
public string CurveName
{
get => CurveTrack.Name;
set
{
if(CurveTrack.Name != value)
{
CurveTrack.bRefreshWorkAreaData = true;
}
CurveTrack.Name = value;
}
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("左值"), PropertyOrder(2)]
public double LeftValue
{
get => CurveTrack.Left;
set => CurveTrack.Left = value;
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("右值"), PropertyOrder(3)]
public double RightValue
{
get => CurveTrack.Right;
set => CurveTrack.Right = value;
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("标注格式"), PropertyOrder(4)]
[TypeConverter(typeof(WellCurveTrackLabelFormatConverter))]
public WellCurveTrackLabelFormat LabelFormat
{
get => DictionaryHelper.Reverse(WellCurveTrackLabelFormatConverter.Maps)[CurveTrack.GridStyle.Format];
set => CurveTrack.GridStyle.Format = WellCurveTrackLabelFormatConverter.Maps[value];
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("对数"), PropertyOrder(5)]
[TypeConverter(typeof(YesNoConverter))]
public bool IsLogarithmic
{
get => CurveTrack.Mode == "Log";
set
{
// 这两个必须一定,不然显示会有问题
CurveTrack.Mode = value ? "Log" : "Default";
CurveTrack.CurveStyle.ShowStyle = CurveTrack.Mode;
}
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("宽度"), PropertyOrder(6)]
public double Width
{
get => CurveTrack.Width;
set => CurveTrack.Width = value;
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("道头字体"), PropertyOrder(7)]
[Editor(typeof(PropertyEditorWellFontEx), typeof(UITypeEditor))]
public WellFontEx HeaderFont
{
get => CurveTrack.Title.Font;
set => CurveTrack.Title.Font = value;
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("显示曲线横线"), PropertyOrder(9)]
[TypeConverter(typeof(YesNoConverter))]
public bool ShowCurveLinear
{
get => CurveTrack.ShowLine;
set => CurveTrack.ShowLine = value;
}
[XmlIgnore]
[Category(CurveTrackCategory)]
[DisplayName("曲线显示样式"), PropertyOrder(10)]
[TypeConverter(typeof(YesNoConverter))]
public bool CurveDisplayStyle
{
get => CurveTrack.CurveStyle.Visiable;
set => CurveTrack.CurveStyle.Visiable = value;
}
// 网格
[XmlIgnore]
[Category(GridCategory)]
[DisplayName("显示网格"), PropertyOrder(11)]
[TypeConverter(typeof(YesNoConverter))]
public bool ShowGrid
{
get => CurveTrack.GridStyle.Visiable;
set
{
// 在 pcg 中定义中,这两个是不同含义,
// 但是在咱们的系统中它们表示含义相同,同步设置
CurveTrack.GridStyle.Visiable = value;
CurveTrack.GridStyle.IsDrawScale = value;
}
}
[XmlIgnore]
[Category(GridCategory)]
[DisplayName("主刻度个数"), PropertyOrder(13)]
public double MajorTicks
{
get => CurveTrack.GridStyle.MajorSpace;
set => CurveTrack.GridStyle.MajorSpace = value;
}
[XmlIgnore]
[Category(GridCategory)]
[DisplayName("次刻度个数"), PropertyOrder(14)]
public double MinorTicks
{
get => CurveTrack.GridStyle.MinorSpace;
set => CurveTrack.GridStyle.MinorSpace = value;
}
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("充填方式"), PropertyOrder(15)]
[TypeConverter(typeof(WellCurveTrackFillTypeConverter))]
public WellCurveTrackFillType FillMode
{
get => DictionaryHelper.Reverse(WellCurveTrackFillTypeConverter.XmlMaps)[CurveTrack.FillStyle.Mode];
set => CurveTrack.FillStyle.Mode = WellCurveTrackFillTypeConverter.XmlMaps[value];
}
private static Dictionary<WellCurveTrackBrushType, string> fillModeMap = new Dictionary<WellCurveTrackBrushType, string>()
{
{ WellCurveTrackBrushType.None, string.Empty },
{ WellCurveTrackBrushType.SingleColor, "Solid" },
{ WellCurveTrackBrushType.Picture, "Hatch" }, //目前没有渐变色对话框,就先省略
};
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("画刷类型"), PropertyOrder(16)]
[TypeConverter(typeof(WellCurveTrackBrushTypeConverter))]
public WellCurveTrackBrushType BrushType
{
get => DictionaryHelper.Reverse(fillModeMap)[CurveTrack.FillMode];
set => CurveTrack.FillMode = fillModeMap[value];
}
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("充填颜色"), PropertyOrder(17)]
[Editor(typeof(PropertyEditorColor), typeof(UITypeEditor))]
public Color FillColor
{
get => CurveTrack.FillStyle.BackColor;
set => CurveTrack.FillStyle.BackColor = value;
}
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("充填符号"), PropertyOrder(18)]
[Editor(typeof(PropertyEditorFillSymbol), typeof(UITypeEditor))]
public string FillSymbol
{
get => CurveTrack.FillStyle.Pattern;
set => CurveTrack.FillStyle.Pattern = value;
}
//[XmlIgnore]
//[Category(FillCategory)]
//[DisplayName("充填曲线"), PropertyOrder(19)]
//[TypeConverter(typeof(WellCurveTrackFillCurveConverter))]
//public WellCurveTrackFillCurve FillCurve
//{
// get => DictionaryHelper.Reverse(WellCurveTrackFillCurveConverter.Maps)[CurveTrack.FillStyle.SideTrack];
// set => CurveTrack.FillStyle.SideTrack = WellCurveTrackFillCurveConverter.Maps[value];
//}
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("充填曲线"), PropertyOrder(19)]
[TypeConverter(typeof(fillCurveNamesConverter))]
public string FillCurve
{
get=> CurveTrack.FillStyle.SideTrack;
set=> CurveTrack.FillStyle.SideTrack = value;
}
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("显示充填曲线"), PropertyOrder(20)]
[TypeConverter(typeof(YesNoConverter))]
public bool ShowFillCurve
{
get => CurveTrack.FillStyle.CurveVisiable;
set => CurveTrack.FillStyle.CurveVisiable = value;
}
[XmlIgnore]
[Category(FillCategory)]
[DisplayName("渐进色填充设置"), PropertyOrder(20)]
[Editor(typeof(PropertyEditorFillCurveGradient), typeof(UITypeEditor))]
public WellTrackGradientStyle GradientStyle
{
get => CurveTrack.FillStyle.GradientStyle;
set => CurveTrack.FillStyle.GradientStyle = value;
}
// 曲线风格
[XmlIgnore]
[Category(CurveStyleCategory)]
[DisplayName("样式"), PropertyOrder(21)]
[TypeConverter(typeof(WellCurveTrackStyleConverter))]
public WellCurveTrackStyle Style
{
get => CurveTrack.CurveStyle.IsStep ? WellCurveTrackStyle.Step : WellCurveTrackStyle.Curve;
set => CurveTrack.CurveStyle.IsStep = value == WellCurveTrackStyle.Step;
}
[XmlIgnore]
[Category(CurveStyleCategory)]
[DisplayName("曲线类型"), PropertyOrder(22)]
[Editor(typeof(PropertyEditorWellCurveStyle), typeof(UITypeEditor))]
public WellLineStyle CurveType
{
get => new WellLineStyle()
{
Color = CurveTrack.CurveStyle.Color,
Width = CurveTrack.CurveStyle.Width,
Style = CurveTrack.CurveStyle.Dash,
};
set
{
CurveTrack.CurveStyle.Color = value.Color;
CurveTrack.CurveStyle.Width = value.Width;
CurveTrack.CurveStyle.Dash = value.Style;
}
}
// 点符号
[XmlIgnore]
[Category(PointSymbolCategory)]
[DisplayName("散点"), PropertyOrder(23)]
[TypeConverter(typeof(WellCurveTrackCurveScatterConverter))]
public WellCurveScatter Scatter
{
get => string.IsNullOrWhiteSpace(CurveTrack.SymbolStyle.Name) ? WellCurveScatter.None : WellCurveScatter.Scatter;
set => CurveTrack.SymbolStyle.Name = WellCurveTrackCurveScatterConverter.Maps[value];
}
[XmlIgnore]
[Category(PointSymbolCategory)]
[DisplayName("符号"), PropertyOrder(24)]
[ListBoxEditor("PointType")]
[Editor(typeof(PropertyEditorListBox), typeof(UITypeEditor))]
public string Symbol
{
get => CurveTrack.SymbolStyle.Name;
set => CurveTrack.SymbolStyle.Name = value;
}
[XmlIgnore]
[Category(PointSymbolCategory)]
[DisplayName("符号边框颜色"), PropertyOrder(25)]
[Editor(typeof(PropertyEditorColor), typeof(UITypeEditor))]
public Color SymbolBorderColor
{
get => CurveTrack.SymbolStyle.ForeColor;
set => CurveTrack.SymbolStyle.ForeColor = value;
}
[XmlIgnore]
[Category(PointSymbolCategory)]
[DisplayName("符号填充颜色"), PropertyOrder(26)]
[Editor(typeof(PropertyEditorColor), typeof(UITypeEditor))]
public Color SymbolFillColor
{
get => CurveTrack.SymbolStyle.BackColor;
set => CurveTrack.SymbolStyle.BackColor = value;
}
[XmlIgnore]
[Category(PointSymbolCategory)]
[DisplayName("符号大小"), PropertyOrder(27)]
public double SymbolSize
{
get => CurveTrack.SymbolStyle.SizeWidth;
set => CurveTrack.SymbolStyle.SizeWidth = value;
}
[Browsable(false)]
[XmlAttribute("Version")]
public string Version { get; set; }
[Browsable(false)]
[XmlElement("WellTrack")]
public WellTrackWellTrack CurveTrack { get; set; }
//[Browsable(false)]
//[XmlIgnore]
//public WellPoleContext wellPoleContext { get; set; }
}
public static class DataServiceFillCurveNames
{
public static string[] GetAvailableOptions(Object param1)
{
string[] names = new string[0];
if (param1 is WellCurveTrack settings)
{
if(settings.wellPoleContext.geoWellPole.GetWellAllCurveNames(settings.wellPoleContext.wellObjHandle,out string[] NamesArr) == true)
{
List<string> slist = new List<string>(NamesArr);
slist.Insert(0, "");
// slist.Remove(settings.CurveName);
return slist.ToArray();
}
}
return names;
}
}
public class fillCurveNamesConverter : GenericWellOptionsConverter<WellCurveTrack>
{
public fillCurveNamesConverter() : base(settings => DataServiceFillCurveNames.GetAvailableOptions(settings))
{ }
}
public static class DataServiceDbCurveNames
{
public static string[] GetAvailableOptions(Object param1)
{
string[] names = new string[0];
if (param1 is WellCurveTrack settings)
{
// if (settings.wellPoleContext.geoWellPole.GetWellBaseInfo(settings.wellPoleContext.wellObjHandle, out GeoSigmaWellPoleXY.WellBaseInfo wellinfo) == true)
// {
if (settings.wellPoleContext.wellName != "" && settings.wellPoleContext.workArea != null)
{
if (settings.wellPoleContext.bReadCurveTable == false)
{
settings.wellPoleContext.bReadCurveTable = true;
settings.wellPoleContext.curveTable = new DataTable();
DataTable curvesTable = settings.wellPoleContext.curveTable;
settings.wellPoleContext.workArea.getCurvesData(settings.wellPoleContext.wellName, ref curvesTable);
}
names = new string[settings.wellPoleContext.curveTable.Columns.Count+1];
names[0] = "";
for (int i = 0; i < settings.wellPoleContext.curveTable.Columns.Count; i++)
{
names[i+1] = settings.wellPoleContext.curveTable.Columns[i].ColumnName;
}
}
//}
}
return names;
}
}
public class curveNamesConverter : GenericWellOptionsConverter<WellCurveTrack>
{
public curveNamesConverter() : base(settings => DataServiceDbCurveNames.GetAvailableOptions(settings))
{ }
}
//public static class DataServiceDbCurveNames
//{
// public static string[] GetCurveNames(WellPoleContext wContext)
// {
// string[] names = new string[0];
// if(wContext.geoWellPole.GetWellBaseInfo(wContext.wellObjHandle,out GeoSigmaWellPoleXY.WellBaseInfo wellinfo) == true)
// {
// if(wellinfo.wellName != "" && wContext.workArea != null)
// {
// DataTable curvesTable = new DataTable();
// // ResultDataInfo qCurveResult = new ResultDataInfo();
// wContext.workArea.getCurvesData(wellinfo.wellName, ref curvesTable);
// // curvesTable.Columns
// names = new string[curvesTable.Columns.Count];
// for(int i = 0; i < curvesTable.Columns.Count; i++ )
// {
// names[i] = curvesTable.Columns[i].ColumnName;
// }
// }
// }
// return names;
// }
//}
//public class curveNamesConverter : TypeConverter
//{
// public override bool GetStandardValuesSupported(ITypeDescriptorContext context) => true;
// public override bool GetStandardValuesExclusive(ITypeDescriptorContext context) => true;
// public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
// {
// if (context?.Instance is WellCurveTrack settings)
// {
// var options = DataServiceDbCurveNames.GetCurveNames(settings.wellPoleContext);
// //var options = GetUserSpecificOptions(settings.UserId);
// return new StandardValuesCollection(options);
// }
// return new StandardValuesCollection(new string[0]);
// }
//}
#pragma warning restore SA1649 // File name should match first type name
#pragma warning restore SA1600 // Elements should be documented
#pragma warning restore SA1402 // File may only contain a single type
}