구불구불한 모드
.NET 다중 플랫폼 앱 UI(.NET MAUI) 그래픽은 메서드에서 사용할 채우기 알고리즘을 지정할 수 있는 열거형을 FillPath 제공합니다WindingMode. 경로의 윤곽선은 겹칠 수 있으며 묶인 영역은 잠재적으로 채워질 수 있지만 모든 묶은 영역을 채우지 않을 수 있습니다. 경로에 대한 자세한 내용은 경로 그리기를 참조하세요.
열거형 정의 WindingMode 및 EvenOdd
멤버입니다NonZero
. 각 멤버는 점이 밀폐된 영역의 채우기 영역에 있는지 여부를 확인하기 위한 다른 알고리즘을 나타냅니다.
참고 항목
메서드에는 ClipPath 인수를 WindingMode 지정할 수 있는 오버로드가 있습니다. 기본적으로 이 인수는 .로 설정됩니다 WindingMode.NonZero
.
0이 아닌
권선 모드는 NonZero
어떤 방향으로든 지점에서 무한대로 가상의 광선을 그린 다음 경로 윤곽선이 광선을 교차하는 위치를 검사합니다. 카운트는 0에서 시작하여 윤곽선이 왼쪽에서 오른쪽으로 광선을 교차하고 윤곽이 오른쪽에서 왼쪽으로 광선을 교차 할 때마다 감소 할 때마다 증가합니다. 횡단 횟수가 0이면 영역이 채워지지 않습니다. 그렇지 않으면 영역이 채워집니다.
다음 예제에서는 권선 모드를 사용하여 5개 뾰족한 별을 NonZero
채웁니다.
float radius = 0.45f * Math.Min(dirtyRect.Width, dirtyRect.Height);
PathF path = new PathF();
path.MoveTo(dirtyRect.Center.X, dirtyRect.Center.Y - radius);
for (int i = 1; i < 5; i++)
{
double angle = i * 4 * Math.PI / 5;
path.LineTo(new PointF(radius * (float)Math.Sin(angle) + dirtyRect.Center.X, -radius * (float)Math.Cos(angle) + dirtyRect.Center.Y));
}
path.Close();
canvas.StrokeSize = 15;
canvas.StrokeLineJoin = LineJoin.Round;
canvas.StrokeColor = Colors.Red;
canvas.FillColor = Colors.Blue;
canvas.FillPath(path); // Overload automatically uses a NonZero winding mode
canvas.DrawPath(path);
이 예제에서는 경로가 두 번 그려집니다. 메서드 FillPath 는 경로를 파란색으로 채우는 데 DrawPath 사용되고 메서드는 빨간색 스트로크로 경로를 윤곽선으로 표시합니다. FillPath 사용된 오버로드는 인수를 WindingMode 생략하고 대신 자동으로 권선 모드를 NonZero
사용합니다. 이렇게 하면 경로의 모든 닫힌 영역이 채워집니다.
참고 항목
대부분의 경로에서 권선 모드는 NonZero
종종 경로의 모든 묶인 영역을 채웁니다.
Evenodd
권선 모드는 EvenOdd
어떤 방향으로든 지점에서 무한대로 가상의 광선을 그리고 광선이 교차하는 경로 윤곽의 수를 계산합니다. 이 숫자가 홀수이면 영역이 채워집니다. 그렇지 않으면 영역이 채워지지 않습니다.
다음 예제에서는 권선 모드를 사용하여 5개 뾰족한 별을 EvenOdd
채웁니다.
float radius = 0.45f * Math.Min(dirtyRect.Width, dirtyRect.Height);
PathF path = new PathF();
path.MoveTo(dirtyRect.Center.X, dirtyRect.Center.Y - radius);
for (int i = 1; i < 5; i++)
{
double angle = i * 4 * Math.PI / 5;
path.LineTo(new PointF(radius * (float)Math.Sin(angle) + dirtyRect.Center.X, -radius * (float)Math.Cos(angle) + dirtyRect.Center.Y));
}
path.Close();
canvas.StrokeSize = 15;
canvas.StrokeLineJoin = LineJoin.Round;
canvas.StrokeColor = Colors.Red;
canvas.FillColor = Colors.Blue;
canvas.FillPath(path, WindingMode.EvenOdd);
canvas.DrawPath(path);
이 예제에서는 경로가 두 번 그려집니다. 메서드 FillPath 는 경로를 파란색으로 채우는 데 DrawPath 사용되고 메서드는 빨간색 스트로크로 경로를 윤곽선으로 표시합니다. FillPath 사용된 오버로드는 권선 모드가 EvenOdd
사용되도록 지정합니다. 이 모드에서는 별의 중앙 영역이 채워지지 않습니다.
.NET MAUI