Trazados
Los trazados se forman mediante la combinación de líneas, rectángulos y curvas simples. Recuerde que, tal y como se muestra en Información general acerca de gráficos vectoriales, las siguientes unidades de creación han resultado ser las más útiles para dibujar imágenes:
- Líneas
- Rectángulos
- Elipses
- Arcos
- Polígonos
- Curvas spline cardinales
- Curvas spline de Bézier
En GDI+, el objeto GraphicsPath permite recopilar una secuencia de estas unidades de creación en una única unidad. La secuencia completa de líneas, rectángulos, polígonos y curvas puede dibujarse pues con una llamada al método DrawPath de la clase Graphics En la siguiente ilustración 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.
La clase GraphicsPath proporciona los siguientes métodos para la creación de 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 distintas. 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 que existen para agregar líneas, rectángulos y curvas spline de Bézier a un trazado disponen de varios métodos asociados que agregan diversos elementos al trazado en una única llamada: AddLines, AddRectangles y AddBeziers. Además, los métodos AddCurve y AddArc disponen de métodos asociados, AddClosedCurve y AddPie, que agregan una curva cerrada o un sector al trazado.
Para dibujar un trazado, son necesarios un objeto Graphics, un objeto Pen y un objeto GraphicsPath. El objeto Graphics proporciona el método DrawPath, y el objeto Pen almacena atributos como el ancho y el color de la línea que se utiliza para representar el trazado. El objeto GraphicsPath almacena la secuencia de líneas y curvas que componen el trazado. El objeto Pen y el objeto GraphicsPath se pasan como argumentos del método DrawPath. En el siguiente ejemplo se dibuja un trazado que consta de una línea, una elipse y una curva spline de 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)
[C#]
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.
Además de agregar líneas, rectángulos y curvas a un trazado, se pueden agregar trazados a un trazado. Esto permite combinar los trazados existentes para formar trazados enormes y complejos.
myGraphicsPath.AddPath(graphicsPath1, False)
myGraphicsPath.AddPath(graphicsPath2, False)
[C#]
myGraphicsPath.AddPath(graphicsPath1, false);
myGraphicsPath.AddPath(graphicsPath2, false);
Existen otros dos elementos que se pueden agregar a un trazado: cadenas y sectores. Un sector es una parte del interior de una elipse. En el siguiente ejemplo se crea un trazado a partir de un arco, un curva spline cardinal, una cadena y un sector:
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)
[C#]
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);
En la siguiente ilustración se muestra el trazado. Tenga en cuenta que un trazado no tiene por qué estar conectado; el arco, la curva spline cardinal, la cadena y el sector están separados.