Tutorials

Andorra 2D Tutorials
Canvas

Einleitung
In diesem Tutorial behandle ich den Andorra 2D Canvas, welchen es ab Version 0.2 gibt (oder schon jetzt im CVS Archiv). Dabei handelt es sich um ein Objekt, auf das man ähnlich wie bei der Windows GDI Grafiken zeichenen kann. Zur Zeit können mit dem Andorra 2D Canvas die folgenden Objekte gezeichnet werden:

  • Text
  • Linien
  • Pfeile
  • Rechtecke
  • Beliebige Vierecke
  • Kreise/Ellipsen


Dies hört sich nicht sehr spektakulär an, allerdings muss man beachten das die meisten Objekte mit Farbverlauf, sowie texturiert gezeichnet werden können.

Verwendung
Das TAdDraw Objekt beinhaltet (so wie jedes Andorra 2D Surface, das von TAdRenderingSurface abgeleitet ist, also auch TAdTextureSurface) ein eigenes "Canvas" Objekt, auf welches man einfach zugreifen kann. Um auf Canvas-Spezifische Typen zugreifen zu können, sollte noch die Unit "AdCanvas" eingebunden werden.

Delphi-Code:
AdDraw1.BeginScene;
AdDraw1.ClearSurface(clBlack);

with AdDraw1.Canvas do
begin
  //Hier landet der Canvas-Code
  Release; //<-- Lässt man diese Zeile weg, wird nichts gezeichnet
end;

AdDraw1.EndScene;
AdDraw1.Flip;

Das Canvas verwaltet intern so genannte "Displaylisten". In diesen werden die Canvas-Objekte gesammelt. Mit dem aufruf von "Release" wird die Liste gezeichnet und eine neue erstellt.

Die Farbpalette
Am Rande sei auf die Unit "AdConsts.pas" hingewiesen. Diese enthält alle vom W3C definierten SVG-Farbkonstanten. Siehe: http://www.w3.org/TR/css3-color/#svg-color. Diese Farben können nach sehr einfach verwendet werden.

Stifte und Pinsel
Wie bei TCanvas besitzt auch TAdCanvas zwei essenzielle Objekte: Einen Pen und einen Brush. Über den Pen kann eingestellt werden, wie Linien aussehen sollen, über den Brush kann das aussehen der Füllung verändert werden.
TAdBrush besitzt folgende Eigenschaften:

Delphi-Code:
Color:TAndorraColor //Standardfarbe
GradientColor:TAndorraColor //Verlaufsfarbe
GradientDirecton:TAdCanvasGradientDirection //Richtung des Verlaufes (gdVertical, gdHorizontal)
Style:TAdBrushStyle //Stil (abClear, abSolid, abGradient)
Texture:TAd2dTexture //Textur, mit der das Objekt gefüllt werden soll
TextureMode:TAdCanvasTextureMode //Art, wie das Objekt mit der Textur gefüllt werden soll (tmTile, tmStretch, tmStretchAlign)
TexturePosition:TAdCanvasTexturePosition //Wo sich die Textur befinden soll (tpStatic, tpDynamic)
BlendMode:TAd2dBlendMode //Beschreibt, wie das Objekt geblendet werden soll

Bei TAdPen sieht es ähnlich aus:

Delphi-Code:
Color:TAndorraColor //Farbe des Stifts
Width:single //Breite des Stifts
Texture:TAd2dTexture //Textur des Stifts
TextureMode:TAdCanvasTextureMode //Art, wie die Line mit der Textur gefüllt werden soll (tmTile, tmStretch, tmStretchAlign)
TexturePosition:TAdCanvasTexturePosition //Wo sich die Textur befinden soll (tpStatic, tpDynamic)
PenPosition:TAdPenPosition //Wo sich die Line befinden soll (ppOuter,ppMiddle,ppInner)
Style:TAdPenStyle //Stil der Line (apNone, apSolid)
BlendMode:TAd2dBlendMode //Beschreibt, wie das Objekt geblendet werden soll

Linen Zeichnen
Es gibt zwei Befehle, die wichtig sind, um eine Linie zu Zeichenen:

Delphi-Code:
MoveTo(X,Y) //Den Zeichenstift an einer bestimmten Stelle positionieren
LineTo(X,Y) //Von der letzten Stelle oder der Stelle, die mit MoveTo gesetzt wurde, zur angegebenen Stelle zeichnen

Beispiel 1:

Delphi-Code:
//Zeichnet eine schwarze Linie von (0;0) zu (100;100).
Pen.Color := AdCol32_Black; // := Ad_ARGB(255, 0, 0, 0);
MoveTo(0,0);
LineTo(100,100);

Beispiel 2:

Delphi-Code:
//Zeichnet eine dicke Linie mit Farbverlauf von (0;0) zu (100;100);
Pen.Width := 4;
Pen.Color := Ad_ARGB(255,0,0,255);
MoveTo(0,0);
Pen.Color := Ad_ARGB(255,255,0,0);
LineTo(100,100);

Rechtecke Zeichnen
Dazu steht der Befehl "Rectangle" zur Verfügung:

Beispiel 1:

Delphi-Code:
//Zeichnet ein blaues Rechteck mit brauner Umrandung von (1;1) nach (100;100);
Pen.Color := AdCol32_Coral;
Brush.Color := AdCol32_CornflowerBlue;
Rectangle(1,1,100,100);

Beispiel 2:

Delphi-Code:
//Zeichnet ein Rechteck mit horizonzalem Farbverlauf und blauer Umrandung von (1;1) nach (100;100);
Pen.Color := Ad_ARGB(255,0,0,255);;
Pen.Style := apSolid;
Brush.Color := Ad_ARGB(255,255,255,0);
Brush.GradientColor := Ad_ARGB(255,255,0,255);
Brush.GradientDirecton := gdHorizontal;
Rectangle(1,1,100,100);

Kreise Zeichnen
Hierzu wird der Befehl "Circle" oder "Ellipse" verwendet.

Beispiel 1:

Delphi-Code:
//Zeichnet einen Kreis mit Farbverlauf an Punkt (50;50) mit dem Radius 50px;
Pen.Style := apNone;
Brush.Color := AdCol32_Azure;
Brush.GradientColor := AdCol32_Orange;
Circle(50,50,50);

Text Zeichnen
Hierzu wird der Befehl "Textout" verwendet.

Beispiel 1:

Delphi-Code:
//Zeichnet blauen Text
Pen.Color := Ad_ARGB(200, 0, 0, 255);
Textout(0,0,'Test Text!');

Beispiel 2:

Delphi-Code:
Pen.Color := AdCol32_Black;
Font := AdDraw.Fonts.GenerateFont('Comic Sans MS',12, [afItalic]);
Textout(0,0,'Test Text!');

Copyright und Lizenz
(c) by Andreas Stöckel Mai 2007

Revision 2: Dezember 2007
Revision 3: Juli 2008

Der Inhalt dieses Tutorials steht unter der GNU Lizenz für freie Dokumentation.


This page was generated with the help of the following PHP-Scripts: GeSHi a free PHP Syntax highlighter and StringParser_BBCode a free BBCode Parser.