using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; #if NET8_0 #else using System.Drawing.Design; using System.Windows.Forms; #endif using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Xml.Serialization; using GeoSigma; using GeoSigma.SigmaDrawerStyle; using GeoSigma.SigmaDrawerStyle.Converter; using GeoSigmaDrawLib; using SigmaDrawerStyle; namespace SigmaDrawerElement { /// /// 坐标框 /// [TypeConverter(typeof(PropertySorter))] public class DrawerFrameGrid : ElementBase { /// /// 属性类别排序 /// private List categorys = new List() { "基础属性", "数据", "外边框", "高级", "其他", "杂项" }; public DrawerFrameGrid() { ElementType = DrawElementType.ELEMENT_GRID; } [XmlIgnore] [Category("数据"), DisplayName("名字"), ReadOnly(true), PropertyOrder(1)] public override string Name { get { return base.Name; } set { base.Name = value; } } [XmlIgnore] [Category("基础属性"), DisplayName("网格步长"), PropertyOrder(1)] public PropertyPoint MarkSpace { get { return new PropertyPoint((float)Base.StepX, (float)Base.StepY); } set { Base.StepX = value.X; Base.StepY = value.Y; } } [XmlIgnore] [Category("基础属性"), DisplayName("文字尺寸"), PropertyOrder(2)] public double TextSize { get { return Base.Height; } set { Base.Height = value; Base.Width = value * 0.4; } } [XmlIgnore] [Category("基础属性"), DisplayName("显示方式"), PropertyOrder(3)] [TypeConverter(typeof(SigmaDrawerElement.Converter.FrameGridDisplayStyleConverter))] public int DisplayStyle { get { return Base.Style & ((int)GridDisplayStyle.showLine | (int)GridDisplayStyle.showCrossPoint | (int)GridDisplayStyle.showNull); } set { Base.Style &= ~((int)GridDisplayStyle.showLine | (int)GridDisplayStyle.showCrossPoint | (int)GridDisplayStyle.showNull); Base.Style |= value; } } [XmlIgnore] [Category("基础属性"), DisplayName("标注方式"), PropertyOrder(4)] [TypeConverter(typeof(SigmaDrawerElement.Converter.FrameGridStyleConverter))] public int TextMode { get { return Base.Style & (int)GridTextStyle.textAll; } set { Base.Style &= ~(int)GridTextStyle.textAll; Base.Style |= value; } } //MarkBorder [XmlIgnore] [Category("基础属性"), DisplayName("坐标范围"), PropertyOrder(5)] [TypeConverter(typeof(GeoSigma.SigmaDrawerStyle.Converter.BaseExpandableConverter))] public DrawerRange RangeDelta { get { if (GridRange == null) { GridRange = new DrawerCoordinateLBTR(); } return GridRange.RangeDelta; } set { GridRange.Create(value.Left, value.Right, value.Bottom, value.Top); } } [XmlIgnore] [Browsable(false)] public DrawerCoordinateLBTR GridRange { get; set; } [XmlIgnore] [Category("外边框"), DisplayName("是否显示"), PropertyOrder(1)] [TypeConverter(typeof(YesNoConverter))] public bool EnableFrame { get { if (((int)Base.Style & (int)GridingStyle.showOutFrame) == 0) { return false; } else { return true; } } set { if (value == true) { Base.Style |= (int)GridingStyle.showOutFrame; } else { Base.Style &= ~(int)GridingStyle.showOutFrame; } } } [XmlIgnore] [Category("外边框"), DisplayName("厚度"), PropertyOrder(2)] public double FrameThickness { get { return Frame.Thickness; } set { Frame.Thickness = value; } } [XmlIgnore] #if NET8_0 #else [Editor(typeof(PropertyEditorColor), typeof(UITypeEditor))] #endif [Category("外边框"), DisplayName("颜色"), PropertyOrder(3)] public Color FrameColor { get { return ColorTranslator.FromWin32(Frame.FrameColor); } set { Frame.FrameColor = ColorTranslator.ToWin32(value); } } [XmlIgnore] [Category("高级"), DisplayName("基数"), PropertyOrder(1)] public PropertyPoint BaseOffset { get { return new PropertyPoint(Other.BX, Other.BY); } set { Other.BX = value.X; Other.BY = value.Y; } } [XmlIgnore] [Category("高级"), DisplayName("系数"), PropertyOrder(2)] public PropertyPoint BaseScale { get { return new PropertyPoint(Other.CX, Other.CY); } set { Other.CX = value.X; Other.CY = value.Y; } } [XmlElement] [Browsable(false)] public string Coordinate { get { if (GridRange == null) { return string.Empty; } return GridRange.Text; } set { GridRange = new DrawerCoordinateLBTR(); GridRange.Text = value; } } [Browsable(false)] [XmlElement] public FrameGridBase Base { get; set; } [XmlElement] [Browsable(false)] public FrameGridOther Other { get; set; } [XmlElement] [Browsable(false)] public FrameGridOuter Frame { get; set; } } public class FrameGridBase { [XmlAttribute] public double Height { get; set; } = 0.2; [XmlAttribute] public double Width { get; set; } = 0.08; private double stepX = 10; [XmlAttribute] public double StepX { get { return stepX; } set { if (value > 0) { stepX = value; } else { #if NET8_0 #else MessageBox.Show("输入值必须大于零"); #endif } } } [XmlAttribute] private double stepY = 10; [XmlAttribute] public double StepY { get { return stepY; } set { if (value > 0) { stepY = value; } else { #if NET8_0 #else MessageBox.Show("输入值必须大于零"); #endif } } } [XmlAttribute] public int Style { get; set; } = (int)GridDisplayStyle.showLine | (int)GridingStyle.markAllSide | (int)GridingStyle.showInFrame | (int)GridingStyle.showText | (int)GridTextStyle.textMath | (int)GridingStyle.showOutFrame; } public class FrameGridOther { [XmlAttribute] public double BX { get; set; } = 0; [XmlAttribute] public double BY { get; set; } = 0; [XmlAttribute] public double CX { get; set; } = 0; [XmlAttribute] public double CY { get; set; } = 0; } public class FrameGridOuter { [XmlAttribute] public double Thickness { get; set; } = 0.1; [XmlAttribute] public bool BlackFrame { get; set; } = true; [XmlAttribute] public string MarkName { get; set; } = string.Empty; [XmlAttribute] public int Style { get; set; } = (int)FrameStyle.FRAME_BLACK_LINE | (int)FrameStyle.modeCenter | (int)FrameStyle.COORDINATE_LEFT_BOTTOM | (int)FrameStyle.INSERT_DRAW_PLUS; [XmlAttribute("Color")] public int FrameColor { get; set; } = 0; } }