Uso de classes de dados gráficos

Flash Player 10 e posterior, Adobe AIR 1.5 e posterior

A API de desenho aprimorada inclui algumas classes no pacote flash.display que implementam a interface IGraphicsData . Essas classes funcionam como objetos de valor (contêineres de dados) que representam os métodos de desenho da API de desenho.

Com elas, é possível armazenar desenhos completos em um objeto Vector do tipo IGraphicsData (Vector.<IGraphicsData>). Você poderá, em seguida, reutilizar os dados de gráficos como a fonte de dados para outras instâncias de forma ou para armazenar informações de desenho para uso posterior.

Observe que existem várias classes de preenchimento para cada estilo de preenchimento, mas somente uma classe de traçado. O ActionScript tem apenas uma classe de traçado IGraphicsData, pois a classe de traçado usa as classes de preenchimento para definir seu estilo. Desta forma, todo traçado é, na verdade, definido por uma combinação da classe de traçado e de uma classe de preenchimento. Do contrário, a API dessas classes de dados gráficos espelha os métodos que elas representam na classe flash.display.Graphics:

Método de Graphics

Classe correspondente

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

Além disso, a classe GraphicsPath tem seus próprios métodos de utilitário GraphicsPath.moveTo() , GraphicsPath.lineTo() , GraphicsPath.curveTo() , GraphicsPath.wideLineTo() e GraphicsPath.wideMoveTo() que facilitam a definição desses comandos para uma instância de GraphicsPath. Esses métodos utilitários facilitam a tarefa de definir ou atualizar diretamente os comandos e valores de dados.

Desenhar com os dados dos gráficos vetoriais

Uma vez que você tenha uma coleção de instâncias de IGraphicsData, use o método drawGraphicsData() da classe Graphics para renderizar os gráficos. O método drawGraphicsData() executa algumas instruções de desenho de um vetor de instâncias de IGraphicsData em ordem sequencial:

// 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);

Modificando-se um valor no caminho usado pelo desenho do exemplo, é possível redesenhar a forma várias vezes para uma imagem mais complexa:

// 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);

Embora objetos IGraphicsData possam definir estilos de preenchimento e de traçado, esses estilos não são obrigatórios. Em outras palavras, os métodos da classe Graphics podem ser usados para definir estilos, enquanto os objetos IGraphicsData podem ser usados para desenhar uma coleção de caminhos salvos ou vice-versa.

Nota: Use o método Graphics.clear() para remover um desenho anterior antes de começar um novo, a menos que você esteja aumentando o desenho original, como visto no exemplo acima. Quando alterar uma única parte de um caminho ou de uma coleção de objetos IGraphicsData, redesenhe o desenho inteiro para ver as alterações.

Quando são usadas classes de dados gráficos, o preenchimento é renderizado sempre que três ou mais pontos são desenhados porque a forma é inerentemente fechada nesse ponto. Embora o preenchimento seja fechado, o traçado não é, e esse comportamento é diferente de quando são usados vários comandos Graphics.lineTo() ou Graphics.moveTo() .

Leitura dos dados dos gráficos vetoriais

Além de desenhar o conteúdo do vetor para o objeto de exibição, no Flash Player 11.6 e Adobe AIR 3.6 e posterior, você pode utilizar o método readGraphicsData( ) da classe Graphics para obter uma representação de dados do conteúdo dos gráficos vetoriais de um objeto de exibição. Este método pode ser usado para gerar um instantâneo de um gráfico para salvar, copiar, criar uma planilha de entidades gráficas em runtime, entre outros.

Chamar o método readGraphicsData() retorna uma instância de Vector contendo objetos de IGraphicsData. Eles são os mesmos objetos utilizados para desenhar gráficos vetoriais com o método drawGraphicsData() .

Há várias limitações para a leitura de gráficos vetoriais com o método readGraphicsData() . Para obter mais informações, consulte a entrada readGraphicsData() na Referência de linguagem do ActionScript .