Share via


Sargı modları

Browse sample. Örneğe göz atın

.NET Çok Platformlu Uygulama Kullanıcı Arabirimi (.NET MAUI) grafikleri, yöntemi tarafından FillPath kullanılacak doldurma algoritmasını belirtmenizi sağlayan bir WindingMode numaralandırma sağlar. Yoldaki konturlar çakışabilir ve kapalı alanlardan herhangi biri doldurulabilir, ancak tüm kapalı alanları doldurmak istemeyebilirsiniz. Yollar hakkında daha fazla bilgi için bkz . Yol çizme.

Numaralandırma WindingMode ve üyelerini tanımlar NonZeroEvenOdd . Her üye, bir noktanın kapalı bir alanın dolgu bölgesinde olup olmadığını belirlemek için farklı bir algoritmayı temsil eder.

Dekont

yöntemi, ClipPath bir bağımsız değişkenin belirtilmesine olanak tanıyan bir WindingMode aşırı yüklemeye sahiptir. Varsayılan olarak, bu bağımsız değişken olarak WindingMode.NonZeroayarlanır.

Sıfır

Sargı NonZero modu, herhangi bir yönde noktadan sonsuzluğa varsayımsal bir ışın çizer ve ardından bir yol konturunun ışını geçtiği yerleri inceler. Sayı sıfırdan başlar ve bir kontur, ışını soldan sağa doğru her geçtiğinde artırılır ve bir kontur, ışını sağdan sola her geçtiğinde azalmaktadır. Geçiş sayısı sıfırsa, alan doldurulmuyordur. Aksi takdirde, alan doldurulur.

Aşağıdaki örnek, sargı modunu kullanarak NonZero beş noktalı bir yıldızı doldurur:

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);

Bu örnekte, yol iki kez çizilir. FillPath yöntemi yolu maviyle doldurmak için kullanılırkenDrawPath, yöntem yolu kırmızı bir vuruşla özetler. Kullanılan FillPath aşırı yükleme bağımsız değişkeni atlar WindingMode ve bunun yerine otomatik olarak sargı modunu kullanır NonZero . Bu, yolun tüm kapalı alanlarının doldurulmasıyla sonuçlanır:

Screenshot of a five-pointed star, using the non-zero winding mode.

Dekont

Birçok yol için sargı NonZero modu genellikle bir yolun tüm kapalı alanlarını doldurur.

Evenodd

Sargı EvenOdd modu, herhangi bir yönde noktadan sonsuzluğa varsayımsal bir ışın çizer ve ışının kesiştiği yol konturlarının sayısını sayar. Bu sayı tekse, alan doldurulur. Aksi takdirde, alan doldurulamaz.

Aşağıdaki örnek, sargı modunu kullanarak EvenOdd beş noktalı bir yıldızı doldurur:

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);

Bu örnekte, yol iki kez çizilir. FillPath yöntemi yolu maviyle doldurmak için kullanılırkenDrawPath, yöntem yolu kırmızı bir vuruşla özetler. Kullanılan FillPath aşırı yükleme sargı modunun EvenOdd kullanıldığını belirtir. Bu mod, yıldızın merkezi alanının doldurulmamasıyla sonuçlanır:

Screenshot of a five-pointed star, using the even-odd winding mode.