• 绘制半口角


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

    基类:

    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);
            }
    
  • 相关阅读:
    EasyNVR视频平台无法输出RTSP流地址排查步骤
    EasyNVR平台实现播流地址超时无法播放功能过程分享
    EasyNVR视频平台集成出现播放一段时间后自动断开的情况排查及优化
    EasyNVR-ARM版云终端频繁死机重启原因分析
    EasyNVR用户登录修改为IP+用户名限制的修改过程分享
    EasyNVR视频平台设备通道页面显示错误的调整方法
    【解决方案】视频智能监控系统为酒店智能化建设提供一体化融合解决方案
    1051 Pop Sequence (25 分)
    1089 Insert or Merge (25 分)
    1085 Perfect Sequence (25 分)
  • 原文地址:https://www.cnblogs.com/magic_evan/p/1859823.html
Copyright © 2020-2023  润新知