Uso de clases de datos gráficosFlash 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. Las siguientes clases implementan la interfaz IGraphicsData:
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:
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(). |
|