Condividi tramite


Curve aperte e chiuse in GDI+

Aggiornamento: novembre 2007

Nell'immagine seguente vengono mostrate due curve, una aperta e una chiusa.

Curve aperte e chiuse

Interfaccia gestita per le curve

Le curve chiuse dispongono di una zona interna ed è quindi possibile riempirle con un pennello. La classe Graphics in GDI+ fornisce i seguenti metodi per il riempimento di forme e curve chiuse: FillRectangle, FillEllipse, FillPie, FillPolygon, FillClosedCurve, FillPath e FillRegion. Ogni volta che si chiama uno di questi metodi, è necessario passare il tipo di pennello specifico (SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush o PathGradientBrush) come argomento.

Il metodo FillPie è correlato al metodo DrawArc. Analogamente al metodo DrawArc, che consente di tracciare una porzione del contorno di un'ellisse, il metodo FillPie riempie una porzione dell'interno di un'ellisse. L'esempio seguente consente di tracciare un arco e di riempire la porzione corrispondente dell'interno di un'ellisse.

myGraphics.FillPie(mySolidBrush, 0, 0, 140, 70, 0, 120)
myGraphics.DrawArc(myPen, 0, 0, 140, 70, 0, 120)

myGraphics.FillPie(mySolidBrush, 0, 0, 140, 70, 0, 120);
myGraphics.DrawArc(myPen, 0, 0, 140, 70, 0, 120);

Nell'immagine seguente vengono mostrati l'arco e l'ellisse riempita.

Curve aperte e chiuse

Il metodo FillClosedCurve è correlato al metodo DrawClosedCurve. Entrambi i metodi consentono di chiudere automaticamente la curva collegandone il punto finale e il punto iniziale. L'esempio seguente consente di tracciare una curva che attraversa (0, 0), (60, 20) e (40, 50). La curva viene quindi chiusa automaticamente collegando (40, 50) al punto iniziale (0, 0) e l'interno viene riempito con un colore a tinta unita.

Dim myPointArray As Point() = _
   {New Point(0, 0), New Point(60, 20), New Point(40, 50)}
myGraphics.DrawClosedCurve(myPen, myPointArray)
myGraphics.FillClosedCurve(mySolidBrush, myPointArray)

     Point[] myPointArray =
{ new Point(0, 0), new Point(60, 20), new Point(40, 50) };
     myGraphics.DrawClosedCurve(myPen, myPointArray);
     myGraphics.FillClosedCurve(mySolidBrush, myPointArray);

Il metodo FillPath consente di riempire l'interno di pezzi separati di un percorso. Se un pezzo di percorso non costituisce una curva o una forma chiusa, il metodo FillPath chiude automaticamente tale pezzo del percorso prima di riempirlo. L'esempio seguente consente di tracciare e riempire un percorso costituito da un arco, una spline di tipo Cardinal, una stringa e una torta:

Dim mySolidBrush As New SolidBrush(Color.Aqua)
Dim myGraphicsPath As New GraphicsPath()

Dim myPointArray As Point() = { _
   New Point(15, 20), _
   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.AddCurve(myPointArray)
myGraphicsPath.AddString("a string in a path", myFontFamily, _
   0, 24, myPointF, myStringFormat)
myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110)

myGraphics.FillPath(mySolidBrush, myGraphicsPath)
myGraphics.DrawPath(myPen, myGraphicsPath)

     SolidBrush mySolidBrush = new SolidBrush(Color.Aqua);
     GraphicsPath myGraphicsPath = new GraphicsPath();

     Point[] myPointArray = {
new Point(15, 20), 
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.AddCurve(myPointArray);
     myGraphicsPath.AddString("a string in a path", myFontFamily,
        0, 24, myPointF, myStringFormat);
     myGraphicsPath.AddPie(230, 10, 40, 40, 40, 110);

     myGraphics.FillPath(mySolidBrush, myGraphicsPath);
     myGraphics.DrawPath(myPen, myGraphicsPath);

Nell'immagine seguente viene mostrato i percorso con e senza il riempimento a tinta unita. Si noti che tramite il metodo DrawPath sono stati tracciati i contorni del testo della stringa senza riempimento. Per riempire l'interno dei caratteri della stringa, è necessario utilizzare il metodo FillPath.

Stringa in un percorso

Vedere anche

Attività

Procedura: creare oggetti Graphics per disegnare

Riferimenti

System.Drawing.Drawing2D.GraphicsPath

System.Drawing.Pen

System.Drawing.Point

Altre risorse

Linee, curve e forme

Costruzione e creazione di percorsi