Использование классов графических данных

Flash Player 10 и более поздних версий, Adobe AIR 1.5 и более поздних версий

Расширенный API рисования включает набор классов в пакете flash.display, реализующих интерфейс IGraphicsData . Эти классы играют роль объектов-значений (контейнеров данных), представляющих собой методы API рисования.

Эти классы позволяют сохранять готовые рисунки в объекте Vector типа IGraphicsData (Vector.<IGraphicsData>). Графические данные затем можно повторно использовать в качестве исходных данных для других фигур или сохранить на будущее.

Обратите внимание, что имеется несколько классов заливки, представляющих собой разные стили, но класс штриха только один. В ActionScript предусмотрен только один класс штриха с интерфейсом IGraphicsData, поскольку для определения стиля класс штриха использует классы заливки. Поэтому каждый штрих на самом деле задается комбинацией класса штриха и класса заливки. Помимо этого, API-интерфейс для этих классов графических данных повторяет методы, представленные в классах flash.display.Graphics:

Метод класса Graphics

Соответствующий класс

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

Кроме того, класс GraphicsPath имеет собственные служебные методы GraphicsPath.moveTo() , GraphicsPath.lineTo() , GraphicsPath.curveTo() , GraphicsPath.wideLineTo() и GraphicsPath.wideMoveTo() , упрощающие определение этих команд для экземпляра GraphicsPath. Эти служебные методы упрощают непосредственное определение или обновление команд и значений данных.

Рисование на основе векторных графических данных

Создав набор экземпляров IGraphicsData, можно начинать визуализацию графики с помощью метода drawGraphicsData() класса Graphics. Метод drawGraphicsData() выполняет набор инструкций рисования из векторного массива экземпляров IGraphicsData в последовательном порядке:

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

Изменяя одно значение в контуре, используемом рисунком в примере, можно нарисовать фигуру несколько раз для получения более сложного изображения.

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

Хотя объекты IGraphicsData могут определять стили заливки и обводки, использование этих стилей не является обязательным. Другими словами, методы класса Graphics можно использовать для определения стилей, а объекты IGraphicsData — для рисования сохраненной коллекции контуров и наоборот.

Примечание. Метод Graphics.clear() используется для удаления предыдущего рисунка перед началом выполнения нового, если не предусмотрено дополнение к исходному рисунку, как показано в примере выше. При изменении одной части контура или коллекции объектов IGraphicsData, требуется нарисовать заново весь рисунок, чтобы увидеть изменения.

При использовании классов графических данных заливка визуализируется всегда, когда рисуется три или более точек, так как на этом этапе фигура по определению имеет закрытый контур. Несмотря на то, что заливка закрывается, обводка остается открытой, и такое поведение отличается от поведения при использовании нескольких команд Graphics.lineTo() и Graphics.moveTo() .

Чтение векторных графических данных

Помимо рисования объекта отображения на основе содержимого векторного массива, класс Graphics позволяет получать представление векторной графики любого объекта отображения при помощи метода readGraphicsData() (в среде Flash Player 11.6 или Adobe AIR 3.6 и более поздних версий). Это удобно для получения «мгновенного слепка» графического объекта, что позволяет сохранить, скопировать объект, создать лист спрайтов во время выполнения и многое другое.

Вызов метода readGraphicsData() возвращает экземпляр Vector, содержащий объекты типа IGraphicsData. Это те самые объекты, что использовались для рисования векторной графики при помощи метода drawGraphicsData() .

Имеется несколько ограничений на применение метода readGraphicsData() для чтения данных векторной графики. Дополнительные сведения см. в разделе readGraphicsData() справочника по языку ActionScript .