경로(GDI+)
경로는 선, 사각형, 단순 곡선을 결합하여 형성됩니다. 벡터 그래픽 개요에서 다음 기본 구성 요소는 그림을 그리는 데 가장 유용한 것으로 입증되었습니다.
- 선
- 사각형
- 타원
- 원호
- 다각형
- 카디널 스플라인
- 베지어 스플라인
Windows GDI+에서 GraphicsPath 개체를 사용하면 이러한 구성 요소의 시퀀스를 단일 단위로 수집할 수 있습니다. 그런 다음 Graphics 클래스의 Graphics::D rawPath 메서드를 한 번 호출하여 선, 사각형, 다각형 및 곡선의 전체 시퀀스를 그릴 수 있습니다 . 다음 그림에서는 선, 호, 베지어 스플라인, 카디널 스플라인을 결합하여 만든 경로를 보여 줍니다.
GraphicsPath 클래스는 그릴 항목 시퀀스를 만드는 메서드인 AddLine, AddRectangle, AddEllipse, AddArc, AddPolygon, AddCurve(카디널 스플라인의 경우) 및 AddBezier를 제공합니다. 이러한 각 메서드는 오버로드됩니다. 즉, 각 메서드는 서로 다른 매개 변수 목록을 사용하여 여러 변형으로 제공됩니다. 예를 들어 AddLine 메서드의 한 변형은 4개의 정수를 수신하고 다른 변형 AddLine 메서드는 두 개의 Point 개체를 받습니다.
경로에 선, 사각형 및 베지어 스플라인을 추가하는 메서드에는 단일 호출에서 경로에 여러 항목을 추가하는 복수 도우미 메서드인 AddLines, AddRectangles 및 AddBeziers가 있습니다. 또한 AddCurve 메서드에는 경로에 닫힌 곡선을 추가하는 도우미 메서드 AddClosedCurve가 있습니다.
경로를 그리려면 Graphics 개체, Pen 개체 및 GraphicsPath 개체가 필요합니다. Graphics 개체는 Graphics::D rawPath 메서드를 제공하며 Pen 개체는 경로의 특성(예: 선 너비 및 색)을 저장합니다. GraphicsPath 개체는 경로를 구성하는 선, 사각형 및 곡선의 시퀀스를 저장합니다. Pen 개체 및 GraphicsPath 개체의 주소는 Graphics::D rawPath 메서드에 인수로 전달됩니다. 다음 예제에서는 선, 타원 및 Bézier 스플라인으로 구성된 경로를 그립니다.
myGraphicsPath.AddLine(0, 0, 30, 20);
myGraphicsPath.AddEllipse(20, 20, 20, 40);
myGraphicsPath.AddBezier(30, 60, 70, 60, 50, 30, 100, 10);
myGraphics.DrawPath(&myPen, &myGraphicsPath);
다음 그림은 경로를 보여 줍니다.
경로에 선, 사각형, 곡선을 추가하는 것 외에도 경로에 경로를 추가할 수 있습니다. 이렇게 하면 기존 경로를 결합하여 크고 복잡한 경로를 형성할 수 있습니다. 다음 코드는 myGraphicsPath에 graphicsPath1 및 graphicsPath2 를 추가 합니다. GraphicsPath::AddPath 메서드의 두 번째 매개 변수는 추가된 경로가 기존 경로에 연결되어 있는지 여부를 지정합니다.
myGraphicsPath.AddPath(&graphicsPath1, FALSE);
myGraphicsPath.AddPath(&graphicsPath2, TRUE);
경로에 추가할 수 있는 다른 두 항목은 문자열과 원형입니다. 원형은 타원의 내부 부분입니다. 다음 예제에서는 호, 카디널 스플라인, 문자열 및 원형에서 경로를 만듭니다.
myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180);
myGraphicsPath.AddCurve(myPointArray, 3);
myGraphicsPath.AddString(L"a string in a path", 18, &myFontFamily,
0, 24, myPointF, &myStringFormat);
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110);
myGraphics.DrawPath(&myPen, &myGraphicsPath);
다음 그림은 경로를 보여 줍니다. 경로를 연결할 필요는 없습니다. 호, 카디널 스플라인, 문자열, 원형은 구분됩니다.