Sargı modları
.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 NonZero
EvenOdd
. 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.NonZero
ayarlanı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:
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:
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin