Uso delle classi di dati grafiche

Flash Player 10 e versioni successive, Adobe AIR 1.5 e versioni successive

L'API di disegno migliorata include un set di classi nel pacchetto flash.display per l'implementazione dell'interfaccia IGraphicsData . Tali classi si comportano come oggetti valore (contenitori di dati) che rappresentano i metodi di disegno dell'API di disegno.

Mediante queste classi, potete archiviare un disegno completo in un oggetto Vector di tipo IGraphicsData (Vector.<IGraphicsData>). Potete riutilizzare i dati di grafica come origine dati per altre istanze Shape o per archiviare informazioni di disegno per un utilizzo successivo.

Notate che per ogni stile di riempimento sono disponibili più classi di riempimento, ma una sola classe stroke. ActionScript dispone di una sola classe IGraphicsData di tratto poiché la classe stroke utilizza le classi di riempimento per definire il suo stile. Quindi, ogni tratto è attualmente definito da una combinazione della classe stroke e della classe fill. In caso contrario, l'API per queste classi di dati grafiche riflettono i metodi che rappresentano nella classe flash.display.Graphics:

Metodo Graphics

Classe corrispondente

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

Inoltre, la classe GraphicsPath dispone di propri metodi di utilità GraphicsPath.moveTo() , GraphicsPath.lineTo() , GraphicsPath.curveTo() , GraphicsPath.wideLineTo() e GraphicsPath.wideMoveTo() per definire in modo semplice questi comandi per un'istanza GraphicsPath. Questi metodi di utilità semplificano direttamente l'attività di definizione o aggiornamento dei valori dei dati e dei comandi.

Disegno con dati grafica vettoriale

Dopo aver ottenuto una raccolta di istanze IGraphicsData, utilizzate il metodo drawGraphicsData() della classe Graphics per eseguire il rendering della grafica. Il metodo drawGraphicsData() esegue un set di istruzioni di disegno da un vettore di istanze IGraphicsData in ordine sequenziale:

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

La modifica di un unico valore nel tracciato usato dal disegno nell'esempio consente di ridisegnare la forma più volte per un'immagine più complessa:

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

Gli stili di riempimento e di tratto, sebbene definibili tramite gli oggetti IGraphicsData, non sono un requisito. In altre parole, potete usare i metodi della classe Graphics per impostare gli stili e gli oggetti IGraphicsData per disegnare una raccolta salvata di tracciati, o viceversa.

Nota: per cancellare un disegno precedente prima di iniziarne uno nuovo, usate il metodo Graphics.clear() , a meno che il disegno non venga aggiunto a quello originale, come illustrato nell'esempio precedente. Mentre modificate una singola parte di un tracciato o di una raccolta di oggetti IGraphicsData, ridisegnate l'intero disegno per vedere i cambiamenti.

Se si utilizzano classi di dati grafiche, il rendering del riempimento viene eseguito ogni volta che si disegnano tre o più punti, poiché la forma è intrinsecamente chiusa in quel punto. A differenza del riempimento, il tratto non si chiude e questo comportamento è diverso da quello che si ottiene quando si utilizzano più comandi Graphics.lineTo() o Graphics.moveTo() .

Lettura di dati grafica vettoriale

Oltre al contenuto vettoriale di disegno in un oggetto di visualizzazione, in Flash Player 11.6 e Adobe AIR 3.6 e versioni successive, potete utilizzare il metodo readGraphicsData( ) della classe Graphics per ottenere una rappresentazione di dati di grafica vettoriale di un oggetto di visualizzazione. Questo può essere utilizzato per creare un'istantanea di una grafica al fine di salvare, copiare e creare un foglio sprite in fase di runtime e molto altro.

La chiamata al metodo readGraphicsData() restituisce un'istanza Vector contenente oggetti IGraphicsData. Si tratta degli stessi oggetti utilizzati per disegnare una grafica vettoriale con il metodo drawGraphicsData() .

Sono presenti numerose limitazioni alla lettura di grafiche vettoriali con il metodo readGraphicsData() . Per maggiori informazioni, consultate la voce readGraphicsData() nella Guida di riferimento del linguaggio ActionScript .