绘制半口角

相信大家都在象棋中兵的位置和一些射击游戏里的准心都见过,废话就少说了,看代码吧。

基类:

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;



namespace GDI_Form

{

    /// <summary>

    /// 抽象基类

    /// <para>Author:Evan Lee</para>

    /// <para>QQ:278631309</para>

    /// <para>Blog:http://www.cnblogs.com/magic_evan </para>

    /// </summary>

    public abstract class BaseControl

    {

        private Graphics _g;

        private string _name;

        private int _ID;

        private object _Tag;

        private bool _v;

        private float _x;

        private float _y;

        private float _w;

        private float _h;



        /// <summary>

        /// 获取设置GDI对象

        /// </summary>

        public Graphics G

        {

            get { return _g; }

            set { _g = value; }

        }



        /// <summary>

        /// 对象名称

        /// </summary>

        public string Name

        {

            get { return _name; }

            set { _name = value; }

        }



        /// <summary>

        /// 编号

        /// </summary>

        public int ID

        {

            get { return _ID; }

            set { _ID = value; }

        }



        /// <summary>

        /// 标签数据

        /// </summary>

        public object Tag

        {

            get { return _Tag; }

            set { _Tag = value; }

        }



        /// <summary>

        /// 对象是否可见

        /// </summary>

        public bool Visible

        {

            get { return _v; }

            set { _v = value; }

        }



        /// <summary>

        /// 起始X轴点

        /// </summary>

        public float X

        {

            get { return _x; }

            set { _x = value; }

        }



        /// <summary>

        /// 起始Y轴点

        /// </summary>

        public float Y

        {

            get { return _y; }

            set { _y = value; }

        }



        /// <summary>

        /// 宽度

        /// </summary>

        public float Width

        {

            get { return _w; }

            set { _w = value; }

        }



        /// <summary>

        /// 高度

        /// </summary>

        public float Heiht

        {

            get { return _h; }

            set { _h = value; }

        }



    }

}

 

实现类:

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;



namespace GDI_Form

{

    /// <summary>

    /// 画边角类

    /// <para>Author:Evan Lee</para>

    ///<para>QQ:278631309</para>

    ///<para>Blog:http://www.cnblogs.com/magic_evan </para>

    /// </summary>

    public class Angle : BaseControl

    {

        /// <summary>

        /// 画边角类

        /// </summary>

        /// <param name="g"></param>

        public Angle(Graphics g)

        {

            this.G = g;

        }



        /// <summary>

        /// 角口的方向

        /// ┏ ┓┗ ┛ 

        /// </summary>

        public enum AngleDirection

        {

            /// <summary>

            /// 右上角┗

            /// </summary>

            UpperRight,

            /// <summary>

            /// 右下角┏

            /// </summary>

            LowerRight,

            /// <summary>

            /// 左下角┓

            /// </summary>

            LowerLeft,

            /// <summary>

            /// 左上角┛

            /// </summary>

            UpperLeft

        }



        /// <summary>

        /// 绘制半口角

        /// </summary>

        /// <param name="pen">画笔</param>

        /// <param name="centerP">中心坐标</param>

        /// <param name="offsetP">偏移中心的坐标</param>

        /// <param name="len">角的边长</param>

        /// <param name="direction">角口的方向</param>

        public void DrawAngle(Pen pen, Point centerP, Point offsetP, int len, AngleDirection direction)

        {

            if (this.G == null)

                return;

            switch (direction)

            {

                case AngleDirection.UpperRight:

                    this.G.DrawLine(pen, centerP.X + offsetP.X, centerP.Y - offsetP.Y, centerP.X + offsetP.X + len, centerP.Y - offsetP.Y);

                    this.G.DrawLine(pen, centerP.X + offsetP.X, centerP.Y - offsetP.Y, centerP.X + offsetP.X, centerP.Y - offsetP.Y - len);

                    break;

                case AngleDirection.UpperLeft:

                    this.G.DrawLine(pen, centerP.X - offsetP.X, centerP.Y - offsetP.Y, centerP.X - offsetP.X - len, centerP.Y - offsetP.Y);

                    this.G.DrawLine(pen, centerP.X - offsetP.X, centerP.Y - offsetP.Y, centerP.X - offsetP.X, centerP.Y - offsetP.Y - len);

                    break;

                case AngleDirection.LowerRight:

                    this.G.DrawLine(pen, centerP.X + offsetP.X, centerP.Y + offsetP.Y, centerP.X + offsetP.X + len, centerP.Y + offsetP.Y);

                    this.G.DrawLine(pen, centerP.X + offsetP.X, centerP.Y + offsetP.Y, centerP.X + offsetP.X, centerP.Y + offsetP.Y + len);

                    break;

                case AngleDirection.LowerLeft:

                    this.G.DrawLine(pen, centerP.X - offsetP.X, centerP.Y + offsetP.Y, centerP.X - offsetP.X - len, centerP.Y + offsetP.Y);

                    this.G.DrawLine(pen, centerP.X - offsetP.X, centerP.Y + offsetP.Y, centerP.X - offsetP.X, centerP.Y + offsetP.Y + len);

                    break;

            }

        }

    }

}



 

 
  

 使用方法

        private void test()

        {

            int centerX = this.Width / 2;

            int centerY = this.Height / 2;

            Point centerP = new Point(centerX, centerY);

            Point offsetP = new Point(3, 3);

            int len = 10;



            Graphics g = this.CreateGraphics();

            Pen pen = new Pen(Color.Red, 2);



            Angle angle = new Angle(g);

            angle.DrawAngle(pen, centerP, offsetP, len, Angle.AngleDirection.LowerLeft);

           angle.DrawAngle(pen, centerP, offsetP, len, Angle.AngleDirection.LowerRight);

            angle.DrawAngle(pen, centerP, offsetP, len, Angle.AngleDirection.UpperLeft);

            angle.DrawAngle(pen, centerP, offsetP, len, Angle.AngleDirection.UpperRight);

        }

你可能感兴趣的:(绘制半口角)