Trazados de gráficos en GDI+

Los trazados se forman combinando líneas, rectángulos y curvas simples. Recuerde de la Información general acerca de gráficos vectoriales que los siguientes bloques de creación básicos han demostrado ser los más útiles para dibujar imágenes:

  • Líneas

  • Rectángulos

  • Puntos suspensivos

  • Arcos

  • Polígonos

  • Curvas spline cardinales

  • Curvas spline de Bézier

En GDI+, el objeto GraphicsPath permite recopilar una secuencia de estos bloques de creación en una sola unidad. Toda la secuencia de líneas, rectángulos, polígonos y curvas se puede dibujar con una llamada al método DrawPath de la clase Graphics. En la ilustración siguiente se muestra un trazado creado mediante la combinación de una línea, un arco, una curva spline de Bézier y una curva spline cardinal.

Imagen de un trazado de una sola línea, empezando por una línea recta y continuando en diferentes formas.

Uso de un trazado

La clase GraphicsPath proporciona los métodos siguientes para crear una secuencia de elementos que se van a dibujar: AddLine, AddRectangle, AddEllipse, AddArc, AddPolygon, AddCurve (para curvas spline cardinales) y AddBezier. Cada uno de estos métodos está sobrecargado; es decir, cada método admite varias listas de parámetros diferentes. Por ejemplo, una variación del método AddLine recibe cuatro enteros y otra variación del método AddLine recibe dos objetos Point.

Los métodos para agregar líneas, rectángulos y curvas spline de Bézier a un trazado tienen métodos complementarios plurales que agregan varios elementos al trazado en una sola llamada: AddLines, AddRectangles y AddBeziers. Además, los métodos AddCurve y AddArc tienen métodos complementarios, AddClosedCurve y AddPie, que agregan una curva cerrada o circular al trazado.

Para dibujar un trazado, necesita un objeto Graphics, un objeto Pen y un objeto GraphicsPath. El objeto Graphics proporciona el método DrawPath y el objeto Pen almacena los atributos (como el ancho y el color) de la línea utilizada para representar el trazado. El objeto GraphicsPathalmacena la secuencia de líneas y curvas que componen el trazado. El objeto Pen y el objeto GraphicsPath se pasan como argumentos al método DrawPath. En el ejemplo siguiente se dibuja un trazado que consta de una línea, una elipse y una curva spline Bézier:

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)

En la siguiente ilustración se muestra el trazado.

Imagen de un trazado mostrado dentro de un grafo.

Además de agregar líneas, rectángulos y curvas a un trazado, le puede agregar trazados. Esto le permite combinar trazados existentes para formar trazados grandes y complejos.

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

Hay otros dos elementos que puede agregar a un trazado: cadenas y gráficos circulares. Un gráfico circular es una parte del interior de una elipse. En el ejemplo siguiente se crea un trazado a partir de un arco, una curva spline cardinal, una cadena y un gráfico circular:

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)

En la siguiente ilustración se muestra el trazado. Tenga en cuenta que un trazado no tiene que estar conectado; el arco, la curva spline cardinal, la cadena y el gráfico circular están separados.

Trazados

Consulte también