Grafiksökvägar i GDI+

Sökvägar bildas genom att kombinera linjer, rektanglar och enkla kurvor. Kom ihåg från Vector Graphics Overview att följande grundläggande byggstenar har visat sig vara de mest användbara för att rita bilder:

  • Linjer

  • Rektanglar

  • Ellipser

  • Bågar

  • Polygoner

  • Kardinalsplines

  • Béziersplines

I GDI+ kan du med GraphicsPath-objektet samla in en sekvens av dessa byggstenar i en enda enhet. Hela sekvensen med linjer, rektanglar, polygoner och kurvor kan sedan ritas med ett anrop till DrawPath-metoden för klassen Graphics. Följande bild visar en sökväg som skapats genom att kombinera en linje, en båge, en Bézier-spline och en kardinal spline.

Bild av en enkelradsbana som börjar från en rät linje och fortsätter till olika former.

Använda en sökväg

Klassen GraphicsPath innehåller följande metoder för att skapa en sekvens med objekt som ska ritas: AddLine, AddRectangle, AddEllipse, AddArc, AddPolygon, AddCurve (för kardinalstreck) och AddBezier. Var och en av dessa metoder är överbelastad. Varje metod har alltså stöd för flera olika parameterlistor. En variant av metoden AddLine tar till exempel emot fyra heltal och en annan variant av metoden AddLine tar emot två Point objekt.

Metoderna för att lägga till linjer, rektanglar och Bézier-splines i en sökväg har plural-tilläggsmetoder som lägger till flera objekt i sökvägen i ett enda anrop: AddLines, AddRectanglesoch AddBeziers. Metoderna AddCurve och AddArc har också kompletterande metoder, AddClosedCurve och AddPie, som lägger till en sluten kurva eller cirkel i sökvägen.

Om du vill rita en sökväg behöver du ett Graphics objekt, ett Pen-objekt och ett GraphicsPath objekt. Graphics-objektet innehåller metoden DrawPath och Pen-objektet lagrar attribut, till exempel bredd och färg, för den linje som används för att återge sökvägen. Det GraphicsPath objektet lagrar sekvensen med linjer och kurvor som utgör sökvägen. Objektet Pen och GraphicsPath skickas som argument till metoden DrawPath. I följande exempel ritas en sökväg som består av en linje, en ellips och en Bézier-spline:

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

Följande bild visar sökvägen.

Bild av en sökväg som visas i ett diagram.

Förutom att lägga till linjer, rektanglar och kurvor i en sökväg kan du lägga till sökvägar i en sökväg. På så sätt kan du kombinera befintliga sökvägar för att bilda stora, komplexa sökvägar.

myGraphicsPath.AddPath(graphicsPath1, false);
myGraphicsPath.AddPath(graphicsPath2, false);
myGraphicsPath.AddPath(graphicsPath1, False)
myGraphicsPath.AddPath(graphicsPath2, False)

Det finns två andra objekt som du kan lägga till i en sökväg: strängar och pajer. En paj är en del av insidan av en ellips. I följande exempel skapas en sökväg från en båge, en kardinal spline, en sträng och en cirkel:

GraphicsPath myGraphicsPath = new GraphicsPath();

Point[] myPointArray =
{
    new Point(5, 30),
    new Point(20, 40),
    new Point(50, 30)
};

FontFamily myFontFamily = new FontFamily("Times New Roman");
PointF myPointF = new PointF(50, 20);
StringFormat myStringFormat = new StringFormat();

myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180);
myGraphicsPath.StartFigure();
myGraphicsPath.AddCurve(myPointArray);
myGraphicsPath.AddString("a string in a path", myFontFamily,
   0, 24, myPointF, myStringFormat);
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110);
myGraphics.DrawPath(myPen, myGraphicsPath);
Dim myGraphicsPath As New GraphicsPath()

Dim myPointArray As Point() = { _
   New Point(5, 30), _
   New Point(20, 40), _
   New Point(50, 30)}

Dim myFontFamily As New FontFamily("Times New Roman")
Dim myPointF As New PointF(50, 20)
Dim myStringFormat As New StringFormat()

myGraphicsPath.AddArc(0, 0, 30, 20, -90, 180)
myGraphicsPath.StartFigure()
myGraphicsPath.AddCurve(myPointArray)
myGraphicsPath.AddString("a string in a path", myFontFamily, _
   0, 24, myPointF, myStringFormat)
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110)
myGraphics.DrawPath(myPen, myGraphicsPath)

Följande bild visar sökvägen. Observera att en sökväg inte behöver vara ansluten. bågen, kardinalens spline, sträng och cirkel avgränsas.

sökvägar

Se även