PROGRAMMING WORKSHOP

.Net FrameWork,VB.Net | System.Drawing.Graphics

도형그리기위한 개체들

VBA에서 도형을 많이 그려 보았었다
Shape라는 개체를 많이 사용했었다
특히 도형을 그리는 것은 프로그래밍을 익숙하게 할때 흥미롭고 재미있다
윈도우폼에서도 역시 도형을 당연히 그릴일이 많을 것이다
그러면 어떤 개체를 사용하여야 할지가 가장 궁금하여야 할 것이다
.Net FrameWork 환경의 네임스페이스 System.Drawing.Graphics
에서 Grapics 라는 개체가 제공된다
그동안 자주 사용하였던 Font개체도 실은 System.Drawing 네임스페이스에 속한 것이다
System.Drawing.Font(...)로서 본래경로이고,
System.Drawing은 기본으로 임포트되어 있어서 앞의 네임스페이스 경로를 생략해도 된다
아무튼
System.Drawing.Graphics 개체..
이것을 활용하면 못그리는 도형이 없게 된다
만약에 윈도우폼상에 도형을 그리고 싶다면 폼이 갖고 있는 Graphics개체를 얻어야 한다

Dim oGraphics As System.Drawing.Graphics = Form1.CreateGraphics()

로서 Graphics개체를 얻어낸다
그리고 이것으로 모든 도형을 그려나갈수 있다
도형작업을 하려면..System.Drawing 네임스페이트가 기본으로 임포트되어 있지만
명시적으로 임포트 시키는 것도 좋겠지

Imports System.Drawing

Graphics개체는 아주 많은 메소드를 갖고 있다
아래와 같이 다양한 도형을 그릴수 있는 메소드를 볼수 있다



그림에서 Me.CreateGraphics 에서 Me는 윈도우폼크래스에서 그렸기때문에
Me는 윈도우폼을 참조하는 것이다
그러니 윈도우폼상에 도형이 그려지는 것이다
만약에 Label콘트롤에 그림을 그리고 싶다면 윈도우폼대신에
Dim myGraphics As Graphics=Label1.CreateGraphics
라고 한후 myGraphics.DrawLine이라고 하면 라벨이 캔버스가 되고
이곳에 도형이 그려진다
윈도우의 모든 콘트롤은 하나의 그림을 그릴수 있는 디바이스가 되는 셈이다
이제 중요한 것은 도형을 그리는 메소드에 전달하는 매개변수가
문자열이나, Integer값이나, Double값등과 같은 원시데이타가 아닌
대개가 개체를 전달하게 된다
엑셀VBA에서 보다 더 많은 개체를 주고 받으면서 작업을 하는 것이다
왜 개체를 전달을 많이 하느냐???
섬세한 작업을 하다 보면 정보가 많이 필요하니까 그런 것이고,
예를 들어서 도형을 그릴려면, 가장 중요한 것은 선을 그려야 한다
선을 그리려면 선의 굵기,선의 스타일, 선의 색상에 대한 정보는 기본적으로 필요하다
즉 선을 하나 그리는데 다양한 정보가 한묶음으로 들어와야 하는 셈이다
그래서 이 선을 그리는 도구의 뭉치(개체)를 Pen이라고 이름지어져 있는 것이다
쉽게 생각하여 VBA의 엑셀도형에서 테두리선에 해당하는 것이다
아하... 이 도형을 그리기 위한 선은 내가 만든 Pen개체를 활용하라고 전달한다는 것이구나
맞다...
그래서

Dim myPen As Pen =New Pen(color.Red,5)

라고 하면 색상은 빨강색으로 굵기는 5로 하는 Pen개체를 만든 것이다
그리고 중요한 것은 도형을 그리려면 어느 지점에서 어느 지점까지 그리려면
지점의 정보가 필요하고 이 지점을 Point개체라고 한다
Point개체는 당연히 X값과 Y값두개의 값으로 구성된다
엑셀에서 챠트를 그릴때도 챠트의 계열은 챠트의
X값과 Y값을 읽고 선을 그리는 것을 많이 경험했을 것이다
그리고 선을 제외한 원이나 사각형을 그리려면 기본적으로 Rectangle개채를 필요로 한다
아래의 그림과 같이



그래서 원을 하나 그리려고 한다면,아래와 같이

Dim myPen1 As Pen = New Pen(Brushes.Red, 3)
Dim myPoint1 As Point = New Point(10, 10)
Dim myPoint2 As Point = New Point(100, 100)
Dim myGraphics As Graphics = Me.CreateGraphics
Dim myRect As Rectangle = New Rectangle(myPoint1, myPoint2)
myGraphics.DrawEllipse(myPen1, myRect)

그런데 당연히 원의 테두리선(Pen개체)만 그려졌다
바탕색을 채우려면 뭔가 개체가 하나 더 있어야 할 것이다
아래와 같이 속을 채우는 개체를 만들어서 사용하자

Dim myPen1 As Pen = New Pen(Brushes.Red, 5)
Dim myPoint1 As Point = New Point(10, 10)
Dim myPoint2 As Point = New Point(100, 100)
Dim myBrush As SolidBrush = New SolidBrush(Color.Black)
Dim myGraphics As Graphics = Me.CreateGraphics
Dim myRect As Rectangle = New Rectangle(myPoint1, myPoint2)
myGraphics.DrawEllipse(myPen1, myRect)
myGraphics.FillEllipse(Brushes.Black, myRect)

알수 있는 것이 원을 그리던 무엇을 그리던 Rectangle개체가 기준이
되는 것이다..
위의 기본을 이해하시고, 다양한 표현을 보시기를...



***[LOG-IN]***