Curvas abiertas y cerradas en GDI+

En la ilustración siguiente se muestran dos curvas: una abierta y otra cerrada.

Captura de pantalla de una curva abierta y una curva cerrada.

Interfaz administrada para curvas

Las curvas cerradas tienen un interior y, por lo tanto, se pueden rellenar con un pincel. La clase Graphics de GDI+ proporciona los métodos siguientes para rellenar formas y curvas cerradas: FillRectangle, FillEllipse, FillPie, FillPolygon, FillClosedCurve, FillPath y FillRegion. Cada vez que llame a uno de estos métodos, debe pasar uno de los tipos de pincel específicos (SolidBrush, HatchBrush, TextureBrush, LinearGradientBrush o PathGradientBrush) como argumento.

El método FillPie es un complemento del método DrawArc. Mientras que el método DrawArc dibuja una parte del contorno de una elipse, el método FillPie rellena una parte del interior de una elipse. En el ejemplo siguiente se dibuja un arco y se rellena la parte correspondiente del interior de la elipse:

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)

En la ilustración siguiente se muestran el arco y el sector de círculo rellenado.

Captura de pantalla de un arco y el gráfico circular rellenado.

El método FillClosedCurve es un complemento del método DrawClosedCurve. Ambos métodos cierran automáticamente la curva al conectar el punto final con el inicial. En el ejemplo siguiente se dibuja una curva que pasa por (0, 0), (60, 20) y (40, 50). Después, la curva se cierra automáticamente al conectar (40, 50) con el punto inicial (0, 0) y el interior se rellena con un color sólido.

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

El método FillPath rellena el interior de cada fragmento de un trazado. Si un fragmento de un trazado no genera una curva o forma cerrada, el método FillPath cierra automáticamente ese fragmento del trazado antes de rellenarlo. En el ejemplo siguiente se dibuja y se rellena un trazado que consta de un arco, una curva spline cardinal, una cadena y un sector de círculo:

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

En la ilustración siguiente se muestra el trazado con y sin relleno sólido. Tenga en cuenta que el método DrawPath aplica un contorno al texto de la cadena, pero no lo rellena. Es el método FillPath el que pinta el interior de los caracteres de la cadena.

Cadena en un trazado

Consulte también