달나라 노트

C# : FillPie (부채꼴 그리기) 본문

C#/C#

C# : FillPie (부채꼴 그리기)

CosmosProject 2022. 5. 18. 21:13
728x90
반응형

 

 

 

FillPie method는 Window에 부채꼴을 그려줍니다.

 

사용법은 다음과 같습니다.

 

 

 

Syntax

FillPie(Brush, x, y, width, height, start_angle, end_angle)

 

- Brush

Brush 객체입니다.

Brush 객체는 부채꼴을 무슨 색으로 그릴지에 대한 정보를 가지고 있습니다.

 

 

- x, y

그려질 부채꼴의 x, y 좌표입니다.

여기서 주의할 점은 부채꼴의 중심을 기준으로 한 x, y 좌표가 아닙니다.

부채꼴을 타원으로 만들었을 때 그 타원을 감싸는 사각형의 왼쪽 위 꼭지점의 x, y 좌표를 기준으로 타원을 위치시킵니다.

 

 

 

위 그림을 봅시다.

부채꼴은 타원의 일부입니다.

따라서 위 그림의 원에서 회색 부분을 잘라내면 파란색의 부채꼴이 남게되죠.

여기서 파란색 부채꼴이 속한 회색 원을 감싸는 사각형을 빨간색 선으로 표시했습니다.

이 빨간색 사각형의 왼쪽 위 꼭지점의 좌표가 바로 x, y입니다.

 

실제 C#에서 FillPie로 부채꼴을 그릴 때 위같은 방식으로 그려지며, 최종적으로 사용자에게 보이는 것은 위 이미지에서 모든걸 지우고 남은 파란색 부채꼴이 될 것입니다.

 

 

 

- width, height

부채꼴은 타원의 일부입니다.

따라서 width, height은 타원의 가로/세로 길이를 의미합니다.

그리고 이렇게 그려진 타원에서 일부를 잘라 부채꼴을 만드는 형식입니다.

 

그림으로 나타내면 위와 같습니다.

노란색 선이 Width이며 빨간색 선이 Height입니다.

그리고 부채꼴을 그렸을 때 최종적으로 보이는 부분은 파란색 부채꼴이 될 것입니다.

 

 

 

- start_angle, end_angle

width, height 인자를 설명할 때 부채꼴은 타원의 일부이며 타원의 일부를 잘라 부채꼴로 표시해준다고 했습니다.

따라서 타원의 일부를 자를 때 몇도부터 몇도까지 자를지를 의미합니다.

start_angle은 타원의 몇도 지점에서 부채꼴을 자르기 시작할지를 의미합니다.

end_angle은 start_angle로부터 몇도만큼 시계방향으로 회전하여 부채꼴을 자를지를 의미합니다.

 

 

타원의 각도는 3시방향이 0도입니다.

그리고 시계방향으로 돌면 각도가 양수로 늘어나고 반시계방향으로 돌면 각도가 음수로 늘어납니다.

 

그림으로 나타내면 위와 같습니다.

 

3시방향을 0도로 해서 시계 방향으로 돌면서 표시할 경우 각도가 양의 정수로 늘어나고

3시방향을 0도로 해서 반시계 방향으로 돌면서 표시할 경우 각도가 음수로 늘어나게 됩니다.

 

 

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;
using System.Drawing;

class CardCatch
{
    public static void Main()
    {
        Form fm = new Form();
        fm.ClientSize = new Size(300, 300);

        void fm_paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.FillPie(new SolidBrush(Color.Gray), 0, 0, 150, 200, 0, 45);
        }
        fm.Paint += new PaintEventHandler(fm_paint);

        Application.Run(fm);
    }
}

 

위 코드를 봅시다.

 

- g.FillPie(new SolidBrush(Color.Gray), 0, 0, 150, 200, 0, 45);

FillPie를 사용하는 부분입니다.

각 인자별 의미를 봅시다.

 

- new SolidBrush(Color.Gray)

Brush 객체입니다. 색상을 Gray로 지정하였기 때문에 회색 부채꼴이 그려질겁니다.

 

- 0, 0

부채꼴이 속해있는 타원의 x, y 좌표입니다.

 

- 150, 200

부채꼴이 속해있는 타원의 width = 150

부채꼴이 속해있는 타원의 height = 200

 

- 0, 45

타원의 3시방향 0도부터 시작해 시계방향으로 45도까지의 영역만을 남겨 부채꼴을 나타내라는 의미입니다.

 

 

결과는 위와 같습니다.

 

 

 

위 결과가 어떻게 생성된건지 좀 더 쉽게 그려보면 아래와 같습니다.

 

 

가로 150, 세로 200인 초록색 타원을 그립니다.

초록색 타원의 위치는 타원을 감싸는 빨간색 사각형의 왼쪽 상단 꼭지점을 기준으로 하며 이 꼭지점의 좌표는 x=0, y=0입니다.

그리고 이 초록색 타원의 3시방향을 0도로 하여 시계방향으로 45도까지의 영역만을 남겨 회색 부채꼴을 만듭니다.

 

 

그래서 결국 이같은 결과가 나온 것입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;
using System.Drawing;

class CardCatch
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Width = 500;
        fm.Height = 500;

        PictureBox pb = new PictureBox();
        pb.Parent = fm;
        pb.Width = 300;
        pb.Height = 300;
        pb.Location = new Point(0, 0);

        void fm_paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.FillPie(new SolidBrush(Color.Gray), 0, 0, 200, 150, 0, 45);
        }
        pb.Paint += new PaintEventHandler(fm_paint);


        Application.Run(fm);
    }
}

 

 

        void fm_paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.FillPie(new SolidBrush(Color.Gray), 0, 0, 200, 150, 0, 45);
        }
        pb.Paint += new PaintEventHandler(fm_paint);

 

위 예시처럼 Graphic event를 PictureBox에도 등록할 수 있습니다.

 

 

 

 

 

 

 

using System;
using System.Windows.Forms;
using System.Drawing;

class CardCatch
{
    public static void Main()
    {
        Form fm = new Form();
        fm.Width = 500;
        fm.Height = 500;

        PictureBox pb = new PictureBox();
        pb.Parent = fm;
        pb.Width = 300;
        pb.Height = 300;
        pb.Location = new Point(50, 100);

        void fm_paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;

            g.FillPie(new SolidBrush(Color.Gray), 0, 0, 200, 150, 0, 45);
        }
        pb.Paint += new PaintEventHandler(fm_paint);


        Application.Run(fm);
    }
}

 

 

주의할 점은 FillPie가 PictureBox에 속할 경우 Pie의 x, y 좌표는 Window 전체를 기준으로 한 x, y좌표가 아니라 PictureBox의 좌측 상단을 (0, 0)으로 간주한 좌표를 따르게 된다는 것입니다.

 

 

 

 

 

 

728x90
반응형
Comments