10.2 Linie, Rechteck, Polygon und Ellipse zeichnen
Das erste Beispielprogramm (Projekt ZeichnenGrundformen) enthält folgende Möglichkeiten:
- Zeichnen einer Linie
- Zeichnen eines leeren oder gefüllten Rechtecks
- Zeichnen eines leeren oder gefüllten Polygons
- Zeichnen einer leeren oder gefüllten Ellipse
- Ändern der Stiftdicke
- Ändern der Stiftfarbe
- Löschen der gesamten Zeichnung
Das entstandene Kunstwerk könnte damit aussehen wie in Abbildung 10.1.
Abbildung 10.1 Erste geometrische Objekte
10.2.1 Grundeinstellungen
Zunächst müssen einige Grundeinstellungen getroffen werden:
Public Class Form1
Dim z As Graphics = CreateGraphics()
Dim stift As New Pen(Color.Red, 2)
Dim pinsel As New SolidBrush(Color.Red)
Private Sub Form1_Load(...) Handles MyBase.Load
lstFarbe.Items.Add("Rot")
lstFarbe.Items.Add("Grün")
lstFarbe.Items.Add("Blau")
lstFarbe.SelectedIndex = 0
End Sub
[...]
End Class
Listing 10.1 Projekt »ZeichnenGrundformen«, Einstellungen
Zur Erläuterung:
- Die Methode CreateGraphics() liefert einen Verweis auf das Graphics-Objekt des Formulars. Es kann nun im gesamten Formular mithilfe der Variablen z auf die Zeichenfläche des Formulars zugegriffen werden.
- Diese sehr einfache Methode hat allerdings den Nachteil, dass die Zeichnung teilweise oder ganz gelöscht wird, sobald z. B. eine andere Anwendung über dem Formular eingeblendet wird. Eine andere Methode wird in Abschnitt 10.5 vorgestellt.
- Es wird ein Zeichenstift zum Zeichnen von Linien und nicht-gefüllten Objekten in der Farbe Rot und der Dicke 2 festgelegt. Dieser steht nun im gesamten Formular über das Objekt stift der Klasse Pen zur Verfügung.
- Ein einfacher Pinsel zum Füllen von Objekten wird ebenfalls in der Farbe Rot festgelegt. Dieser steht nun im gesamten Formular über das Objekt pinsel der Klasse SolidBrush zur Verfügung.
- Ein Listenfeld ermöglicht einen Farbwechsel für Stift und Pinsel. Dieses Listenfeld wird zu Beginn des Programms mit drei Farben gefüllt.
10.2.2 Linie
Zum Zeichnen einer Linie wird die Methode DrawLine() verwendet. Die Prozedur:
Private Sub cmdLinie_Click(...) Handles ...
z.DrawLine(stift, 100, 40, 100, 60)
End Sub
Listing 10.2 Projekt »ZeichnenGrundformen«, Linie
Zur Erläuterung:
- Die Methode DrawLine() erfordert in jedem Fall einen Zeichenstift.
- Anschließend werden die Start- und Endkoordinaten der Linie angegeben, entweder als Einzelkoordinaten (x,y) oder als Objekte der Klasse Point.
10.2.3 Rechteck
Die Methoden DrawRectangle() und FillRectangle() erzeugen ungefüllte bzw. gefüllte Rechtecke. Sind beide Seiten des Rechtecks gleich lang, handelt es sich bekanntlich um ein Quadrat:
Private Sub cmdRechteck_Click(...) Handles ...
If chkFüllen.Checked Then
z.FillRectangle(pinsel, 10, 10, 180, 180)
chkFüllen.Checked = False
Else
z.DrawRectangle(stift, 10, 10, 180, 180)
End If
End Sub
Listing 10.3 Projekt »ZeichnenGrundformen«, Rechteck
Zur Erläuterung:
- Der Benutzer kann über das Kontrollkästchen chkFüllen festlegen, ob es sich um ein gefülltes oder leeres Rechteck handeln soll.
- Das gefüllte Rechteck benötigt einen Pinsel, das leere Rechteck einen Zeichenstift.
- Anschließend gibt man entweder vier Werte für die x- und y-Koordinate der oberen linken Ecke sowie für die Breite und Höhe des Rechtecks oder ein Objekt der Klasse Rectangle an.
- Falls der Benutzer das gefüllte Rechteck gewählt hat, wird das Kontrollkästchen für das nächste Objekt wieder zurückgesetzt.
10.2.4 Polygon
Polygone sind Vielecke und bestehen aus einem Linienzug, der nacheinander alle Ecken einschließt. Die Methoden DrawPolygon() und FillPolygon() erzeugen einen geschlossenen Polygonzug, der ungefüllt bzw. gefüllt ist.
Falls der Benutzer das gefüllte Polygon gewählt hat, wird das Kontrollkästchen für das nächste Objekt wieder zurückgesetzt.
Private Sub cmdPolygon_Click(...) Handles ...
Dim point_feld() As Point =
{New Point(90, 80),
New Point(110, 80),
New Point(100, 120)}
If chkFüllen.Checked Then
z.FillPolygon(pinsel, point_feld)
chkFüllen.Checked = False
Else
z.DrawPolygon(stift, point_feld)
End If
End Sub
Listing 10.4 Projekt »ZeichnenGrundformen«, Polygon
Zur Erläuterung:
- Ebenso wie das Rechteck kann auch das Polygon gefüllt (mithilfe eines Pinsels) oder ungefüllt (mithilfe eines Zeichenstifts) erzeugt werden.
- Als zweiter Parameter wird ein Feld von Objekten der Klasse Point benötigt. Die Anzahl der Elemente dieses Felds bestimmt die Anzahl der Ecken des Polygons.
- Zwischen zwei Punkten, die in dem Feld aufeinander folgen, wird eine Linie gezogen. Vom letzten Punkt aus wird zuletzt noch eine Linie zum ersten Punkt gezogen.
10.2.5 Ellipse
Die Methoden DrawEllipse() und FillEllipse() erzeugen ungefüllte bzw. gefüllte Ellipsen innerhalb eines umgebenden Rechtecks. Sind beide Seiten des umgebenden Rechtecks gleich lang, so erhält man einen Kreis. Die Prozedur:
Private Sub cmdEllipse_Click(...) Handles ...
If chkFüllen.Checked Then
z.FillEllipse(pinsel, 10, 10, 180, 180)
chkFüllen.Checked = False
Else
z.DrawEllipse(stift, 10, 10, 180, 180)
End If
End Sub
Listing 10.5 Projekt »ZeichnenGrundformen«, Ellipse
Zur Erläuterung:
- Der Aufbau der Ellipse entspricht dem Aufbau eines Rechtecks, das diese Ellipse umgibt.
10.2.6 Dicke und Farbe ändern, Zeichnung löschen
Einige Hilfsroutinen vervollständigen unser kleines Zeichenprogramm:
Private Sub numPenWidth_ValueChanged(...
) Handles numPenWidth.ValueChanged
stift.Width = numPenWidth.Value
End Sub
Private Sub lstFarbe_SelectedIndexChanged(...
) Handles lstFarbe.SelectedIndexChanged
Dim color_feld() As Color =
{Color.Red, Color.Green, Color.Blue}
stift.Color =
color_feld(lstFarbe.SelectedIndex)
pinsel.Color =
color_feld(lstFarbe.SelectedIndex)
End Sub
Private Sub cmdClear_Click(...) Handles ...
z.Clear(BackColor)
End Sub
Listing 10.6 Projekt »ZeichnenGrundformen«, Ändern, Löschen
Zur Erläuterung:
- Die Eigenschaft Width bestimmt die Dicke des Zeichenstifts. Der Wert des Zahlenauswahlfelds wird bei einer Änderung unmittelbar für die Stiftdicke übernommen.
- Die Eigenschaft Color bestimmt die Farbe des Zeichenstifts und des Pinsels. Der Index des ausgewählten Elements im Listenfeld wird bei einer Änderung unmittelbar übernommen, um das zugehörige Element des Felds color_feld zu bestimmen. Das Feld color_feld ist ein Feld von Objekten der Struktur Color.
- Die Methode Clear() dient zum Löschen der Zeichenfläche. Eigentlich handelt es sich dabei um ein Auffüllen mit einer Einheitsfarbe. Hier wird die normale Hintergrundfarbe des Formulars zum Auffüllen genommen.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.