Korzystanie z klas danych graficznych

Flash Player 10 i nowsze wersje, Adobe AIR 1.5 i nowsze wersje

Ulepszony interfejs API rysowania zawiera zestaw klas umieszczonych w pakiecie flash.display, które implementują interfejs IGraphicsData . Te klasy służą jako obiekty wartości (kontenery danych) reprezentujące metody rysowania interfejsu API rysowania.

Za pomocą tych klasy można przechowywać całe rysunki w postaci tablic wektorowych typu IGraphicsData (Vector.<IGraphicsData>). Danych grafiki można używać ponownie jako źródeł danych dla kolejnych wystąpień kształtów. Mogą one również służyć do przechowywania informacji o rysunkach do użycia później.

Należy zwrócić uwagę, że dla każdego stylu wypełnienia istnieje wiele klas wypełnienia, ale klasa obrysu jest tylko jedna. W języku ActionScript istnieje tylko jedna klasa obrysu z interfejsem IGraphicsData, ponieważ do definiowania stylu obrysu używane są klasy wypełnienia. Każde pociągnięcie jest zdefiniowane jako połączenie wystąpień klas pociągnięcia i wypełnienia. Pomijając tę różnicę interfejs API tych klas graficznych wiernie odzwierciedla odpowiednie metody klasy flash.display.Graphics:

Metoda graficzna

Klasa powiązana

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

Ponadto klasa GraphicsPath ma własne metody pomocnicze GraphicsPath.moveTo() , GraphicsPath.lineTo() , GraphicsPath.curveTo() , GraphicsPath.wideLineTo() i GraphicsPath.wideMoveTo() , umożliwiające łatwe zdefiniowanie odpowiednich poleceń dla instancji GraphicsPath. Metody pomocnicze ułatwiają bezpośrednie definiowanie i aktualizowanie poleceń oraz wartości danych.

Rysowanie przy użyciu danych grafiki wektorowej

Po przygotowaniu kolekcji wystąpień klasy IGraphicsData można renderować grafikę za pomocą metody drawGraphicsData() klasy Graphics. Metoda drawGraphicsData() wykonuje kolejno zestaw instrukcji rysowania z wektora wystąpień klasy 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);

Modyfikując jedną wartość w ścieżce występującej w przykładowym rysunku, można wielokrotnie narysować kształt i stworzyć znacznie bardziej skomplikowany obraz:

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

Mimo że obiekty IGraphicsData mogą definiować style wypełnień i obrysów, nie jest to wymagane. Innymi słowy, do ustawiania stylów można używać metod klasy Graphics, a do rysowania zapisanego zbioru ścieżek — obiektów IGraphicsData, albo odwrotnie.

Uwaga: Przed rozpoczęciem nowego rysunku należy wywołać metodę Graphics.clear() w celu wymazania poprzedniego, chyba że dodajemy do niego nowe elementy, tak jak w powyższym przykładzie. Po zmodyfikowaniu jednej części ścieżki lub zbioru obiektów IGraphicsData konieczne jest ponowne narysowanie całego rysunku, aby zmiany stały się widoczne.

W przypadku użycia klas danych graficznych wypełnienie jest renderowane za każdym razem, gdy rysowane są co najmniej trzy punkty, ponieważ oznacza to zamknięcie kształtu. Zamknięcie wypełnienia nie oznacza automatycznie zamknięcia kształtu; odróżnia to działanie omawianego mechanizmu od działania sekwencji osobno wywołanych poleceń Graphics.lineTo() lub Graphics.moveTo() .

Odczytywanie danych grafiki wektorowej

Oprócz rysowania zawartości wektorowej w obiekcie ekranowym program Flash Player 11.6 i środowisko Adobe AIR 3.6 lub nowsze pozwalają za pomocą metody readGraphicsData() klasy Graphics uzyskać reprezentację danych zawartości grafiki wektorowej obiektu ekranowego. Można w ten sposób wykonać migawkę grafiki w celu jej zapisania lub skopiowania, utworzenia arkusza kształtów albo wykonania innych działań.

Wywołanie metody readGraphicsData() zwraca wystąpienie klasy Vector wypełnione obiektami IGraphicsData. Są to te same obiekty, których użyto do narysowania grafiki wektorowej za pomocą metody drawGraphicsData() .

Odczytywanie grafiki wektorowej za pomocą metody readGraphicsData() podlega szeregowi ograniczeń. Więcej informacji można znaleźć w opisie metody readGraphicsData() w dokumentacji języka ActionScript .