Uso de clases de datos gráficos

Flash Player 10 y posterior, Adobe AIR 1.5 y posterior

La API de dibujo mejorada incluye varias clases en el paquete flash.display que implementan la interfaz IGraphicsData . Estas clases actúan como objetos de valor (contenedores de datos) que representan los métodos de dibujo de la API de dibujo.

Con estas clases, puede almacenar dibujos completos en un objeto Vector de tipo IGraphicsData (Vector.<IGraphicsData>). Así podrá reutilizar los datos de gráficos como origen de datos para otras instancias de forma, o para almacenar información de dibujo que utilizar posteriormente.

Se debe tener en cuenta que se dispone de varias clases de relleno para cada estilo de relleno, pero solo 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. Cada trazo se define mediante una combinación de 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 correspondiente

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 simplifican las tareas de definición o actualización de los comandos y valores de datos directamente.

Dibujo con datos de gráficos vectoriales

Cuando tenga una colección de instancias de IGraphicsData, utilice el método drawGraphicsData() para representar los gráficos. El método drawGraphicsData() contiene una serie de instrucciones de dibujo de un vector de instancias IGraphicsData 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(GraphicsPathCommand.MOVE_TO, GraphicsPathCommand.LINE_TO, GraphicsPathCommand.LINE_TO); 
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, estos 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() .

Lectura de datos de gráficos vectoriales

Además de dibujar contenido vectorial en un objeto de visualización, en Flash Player 11.6 y Adobe AIR 3.6 y versiones posteriores se puede utilizar el método de clase Graphics readGraphicsData( ) para obtener una representación de datos del contenido de gráficos vectoriales de un objeto de visualización. Esto puede servir para crear una instantánea de un gráfico para guardar, copiar o crear una hoja de Sprite en tiempo de ejecución, entre otras cosas.

Al llamar al método readGraphicsData() se obtiene una instancia Vector que contiene objetos IGraphicsData. Estos mismos objetos se usan para dibujar gráficos vectoriales con el método drawGraphicsData() .

La lectura de gráficos vectoriales mediante el método readGraphicsData() tiene varias limitaciones. Para obtener más información, consulte la información sobre readGraphicsData() en Referencia del lenguaje ActionScript .