Uso de clases de datos gráficos

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

La API de dibujo mejorada incorpora una colección de clases en el paquete flash.display de tipo IGraphicsData (una interfaz que implementan todas las clases). las clases que implementan la interfaz IGraphicsData sirven como contenedores de datos para los métodos de la API de dibujo.

Con estas clases, puede almacenar dibujos completos en un conjunto de objetos vectoriales de tipo IGraphicsData (Vector.<IGraphicsData>) que se puede reutilizar como el origen de datos para otras instancias de forma o para almacenar información de dibujo para su uso posterior.

Se debe tener en cuenta que se dispone de varias clases de relleno para cada estilo de relleno, pero sólo de una clase de trazo. ActionScript dispone únicamente de la clase de trazo IGraphicsData, ya que esta clase utiliza las clases de relleno para definir su estilo. Por lo tanto, cada trazo es realmente la clase de trazo y una clase de relleno. De lo contrario, la API para estas clases de datos gráficos reflejan los métodos que representan en la clase flash.display.Graphics:

Método Graphics

Clase de datos

beginBitmapFill()

GraphicsBitmapFill

beginFill()

GraphicsSolidFill

beginGradientFill()

GraphicsGradientFill

beginShaderFill()

GraphicsShaderFill

lineBitmapStyle()

GraphicsStroke + GraphicsBitmapFill

lineGradientStyle()

GraphicsStroke + GraphicsGradientFill

lineShaderStyle()

GraphicsStroke + GraphicsShaderFill

lineStyle()

GraphicsStroke + GraphicsSolidFill

moveTo()

lineTo()

curveTo()

drawPath()

GraphicsPath

drawTriangles()

GraphicsTrianglePath

Asimismo, la clase GraphicsPath tiene sus propios métodos de utilidad GraphicsPath.moveTo(), GraphicsPath.lineTo(), GraphicsPath.curveTo(), GraphicsPath.wideLineTo() y GraphicsPath.wideMoveTo() para definir fácilmente los comandos para una instancia de GraphicsPath. Estos métodos de utilidad facilitan la definición o actualización de los comandos y valores de datos directamente.

Una vez que se dispone de una colección de instancias de IGraphicsData, utilice Graphics.drawGraphicsData() para representar los gráficos. El método Graphics.drawGraphicsData() ejecuta un vector de las instancias de IGraphicsData mediante la API de dibujo en orden secuencial:

// stroke object 
var stroke:GraphicsStroke = new GraphicsStroke(3); 
stroke.joints = JointStyle.MITER; 
stroke.fill = new GraphicsSolidFill(0x102020);// solid stroke 
 
// fill object 
var fill:GraphicsGradientFill = new GraphicsGradientFill(); 
fill.colors = [0x0000FF, 0xEEFFEE]; 
fill.matrix = new Matrix(); 
fill.matrix.createGradientBox(70,70, Math.PI/2); 
// path object 
var path:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>()); 
path.commands.push(1,2,2); 
path.data.push(125,0, 50,100, 175,0); 
 
// combine objects for complete drawing 
var drawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); 
drawing.push(stroke, fill, path); 
 
// draw the drawing 
graphics.drawGraphicsData(drawing);

Con la modificación de un valor en el trazado utilizado por el dibujo en el ejemplo, la forma se puede volver a dibujar varias veces para una imagen más compleja:

// draw the drawing multiple times 
// change one value to modify each variation 
graphics.drawGraphicsData(drawing); 
path.data[2] += 200; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 150; 
graphics.drawGraphicsData(drawing); 
path.data[2] += 100; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 50;graphicsS.drawGraphicsData(drawing);

Aunque los objetos IGraphicsData pueden definir estilos de trazo y de relleno, éstos no constituyen un requisito. Es decir, los métodos de la clase Graphics se pueden utilizar para definir estilos, mientras que los objetos IGraphicsData se pueden emplear para dibujar una colección de trazados guardados, o viceversa.

Nota: utilice el método Graphics.clear() para borrar un dibujo anterior antes de comenzar uno nuevo, a no ser que se trate de una adición al dibujo original, tal y como se muestra en el ejemplo anterior. Conforme cambia una sola parte de un trazado o colección de objetos IGraphicsData, vuelva a dibujar todo el dibujo para ver los cambios.

Cuando se utilizan clases de datos gráficos, el relleno se representa siempre que se dibujan tres o más puntos, ya que la figura se encuentra cerrada en este punto. Aunque se cierre el relleno, el trazo no lo hace y este comportamiento es diferente al uso de varios comandos Graphics.lineTo() o Graphics.moveTo().