4 水管
1 水管流动的方向,粗细

2 、代码编写
public partial class UCPipe : UserControl { public UCPipe() { InitializeComponent(); this.SetStyle(ControlStyles.AllPaintingInWmPaint, true); this.SetStyle(ControlStyles.DoubleBuffer, true); this.SetStyle(ControlStyles.ResizeRedraw, true); this.SetStyle(ControlStyles.Selectable, true); this.SetStyle(ControlStyles.SupportsTransparentBackColor, true); this.SetStyle(ControlStyles.UserPaint, true); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; this.SizeChanged += UCPipe_SizeChanged; this.Size = new Size(200, 50); m_timer = new Timer(); m_timer.Interval = 100; m_timer.Tick += timer_Tick; //m_timer.Enabled = true; } private void timer_Tick(object sender, EventArgs e) { intLineLeft += 2; if (intLineLeft > 12) intLineLeft = 0; Refresh(); } private void UCPipe_SizeChanged(object sender, EventArgs e) { intPenWidth = pipeStyle.ToString().StartsWith("H") ? this.Height : this.Width; } private bool isFlow = false; [Description("是否流动"), Category("自定义")] public bool IsFlow { get { return isFlow; } set { isFlow = value; if(isFlow) { m_timer.Start(); } else { m_timer.Stop(); } Refresh(); } } private int flowWidth = 4; [Description("流动线的粗细"), Category("自定义")] public int FlowWidth { get { return flowWidth; } set { flowWidth = value; if (FlowWidth <= 0) return; Refresh(); } } private int flowLength= 10; [Description("流动线的长度"), Category("自定义")] public int FlowLength { get { return flowLength; } set { flowLength = value; Refresh(); } } private int flowSpace = 4; [Description("流动线的间隔"), Category("自定义")] public int FlowSpace { get { return flowSpace; } set { flowSpace = value; Refresh(); } } /// <summary> /// 管道样式 /// </summary> private PipeStyle pipeStyle = PipeStyle.Horizontal_None_None; [Description("样式"), Category("自定义")] public PipeStyle PipeStyle { get { return pipeStyle; } set { string strOld = pipeStyle.ToString().Substring(0, 1); string strNew = value.ToString().Substring(0, 1); pipeStyle = value; if (strOld != strNew) { this.Size = new Size(this.Size.Height, this.Size.Width); } Refresh(); } } /// <summary> /// 管道颜色 /// </summary> private Color pipeColor = Color.FromArgb(255, 77, 59); [Description("颜色"), Category("自定义")] public Color PipeColor { get { return pipeColor; } set { pipeColor = value; Refresh(); } } /// <summary> /// 流动条颜色 /// </summary> private Color flowColor = Color.FromArgb(3, 169, 243); [Description("液体颜色"), Category("自定义")] public Color FlowColor { get { return flowColor; } set { flowColor = value; if (flowDirection !=FlowDirection.None) Refresh(); } } /// <summary> ///流动方向 /// </summary> private FlowDirection flowDirection = FlowDirection.Forward; [Description("流动方向"), Category("自定义")] public FlowDirection FlowDirection { get { return flowDirection; } set { flowDirection = value; Refresh(); } } /// <summary> /// 流动速度 定时器间隔 /// </summary> private int flowSpeed = 100; [Description("流速,越小,速度越快"), Category("自定义")] public int FlowSpeed { get { return flowSpeed; } set { if (value <= 0) return; flowSpeed = value; m_timer.Interval = value; } } /// <summary> /// 笔的粗细 /// </summary> int intPenWidth = 0; /// <summary> /// /// </summary> int intLineLeft = 0; /// <summary> /// 定时器 /// </summary> Timer m_timer; protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; List<ArcEntity> lstArcs = new List<ArcEntity>(); GraphicsPath path = new GraphicsPath(); GraphicsPath linePath = new GraphicsPath(); switch (PipeStyle) { #region case PipeStyle.Horizontal_None_None: path.AddLines(new PointF[] { new PointF(0, 0), new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height), new PointF(0, this.Height) }); path.CloseAllFigures(); linePath.AddLine(0, this.Height / 2, this.Width, this.Height / 2); break; case PipeStyle.Horizontal_Up_None: path.AddLines(new PointF[] { new PointF(0, 0), new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height), new PointF(0+intPenWidth, this.Height) }); path.AddArc(new Rectangle(0, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), 90, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2 + 1, -1 * intPenWidth / 2 - 1, intPenWidth, intPenWidth), 181, -91); linePath.AddLine(intPenWidth, this.Height / 2, this.Width, this.Height / 2); lstArcs.Add(new ArcEntity() { rect = new Rectangle(0, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), startAngle = 90, sweepAngle = 90 }); break; case PipeStyle.Horizontal_Down_None: path.AddLines(new PointF[] { new PointF(intPenWidth, 0), new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height), new PointF(0, this.Height) }); path.AddArc(new Rectangle(0, -1, intPenWidth * 2, intPenWidth * 2), 180, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2 + 1, this.Height / 2, intPenWidth, intPenWidth), 179, 91); linePath.AddLine(intPenWidth + 1, this.Height / 2, this.Width, this.Height / 2); lstArcs.Add(new ArcEntity() { rect = new Rectangle(0, -1, intPenWidth * 2, intPenWidth * 2), startAngle = 180, sweepAngle = 90 }); break; case PipeStyle.Horizontal_None_Up: path.AddLines(new PointF[] { new PointF(this.ClientRectangle.Right-intPenWidth, this.Height), new PointF(0, this.Height), new PointF(0, 0), new PointF(this.ClientRectangle.Right-intPenWidth, 0) }); path.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), 0, 90); path.CloseAllFigures(); linePath.AddLine(0, this.Height / 2, this.Width - intPenWidth, this.Height / 2); linePath.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth - intPenWidth / 2 - 1, -1 * intPenWidth / 2 - 1, intPenWidth, intPenWidth), 91, -91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), startAngle = 0, sweepAngle = 90 }); break; case PipeStyle.Horizontal_None_Down: path.AddLines(new PointF[] { new PointF(this.ClientRectangle.Right, this.Height), new PointF(0, this.Height), new PointF(0, 0), new PointF(this.ClientRectangle.Right-intPenWidth, 0) }); path.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, -1, intPenWidth * 2, intPenWidth * 2), 270, 90); path.CloseAllFigures(); linePath.AddLine(0, this.Height / 2, this.Width - intPenWidth - 1, this.Height / 2); linePath.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth - intPenWidth / 2 - 1, intPenWidth / 2, intPenWidth, intPenWidth), 269, 91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, -1, intPenWidth * 2, intPenWidth * 2), startAngle = 270, sweepAngle = 90 }); break; case PipeStyle.Horizontal_Down_Up: path.AddLine(new Point(intPenWidth, 0), new Point(this.Width, 0)); path.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), 0, 90); path.AddLine(new Point(this.Width - intPenWidth, this.Height), new Point(0, this.Height)); path.AddArc(new Rectangle(0, -1, intPenWidth * 2, intPenWidth * 2), 180, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2 + 1, this.Height / 2, intPenWidth, intPenWidth), 179, 91); //linePath.AddLine(intPenWidth, this.Height / 2, this.Width - intPenWidth, this.Height / 2); linePath.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth - intPenWidth / 2 - 1, -1 * intPenWidth / 2 - 1, intPenWidth, intPenWidth), 91, -91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(0, -1, intPenWidth * 2, intPenWidth * 2), startAngle = 180, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), startAngle = 0, sweepAngle = 90 }); break; case PipeStyle.Horizontal_Up_Down: path.AddLine(new Point(0, 0), new Point(this.Width - intPenWidth, 0)); path.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, -1, intPenWidth * 2, intPenWidth * 2), 270, 90); path.AddLine(new Point(this.Width, this.Height), new Point(intPenWidth, this.Height)); path.AddArc(new Rectangle(0, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), 90, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2 + 1, -1 * intPenWidth / 2 - 1, intPenWidth, intPenWidth), 181, -91); linePath.AddLine(intPenWidth, this.Height / 2, this.Width - intPenWidth - 1, this.Height / 2); linePath.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth - intPenWidth / 2 - 1, intPenWidth / 2, intPenWidth, intPenWidth), 269, 91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(0, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), startAngle = 90, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, -1, intPenWidth * 2, intPenWidth * 2), startAngle = 270, sweepAngle = 90 }); break; case PipeStyle.Horizontal_Up_Up: path.AddLine(new Point(0, 0), new Point(this.Width, 0)); path.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), 0, 90); path.AddLine(new Point(this.Width - intPenWidth, this.Height), new Point(intPenWidth, this.Height)); path.AddArc(new Rectangle(0, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), 90, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2 + 1, -1 * intPenWidth / 2 - 1, intPenWidth, intPenWidth), 181, -91); //linePath.AddLine(intPenWidth, this.Height / 2, this.Width - intPenWidth, this.Height / 2); linePath.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth - intPenWidth / 2 - 1, -1 * intPenWidth / 2 - 1, intPenWidth, intPenWidth), 91, -91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(0, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), startAngle = 90, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, intPenWidth * -1, intPenWidth * 2, intPenWidth * 2), startAngle = 0, sweepAngle = 90 }); break; case PipeStyle.Horizontal_Down_Down: path.AddLine(new Point(intPenWidth, 0), new Point(this.Width - intPenWidth, 0)); path.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, -1, intPenWidth * 2, intPenWidth * 2), 270, 90); path.AddLine(new Point(this.Width, this.Height), new Point(0, this.Height)); path.AddArc(new Rectangle(0, -1, intPenWidth * 2, intPenWidth * 2), 180, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2 + 1, this.Height / 2, intPenWidth, intPenWidth), 179, 91); linePath.AddLine(intPenWidth + 1, this.Height / 2, this.Width - intPenWidth - 1, this.Height / 2); linePath.AddArc(new Rectangle(this.ClientRectangle.Right - intPenWidth - intPenWidth / 2 - 1, intPenWidth / 2, intPenWidth, intPenWidth), 269, 91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(0, -1, intPenWidth * 2, intPenWidth * 2), startAngle = 180, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(this.ClientRectangle.Right - intPenWidth * 2, -1, intPenWidth * 2, intPenWidth * 2), startAngle = 270, sweepAngle = 90 }); break; #endregion #region case PipeStyle.Vertical_None_None: path.AddLines(new PointF[] { new PointF(0, 0), new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height), new PointF(0, this.Height) }); path.CloseAllFigures(); linePath.AddLine(this.Width / 2, 0, this.Width / 2, this.Height); break; case PipeStyle.Vertical_Left_None: path.AddLines(new PointF[] { new PointF(this.ClientRectangle.Right, intPenWidth), new PointF(this.ClientRectangle.Right, this.Height), new PointF(0, this.Height), new PointF(0, 0) }); path.AddArc(new Rectangle(-1 * intPenWidth, 0, intPenWidth * 2, intPenWidth * 2), 270, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(-1 * intPenWidth / 2 - 1, intPenWidth / 2 + 1, intPenWidth, intPenWidth), 269, 91); linePath.AddLine(intPenWidth / 2, intPenWidth, intPenWidth / 2, this.Height); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1 * intPenWidth, 0, intPenWidth * 2, intPenWidth * 2), startAngle = 270, sweepAngle = 90 }); break; case PipeStyle.Vertical_Right_None: path.AddLines(new PointF[] { new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height), new PointF(0, this.Height), new PointF(0, intPenWidth) }); path.AddArc(new Rectangle(-1, 0, intPenWidth * 2, intPenWidth * 2), 180, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2, intPenWidth / 2 + 1, intPenWidth, intPenWidth), 271, -91); linePath.AddLine(intPenWidth / 2, intPenWidth + 1, intPenWidth / 2, this.Height); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1, 0, intPenWidth * 2, intPenWidth * 2), startAngle = 180, sweepAngle = 90 }); break; case PipeStyle.Vertical_None_Left: path.AddLines(new PointF[] { new PointF(0, this.Height), new PointF(0, 0), new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height-intPenWidth), }); path.AddArc(new Rectangle(-1 * intPenWidth, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), 0, 90); path.CloseAllFigures(); linePath.AddLine(this.Width / 2, 0, this.Width / 2, this.Height - intPenWidth); linePath.AddArc(new Rectangle(-1 * intPenWidth / 2 - 1, this.Height - intPenWidth - intPenWidth / 2 - 1, intPenWidth, intPenWidth), -1, 91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1 * intPenWidth, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), startAngle = 0, sweepAngle = 90 }); break; case PipeStyle.Vertical_None_Right: path.AddLines(new PointF[] { new PointF(0, this.Height-intPenWidth), new PointF(0, 0), new PointF(this.ClientRectangle.Right, 0), new PointF(this.ClientRectangle.Right, this.Height), }); path.AddArc(new Rectangle(-1, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), 90, 90); path.CloseAllFigures(); linePath.AddLine(this.Width / 2, 0, this.Width / 2, this.Height - intPenWidth - 1); linePath.AddArc(new Rectangle(intPenWidth / 2, this.Height - intPenWidth - intPenWidth / 2 - 1, intPenWidth, intPenWidth), 181, -91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), startAngle = 90, sweepAngle = 90 }); break; case PipeStyle.Vertical_Left_Right: path.AddLine(this.Width, intPenWidth, this.Width, this.Height); path.AddArc(new Rectangle(-1, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), 90, 90); path.AddLine(0, this.Height - intPenWidth, 0, 0); path.AddArc(new Rectangle(-1 * intPenWidth, 0, intPenWidth * 2, intPenWidth * 2), 270, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(-1 * intPenWidth / 2 - 1, intPenWidth / 2 + 1, intPenWidth, intPenWidth), 269, 91); //linePath.AddLine(intPenWidth / 2, intPenWidth, intPenWidth / 2, this.Height - intPenWidth); linePath.AddArc(new Rectangle(intPenWidth / 2, this.Height - intPenWidth - intPenWidth / 2 - 1, intPenWidth, intPenWidth), 181, -91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1 * intPenWidth, 0, intPenWidth * 2, intPenWidth * 2), startAngle = 270, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), startAngle = 90, sweepAngle = 90 }); break; case PipeStyle.Vertical_Right_Left: path.AddLine(this.Width, 0, this.Width, this.Height - intPenWidth); path.AddArc(new Rectangle(-1 * intPenWidth, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), 0, 90); path.AddLine(0, this.Height, 0, intPenWidth); path.AddArc(new Rectangle(-1, 0, intPenWidth * 2, intPenWidth * 2), 180, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2, intPenWidth / 2 + 1, intPenWidth, intPenWidth), 271, -91); //linePath.AddLine(intPenWidth / 2, intPenWidth, intPenWidth / 2, this.Height - intPenWidth); linePath.AddArc(new Rectangle(-1 * intPenWidth / 2 - 1, this.Height - intPenWidth - intPenWidth / 2 - 1, intPenWidth, intPenWidth), -1, 91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1, 0, intPenWidth * 2, intPenWidth * 2), startAngle = 180, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1 * intPenWidth, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), startAngle = 0, sweepAngle = 90 }); break; case PipeStyle.Vertical_Left_Left: path.AddLine(this.Width, intPenWidth, this.Width, this.Height - intPenWidth); path.AddArc(new Rectangle(-1 * intPenWidth, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), 0, 90); path.AddLine(0, this.Height, 0, 0); path.AddArc(new Rectangle(-1 * intPenWidth, 0, intPenWidth * 2, intPenWidth * 2), 270, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(-1 * intPenWidth / 2 - 1, intPenWidth / 2 + 1, intPenWidth, intPenWidth), 269, 91); //linePath.AddLine(intPenWidth / 2, intPenWidth, intPenWidth / 2, this.Height - intPenWidth); linePath.AddArc(new Rectangle(-1 * intPenWidth / 2 - 1, this.Height - intPenWidth - intPenWidth / 2 - 1, intPenWidth, intPenWidth), -1, 91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1 * intPenWidth, 0, intPenWidth * 2, intPenWidth * 2), startAngle = 270, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1 * intPenWidth, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), startAngle = 0, sweepAngle = 90 }); break; case PipeStyle.Vertical_Right_Right: path.AddLine(this.Width, 0, this.Width, this.Height); path.AddArc(new Rectangle(-1, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), 90, 90); path.AddLine(0, this.Height - intPenWidth, 0, intPenWidth); path.AddArc(new Rectangle(-1, 0, intPenWidth * 2, intPenWidth * 2), 180, 90); path.CloseAllFigures(); linePath.AddArc(new Rectangle(intPenWidth / 2, intPenWidth / 2 + 1, intPenWidth, intPenWidth), 271, -91); //linePath.AddLine(intPenWidth / 2, intPenWidth, intPenWidth / 2, this.Height - intPenWidth); linePath.AddArc(new Rectangle(intPenWidth / 2, this.Height - intPenWidth - intPenWidth / 2 - 1, intPenWidth, intPenWidth), 180, -91); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1, 0, intPenWidth * 2, intPenWidth * 2), startAngle = 180, sweepAngle = 90 }); lstArcs.Add(new ArcEntity() { rect = new Rectangle(-1, this.Height - intPenWidth * 2, intPenWidth * 2, intPenWidth * 2), startAngle = 90, sweepAngle = 90 }); break; #endregion } g.FillPath(new SolidBrush(PipeColor), path); //渐变色 int intCount = intPenWidth / 2 / 4; int intSplit = (255 - 100) / intCount; for (int i = 0; i < intCount; i++) { int _penWidth = intPenWidth / 2 - 4 * i; if (_penWidth <= 0) _penWidth = 1; g.DrawPath(new Pen(new SolidBrush(Color.FromArgb(40, Color.White.R, Color.White.G, Color.White.B)), _penWidth), linePath); if (_penWidth == 1) break; } g.SmoothingMode = SmoothingMode.HighQuality; //使用抗锯齿画圆角 foreach (var item in lstArcs) { g.DrawArc(new Pen(new SolidBrush(this.BackColor)), item.rect, item.startAngle, item.sweepAngle); } //液体流动 if (FlowDirection != FlowDirection.None) { Pen p = new Pen(new SolidBrush(FlowColor),FlowWidth); p.DashPattern = new float[] { FlowLength, FlowSpace }; p.DashOffset = intLineLeft * (FlowDirection == FlowDirection.Forward ? -1 : 1); g.DrawPath(p, linePath); } } } /// <summary> /// 圆角类 /// </summary> class ArcEntity { /// <summary> /// 矩形区域 /// </summary> public Rectangle rect { get; set; } /// <summary> ///开始角度 /// </summary> public float startAngle { get; set; } /// <summary> /// 转动角度 /// </summary> public float sweepAngle { get; set; } } /// <summary> /// 流动方向 /// </summary> public enum FlowDirection { None, /// <summary> /// 向后 /// </summary> Forward, /// <summary> /// 向前 /// </summary> Backward } /// <summary> /// 管道样式 /// </summary> public enum PipeStyle { /// <summary> /// 直线 /// </summary> Horizontal_None_None, /// <summary> /// 左上 /// </summary> Horizontal_Up_None, /// <summary> /// 左下 /// </summary> Horizontal_Down_None, /// <summary> /// 右上 /// </summary> Horizontal_None_Up, /// <summary> /// 右下 /// </summary> Horizontal_None_Down, /// <summary> /// 左下右上 /// </summary> Horizontal_Down_Up, /// <summary> /// 左上右下 /// </summary> Horizontal_Up_Down, /// <summary> /// 左上,右上 /// </summary> Horizontal_Up_Up, /// <summary> /// 左下右下 /// </summary> Horizontal_Down_Down, /// <summary> /// 竖线 /// </summary> Vertical_None_None, /// <summary> /// 上左 /// </summary> Vertical_Left_None, /// <summary> /// 上右 /// </summary> Vertical_Right_None, /// <summary> /// 下左 /// </summary> Vertical_None_Left, /// <summary> /// 下右 /// </summary> Vertical_None_Right, /// <summary> /// 上左下右 /// </summary> Vertical_Left_Right, /// <summary> /// 上右下左 /// </summary> Vertical_Right_Left, /// <summary> /// 上左下左 /// </summary> Vertical_Left_Left, /// <summary> /// 上右下右 /// </summary> Vertical_Right_Right, }

浙公网安备 33010602011771号