첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 특정 위치를 기준으로 회전하기

------------------------------------------------------------------------------------------------------------------------


TestProject.zip


MainFormc.cs

 

 

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Windows.Forms;

 

namespace TestProject

{

    /// <summary>

    /// 메인 폼

    /// </summary>

    public partial class MainForm : Form

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor

        ////////////////////////////////////////////////////////////////////////////////////////// Public

 

        #region 생성자 - MainForm()

 

        /// <summary>

        /// 생성자

        /// </summary>

        public MainForm()

        {

            InitializeComponent();

 

            #region 이벤트를 설정한다.

 

            this.canvasPictureBox.Paint += canvasPictureBox_Paint;

 

            #endregion

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Private

        //////////////////////////////////////////////////////////////////////////////// Event

 

        #region 캔버스 픽처 박스 페인트시 처리하기 - canvasPictureBox_Paint(sender, e)

 

        /// <summary>

        /// 캔버스 픽처 박스 페인트시 처리하기

        /// </summary>

        /// <param name="sender">이벤트 발생자</param>

        /// <param name="e">이벤트 인자</param>

        private void canvasPictureBox_Paint(object sender, PaintEventArgs e)

        {

            e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;

 

            DrawArrow(e.Graphics, Pens.Blue);

 

            Point center = new Point(50, 70);

 

            e.Graphics.FillEllipse(Brushes.Red, center.X - 3, center.Y - 3, 6, 6);

 

            e.Graphics.Transform = GetMatrix(center, 30);

 

            DrawArrow(e.Graphics, Pens.Green);

        }

 

        #endregion

 

        //////////////////////////////////////////////////////////////////////////////// Function

 

        #region 화살표 그리기 - DrawArrow(graphics, pen)

 

        /// <summary>

        /// 화살표 그리기

        /// </summary>

        /// <param name="graphics">그래픽스</param>

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

        private void DrawArrow(Graphics graphics, Pen pen)

        {

            Point[] pointArray =

            {

                new Point(50 ,  50),

                new Point(150,  50),

                new Point(150,  20),

                new Point(200,  70),

                new Point(150, 120),

                new Point(150,  90),

                new Point(50 ,  90)

            };

 

            graphics.DrawPolygon(pen, pointArray);

        }

 

        #endregion

        #region 매트릭스 구하기 - GetMatrix(centerPoint, rotateAngle)

 

        /// <summary>

        /// 매트릭스 구하기

        /// </summary>

        /// <param name="centerPoint">중심 포인트</param>

        /// <param name="rotateAngle">회전 각도</param>

        /// <returns>매트릭스</returns>

        private Matrix GetMatrix(Point centerPoint, float rotateAngle)

        {

            Matrix matrix = new Matrix();

 

            matrix.RotateAt(rotateAngle, centerPoint);

 

            return matrix;

        }

 

        #endregion

    }

}

 

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요