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 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 /// /// 散点数据道 /// [XmlRoot("Pcg")] [TypeConverter(typeof(PropertySorter))] public class WellPointTrack : WellObjectXmlBase { //public WellPointTrack() //{ // wellPoleContext = new WellPoleContext(); //} private const string PointTrackCategory = "\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(PointTrackCategory)] [DisplayName("标题"), PropertyOrder(0)] public string Title { get => CurveTrack.Title.Font.Text; set => CurveTrack.Title.Font.Text = value; } [XmlIgnore] [Category(PointTrackCategory)] [DisplayName("曲线名称"), PropertyOrder(1)] public string CurveName { get => CurveTrack.Name; set => CurveTrack.Name = value; } [XmlIgnore] [Category(PointTrackCategory)] [DisplayName("左值"), PropertyOrder(2)] public double LeftValue { get => CurveTrack.Left; set => CurveTrack.Left = value; } [XmlIgnore] [Category(PointTrackCategory)] [DisplayName("右值"), PropertyOrder(3)] public double RightValue { get => CurveTrack.Right; set => CurveTrack.Right = value; } [XmlIgnore] [Category(PointTrackCategory)] [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(PointTrackCategory)] [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(PointTrackCategory)] [DisplayName("宽度"), PropertyOrder(6)] public double Width { get => CurveTrack.Width; set => CurveTrack.Width = value; } [XmlIgnore] [Category(PointTrackCategory)] [DisplayName("道头字体"), PropertyOrder(7)] [Editor(typeof(PropertyEditorWellFontEx), typeof(UITypeEditor))] public WellFontEx HeaderFont { get => CurveTrack.Title.Font; set => CurveTrack.Title.Font = value; } [XmlIgnore] [Category(PointTrackCategory)] [DisplayName("显示曲线横线"), PropertyOrder(9)] [TypeConverter(typeof(YesNoConverter))] public bool ShowCurveLinear { get => CurveTrack.ShowLine; set => CurveTrack.ShowLine = value; } [XmlIgnore] [Category(PointTrackCategory)] [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 fillModeMap = new Dictionary() { { 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(fillDiscreteCurveNamesConverter))] 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(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)] 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 DataServiceFillDiscreteCurveNames { public static string[] GetAvailableOptions(Object param1) { string[] names = new string[0]; if (param1 is WellPointTrack settings) { if (settings.wellPoleContext.geoWellPole.GetWellAllDiscreteNames(settings.wellPoleContext.wellObjHandle, out string[] NamesArr) == true) { List slist = new List(NamesArr); slist.Remove(settings.CurveName); return slist.ToArray(); } } return names; } } public class fillDiscreteCurveNamesConverter : GenericWellOptionsConverter { public fillDiscreteCurveNamesConverter() : base(settings => DataServiceFillDiscreteCurveNames.GetAvailableOptions(settings)) { } } #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 }