Inhaltsverzeichnis

23.3.2 Methoden der Klasse Paint

Die Klasse Paint (gb.qt4) besitzt nur (statische) Methoden. Die vielen Methoden sind in den u.a. Tabellen gruppiert notiert, um so Zusammenhänge besser sichtbar werden zu lassen. Nach den Tabellen finden Sie Hinweise zur Verwendung ausgewählter Methoden und Beschreibungen der Parameter.

Das Projekt Painting aus den Gambas-Beispielen sollten Sie sich unbedingt ansehen, weil es nicht nur das Zeichnen mit der Klasse Paint demonstriert, sondern auch den verwendeten (Paint-)Quelltext für die 22 Linien und Flächen anzeigt:

Abbildung 23.3.2.1: Projekt Painting – Beispiel 9: Füllstil

23.3.2.1 Methoden

Die Klasse Paint verfügt über diese Methoden:

1x1MethodeBeschreibung
Begin ( Device As Object [ Area As RectF ])Startet das Zeichnen auf dem angegebenen Device (Zeichenfläche: DrawingArea, Picture, Image, Printer, SVGImage). Der Aufruf kann verschachtelt werden.
End ( )Beendet das Zeichnen. Sie müssen diese Methode genauso oft aufrufen, wie die Paint.Begin(..)-Methode.
NewPath ( )Löscht den aktuellen Zeichen-Pfad. Nach dem Aufruf existiert weder ein Pfad und noch ein aktueller (Start-)Punkt.
ClosePath ( )Fügt ein Linien-Segment zum aktuellen Pfad hinzu und zwar vom aktuellen Punkt bis zum Startpunkt des aktuellen Teil-Pfades (das ist der Punkt, der zuletzt an Paint.MoveTo() übergeben wurde). So wird der aktuelle Pfad geschlossen und der aktuelle Punkt wird zum gemeinsamen Anfangs- und Endpunkt des Pfades.
Scale ( SX As Float, SY As Float )Ändert die aktuelle Transformationsmatrix (CTM) durch Skalierung der x- und y-User-Space-Achsen mit den Faktoren SX und SY. SX: Skalierungsfaktor für die x-Richtung, SY: Skalierungsfaktor für die y-Richtung
Translate ( TX As Float, TY As Float )Ändert die CTM durch Verschieben des Koordinatenursprungs um TX und TY. TX: Verschiebungsweite in x-Richtung, TY: Verschiebungsweite in y-Richtung
Rotate ( Angle As Float )Ändert die CTM durch Drehen der Koordinaten-Achsen bei gegebenem Drehwinkel Angle (Bogenmaß). Die Drehrichtung für positive Drehwinkel entspricht einer Drehung von der positiven x-Achse in Richtung der positiven y-Achse (mathematisch positiv).
Clip ( [ Preserve As Boolean ] )Erstellt eine neue Clip-Region, indem die aktuelle Clip-Region mit dem aktuellen Pfad geschnitten wird – unter Beachtung der aktuellen FillRule. Nach der Anwendung von Clip() wird der aktuelle Pfad gelöscht, außer das Preserve-Argument ist TRUE. Die aktuelle Clip-Region beeinflusst alle Zeichenoperationen: alle Änderungen außerhalb dieser Region werden ignoriert. Ein Aufruf von Clip() kann die Clip-Region nur kleiner machen, niemals größer, aber der aktuelle Clip ist eine Eigenschaft des Paint-Zustands. Eine temporäre Clip-Einschränkung können Sie erreichen, indem Sie innerhalb eines Paint.Save()-/Paint.Restore()-Paares clippen. Nur Paint.ResetClip() vergrößert die Clip-Region wieder.
ResetClip ( )Setzt die aktuelle Clip-Region auf ihren ursprünglichen, uneingeschränkten Zustand zurück.
Reset()Setzt die CTM auf die Identitätsmatrix (Ausgangsmatrix).
Save ( )Erstellt eine Kopie des aktuellen Paint-Zustands und speichert diese in einem internen Stapel der gespeicherten Zustände. Wenn Wiederherstellen aufgerufen wird, so wird der Zeichnung-Zustand aus dem gespeicherten Zustand wieder hergestellt. Mehrere Aufrufe zum Speichern und Wiederherstellen können verschachtelt werden.
Restore ( )Stellt den Paint-Zustand wieder her, indem der gespeicherte Zustand aufgerufen wird. Anschließend wird der gespeicherte Zustand aus dem Stapel der gespeicherten Zustände gelöscht.

23.3.2.2 Methoden – Farbe und Muster

MethodeBeschreibung
Color ( Color As Integer ) As PaintBrushErstellt einen neuen Pinsel entsprechend einer opaken oder durchscheinenden Farbe. Die Farbe 'Color' wird definiert wie für alle GUI-Komponenten → Kapitel 25.3.5 Arbeit mit Farben
LinearGradient ( X0 As Float, Y0 As Float, X1 As Float, Y1 As Float, Colors As Integer[], Positions As Float[] [ , Extend As Integer ] ) As PaintBrushErstellt einen neuen linearen Farbverlauf-Pinsel entlang der durch (X0|Y0) und (X1|Y1) definierten Linie und definiert Farbhaltestellen aus den Farb- und Positionsargumenten.
RadialGradient ( CX As Float, CY As Float, Radius As Float, FX As Float, FY As Float, Colors As Integer[], Positions As Float[] [ , Extend As Integer ] ) As PaintBrushErstellt einen neuen radialen Farbverlauf-Pinsel, wobei die Farben zwischen einem Brennpunkt (FX|FY) und dem Endpunkt auf einer von (CX0|CY0, Radius0) definierten Kreisfläche interpoliert werden und definiert Farbhaltestellen aus den Farb- und Positionsargumenten.

23.3.2.3 Methoden – Linien und Flächen

1x1MethodeBeschreibung
MoveTo ( X As Float, Y As Float )Beginnt einen neuen (Unter-)Pfad. Nach diesem Aufruf hat der aktuelle Punkt die Koordinaten P(x|y).
RelMoveTo(DX, DY)Beginnt einen neuen (Unter-)Pfad. Nach diesem Aufruf besitzt der aktuelle Punkt P' ein Offset von DX und DY gegenüber dem Ausgangspunkt P. Bei einem Start-Punkt P(x|y) hat der aktuelle Punkt nach Anwendung von RelMoveTo(DX,DY) die Koordinaten P'(x+DX | y+DY).
LineTo ( X As Float, Y As Float )Fügt dem Pfad eine Strecke (Geradenabschnitt) vom existierenden Start-Punkt P(x0|y0) zum Punkt P'(X|Y) in User-Space-Koordinaten hinzu.
RelLineTo ( DX As Float, DY As Float )Fügt dem Pfad eine Strecke (Geradenabschnitt) vom Start-Punkt P(x0|y0) zum aktuellen Punkt P'(x0+DX | y0+DY) in User-Space-Koordinaten hinzu.
Rectangle ( X As Float, Y As Float, Width As Float, Height As Float [ , Radius As Float ] )Fügt für das Rechteck der vorgegebenen Größe einen geschlossenen Unter-Pfad zum bestehenden Pfad in User-Space-Koordinaten hinzu.
FillRect ( X As Float, Y As Float, Width As Float, Height As Float, Color As Integer )Zeichnet das durch Startpunkt sowie Länge und Höhe definierte Rechteck und füllt es mit der angegebenen Farbe.
Polygon ( Points As Float[] )Fügt für das Polygon mit den vorgegebenen Punkten einen geschlossenen Unter-Pfad zum bestehenden Pfad hinzu. Points ist ein Float-Array, wobei jedes Paar von Werten einen Punkt des Polygons beschreibt. Folglich muss die Anzahl der Elemente im Float-Array gerade sein. Die Mindestanzahl ist vier. Das Polygon wird automatisch geschlossen.
Ellipse ( X As Float, Y As Float, Width As Float, Height As Float [ , Angle As Float, Length As Float, Pie As Boolean ] )Fügt dem Pfad einen elliptischen Bogen hinzu. Die Ellipse wird durch ihren Begrenzungsrahmen (X, Y, Breite, Höhe) definiert. Der Ellipsenbogen beginnt mit dem Start-Winkel 'Angle' und verläuft gegen den Uhrzeigersinn mit dem Winkel 'Length'. Die Bezugsachse für 0 Grad ist die positive x-Achse. Alle Winkelangaben müssen im Bogenmaß erfolgen. Setzen Sie die Rad-Funktion ein, um ein Gradmaß in das Bogenmaß zu konvertieren.
Arc ( XM As Float, YM As Float, Radius As Float [ , Angle As Float, Length As Float, Pie As Boolean ] )Fügt dem Pfad einen Kreisbogen mit dem gegebenen Radius hinzu. Der Bogen wird bei (XM, YM) zentriert und beginnt mit dem (Start-) Winkel Angle und dreht den Zentriwinkel gegen den Uhrzeigersinn mit dem Winkel Length. Die Bezugsachse für 0 Grad ist die positive x-Achse. Alle Winkelangaben müssen im Bogenmaß erfolgen. Setzen Sie die Rad-Funktion ein, um ein Gradmaß in das Bogenmaß zu konvertieren.
CurveTo ( X1 As Float, Y1 As Float, X2 As Float, Y2 As Float, X3 As Float, Y3 As Float )Fügt eine kubische Bezier-Kurve (Spline) von der aktuellen Position bis zur Position (X3|Y3) in User-Space-Koordinaten dem Pfad hinzu, wobei (X1|Y1), (X2|Y2) und (X3|Y3) Stütz-Punkte sind. Nach diesem Aufruf wird der aktuelle Punkt (X3|Y3) sein.
RelCurveTo ( X1 As Float, Y1 As Float, X2 As Float, Y2 As Float, X3 As Float, Y3 As Float )Fügt, genau wie CurveTo(), eine kubische Bezier-Kurve hinzu. Hier werden aber alle Argumente als Offsets relativ zum aktuellen Punkt aufgefasst.
Stroke ( [ Preserve As Boolean ] )Der (Linien-)Pfad wird mit der aktuellen Linien-Definition (Strichstärke, Strich-Form und Linien-Endform) nachgezeichnet. Der Pfad wird nach Paint.Stroke() gelöscht – es sei denn, das Preserve-Argument ist auf den Wert TRUE gesetzt.
Fill ( [ Preserve As Boolean ] )Füllt die durch den aktuellen Pfad begrenzte Fläche anhand der aktuellen Flächen-Definition (FillRule). Jeder Teil-Pfad wird vorher automatisch geschlossen. Nach Paint.Fill() wird der Pfad gelöscht – aber nur dann, wenn das optionale Preserve-Argument nicht auf TRUE gesetzt wurde.

23.3.2.4 Methoden – Text und Bilder

MethodeBeschreibung
Text ( Text As String [ , X As Float, Y As Float, Width As Float, Height As Float, Alignment As Integer ] )Fügt den angegebenen Text zum Pfad hinzu. Es wird der aktuelle Font benutzt, der über die Font-Eigenschaft gesetzt ist.
TextSize ( Text As String ) As RectFGibt den Begrenzungsrahmen (Datentyp RectF (mit Koordinaten vom Typ Float)) zurück, der durch die Textzeichenfolge benötigt wird. Im Gegensatz zu TextExtents wird die Font-Schriftgröße verwendet – nicht die Höhe des tatsächlich gezeichneten Textes.
TextExtents ( Text As String ) As PaintExtentsErmittelt die Ausmaße (Datentyp PaintExtents) für die Textzeichenfolge. Die Ausmaße beschreiben ein User-Space-Rechteck, das den tatsächlich gezeichneten Text umschließt, wie es von Paint.Text und Paint.Fill ohne Transformationsmatrix erstellt worden wäre.
TrimText ( Text As String, W As Float [ , H As Float ] ) As StringGibt einen eingekürzten Text zurück, der in das angegebene Rechteck passt. Wenn der Text von vornherein in das Rechteck passt, wird er unverändert zurückgegeben. Sonst wird er gekürzt und mit einem Auslassungszeichen ergänzt, so dass er passt.
RichText ( Text As String [ , X As Float, Y As Float, Width As Float, Height As Float, Alignment As Integer ] )Fügt den angegebenen RichText zum Pfad hinzu. Es wird der aktuelle Font benutzt, der über die Font-Eigenschaft gesetzt ist.
RichTextSize ( Text As String [ , Width As Float ] ) As RectFGibt den Begrenzungsrahmen (Datentyp RechteckF (mit Koordinaten vom Typ Float)) zurück, der durch die RichText-Zeichenfolge benötigt wird. Im Gegensatz zu RichTextExtents wird die Font-Schriftgröße verwendet - nicht der tatsächlich gezeichnete Text.
RichTextExtents ( Text As String [ , Width As Float ] ) As PaintExtentsErmittelt die Ausmaße (Datentyp PaintExtents) für die RichText-Zeichenfolge. Die Ausmaße beschreiben ein User-Space-Rechteck, das den tatsächlich gezeichneten Text umschließt, wie es von Paint.RichText und Paint.Fill ohne Transformationsmatrix erstellt worden wäre. Da nur ein Pfad erstellt wird, werden durch die <font>-Auszeichnung definierte Schrift-Farben nicht berücksichtigt!
TrimRichText ( RichText As String, W As Float [ , H As Float ] ) As StringGibt eine gekürzte Version des gegebenen RichTexts zurück, die in das gegebene Rechteck passt. Wenn der RichText hinein passt, wird er unverändert zurückgegeben. Sonst wird er eingekürzt und um ein Auslassungszeichen ergänzt, so dass er passt.
DrawImage ( Image As Image, X As Float, Y As Float [ , Width As Float, Height As Float, Opacity As Float, Source As Rect ] ) Zeichnet ein Bild oder einen Teil eines Bildes. Dabei geben die X-, Y-, Width- und Height-Argumente die Position und maximale Ausdehnung des Bildes auf der Zeichenfläche an. Im Source-Argument kann das gewünschte Teilbild aus dem übergebenen Image als Rechteck spezifiziert werden.
DrawPicture ( Picture As Picture, X As Float, Y As Float [ , Width As Float, Height As Float, Source As Rect ] )Zeichnet ein Bild oder einen Teil eines Bildes. Dabei geben die X-, Y-, Width- und Height-Argumente die Position und maximale Ausdehnung des Bildes auf der Zeichenfläche an. Im Source-Argument kann das gewünschte Teilbild aus dem übergebenen Picture als Rechteck spezifiziert werden.
DrawText ( Text As String [ , X As Float, Y As Float, Width As Float, Height As Float, Alignment As Integer ] )Zeichnet den angegebenen Text. Wenn Sie die optionalen Parameter angegeben, so wird der Text durch das angegebene Rechteck begrenzt und nach dem Alignment-Parameter ausgerichtet. Die Methode ist schneller, als den Text mit Paint.Text und anschließendem Paint.Fill zu zeichnen.
DrawTextShadow ( Text As String, X As Float, Y As Float, W As Float, H As Float [ , Alignment As Integer, Radius As Integer, Opacity As Float ] )Zeichnet den Schatten eines Textes.
DrawRichText ( Text As String [ , X As Float, Y As Float, Width As Float, Height As Float, Alignment As Integer ] )Zeichnet den angegebenen Rich-Text. Wenn Sie die optionalen Parameter angegeben, so wird der Text durch das angegebene Rechteck begrenzt und nach dem Alignment-Parameter ausgerichtet. Die Methode ist schneller, als den Text mit Paint.RichText und anschließendem Paint.Fill zu zeichnen.
DrawRichTextShadow ( Text As String, X As Float, Y As Float, W As Float, H As Float [ , Alignment As Integer, Radius As Integer, Opacity As Float ] )Zeichnet den Schatten eines RichTextes.
Image ( Image As Image [ , X As Float, Y As Float ] ) As PaintBrushErstellt einen neuen Pinsel aus einem Bild. Image ist das Bildobjekt und X sowie Y sind die (optionalen) Werte (Datentyp Float) aus der Brush-Matrix und geben die initiale Translation des Bildes an.

Tabellen 23.3.2.4.1 : Methoden der Klasse Paint

23.3.2.5 Hinweise

Die folgenden Hinweise ergänzen die Inhalte der Tabellen. Es werden Argumente näher beschrieben und auf Besonderheiten hingewiesen. Beispiele und vollständige Projekte dagegen finden Sie in den folgenden beiden → Kapiteln 23.3.3 Paint-Projekte 1 und 23.3.4 Paint-Projekte 2.

ClosePath

Kreis und Kreisbogen

Die Hinweise für einen Kreisbogen sind einerseits sehr umfangreich und andererseits zum Teil nur in bestimmten Kombinationen gültig:

Abbildung 23.3.2.4.1: Kreisbogen - Kreissektoren

Quelltext:

Public Sub DrawArcs()
  Paint.AntiAlias = True  
    Paint.LineWidth = 1
    Paint.Brush = Paint.Color(Color.Red)
    Paint.Arc(100, 140, 70, Rad(45), 3 * Pi / 2, False)
    Paint.Stroke
    Paint.Arc(260, 140, 70, Pi / 4, Rad(270), True)
    Paint.Stroke
    Paint.Arc(420, 140, 70, Pi / 4, 3 * Pi / 2, True)
    Paint.Fill
    Paint.Dash = [2, 2]
    Paint.Arc(420, 140, 70, Pi / 4 + 3 * Pi / 2, Rad(90), False)
    Paint.Stroke
    Paint.Dash = []  ' Null    
  Paint.AntiAlias = False  
End

Abgerundete Rechtecke

Wenn das optionale Radius-Argument definiert ist, so wird das Rechteck abgerundete 'Ecken' besitzen. Das Argument Radius bestimmt den Radius der Rundung. Der Radius darf nicht größer als die Hälfte der kürzesten Seite des Rechtecks sein.

Polygon – Spezialfall Dreieck

Mit diesem Quelltext wird ein hellblaues Dreieck ABC gezeichnet:

Paint.LineWidth = 1
Paint.Brush = Paint.Color(&C3DDFF) ' hellblau
Paint.Polygon([20, 20, 30, 160, 200, 70]) ' A(20|20), B(30|160) und C(200|70)
Paint.Fill

Ellipsen

Ellipse ( X As Float, Y As Float, Width As Float, Height As Float [ , Angle As Float, Length As Float, Pie As Boolean ] )

Kubische Bezier-Kurve

CurveTo ( X1 As Float, Y1 As Float, X2 As Float, Y2 As Float, X3 As Float, Y3 As Float )

Gab es keinen aktuellen Punkt vor dem Aufruf von Paint.CurveTo(..), so wird sich die Funktion so verhalten, als ob dem Aufruf die Methode Paint.MoveTo(X1|Y1) vorausging, um einen definierten Anfang zu sichern.

Kubische Bezier-Kurve mit relativen Koordinaten – Version von CurveTo(..)

RelCurveTo ( X1 As Float, Y1 As Float, X2 As Float, Y2 As Float, X3 As Float, Y3 As Float )

Paint.CurveTo(X+DX1, Y+DY1, X+DX2, Y+DY2, X+DX3, Y+DY3) ist logisch äquivalent zum Aufruf Paint.RelCurveTo (DX1, DY1, DX2, DY2, DX3, DY3) bei einem aktuellen Punkt (X|Y).

Text

Text(Text As String [, X As Float,Y As Float,Width As Float,Height As Float,Alignment As Integer ] )

RichText

RichText ( Text As String [ , X As Float, Y As Float, Width As Float, Height As Float, Alignment As Integer ] )

TrimText – TrimRichText

TrimText ( Text As String, W As Float [ , H As Float ] ) As String
TrimRichText ( RichText As String, W As Float [ , H As Float ] ) As String

DrawImage

DrawImage ( Image As Image, X As Float, Y As Float [ , Width As Float, Height As Float, Opacity As Float, Source As Rect ] )

DrawPicture

DrawPicture ( Picture As Picture, X As Float, Y As Float [ , Width As Float, Height As Float, Source As Rect ] )

DrawTextShadow

DrawTextShadow ( Text As String, X As Float, Y As Float, W As Float, H As Float [ , Alignment As Integer, Radius As Integer, Opacity As Float ] )
DrawRichTextShadow ( Text As String, X As Float, Y As Float, W As Float, H As Float [ , Alignment As Integer, Radius As Integer, Opacity As Float ] )

LinearGradient

LinearGradient ( X0 As Float, Y0 As Float, X1 As Float, Y1 As Float, Colors As Integer[], Positions As Float[] [ , Extend As Integer ] ) As PaintBrush

Abbildung 23.3.2.4.2: LinearGradient

RadialGradient

RadialGradient (CX As Float,CY As Float,Radius As Float,FX As Float,FY As Float,Colors As Integer[],Positions As Float[] [,Extend As Integer ]) As PaintBrush

Download