PureBasic: Zeichnen
Es ist möglich Formen und Linien zu zeichnen. Dies ist z.B. nützlich, wenn man ein Simulationsprogramm programmerien will oder einen Funktionsplotter. Plakativ soll hier zweidimensional gezeichnet werden, in der PureBasic-Vollversion ist es auch möglich 3D-Objekte zu erstellen.
; Listing 46: Zeichnen Procedure.f turn_x(x.f, y.f, degree.f) ProcedureReturn Cos(Radian(degree))*x-Sin(Radian(degree))*y EndProcedure Procedure.f turn_y(x.f,y.f,degree.f) ProcedureReturn Sin(Radian(degree))*x+Cos(Radian(degree))*y EndProcedure x1.f=100 y1.f=100 x2.f=140 y2.f=140 x3.f=100 y3.f=140 degree.f = 1 OpenWindow(0,0,0,400,400,"Umkehrungen",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) AddWindowTimer(0,0,10) Repeat Select WindowEvent() Case #PB_Event_CloseWindow End Case #PB_Event_Timer StartDrawing(WindowOutput(0)) Box(0,0,400,400) LineXY(x1+200,y1+200,x2+200,y2+200,RGB(0,0,0)) LineXY(x1+200,y1+200,x3+200,y3+200,RGB(0,0,0)) LineXY(x2+200,y2+200,x3+200,y3+200,RGB(0,0,0)) LineXY(x1+200,y1+200,200,200,RGB(0,0,0)) Circle(200,200,2,RGB(0,0,0)) x1_new.f=turn_x(x1,y1,degree) y1_new.f=turn_y(x1,y1,degree) x2_new.f=turn_x(x2,y2,degree) y2_new.f=turn_y(x2,y2,degree) x3_new.f=turn_x(x3,y3,degree) y3_new.f=turn_y(x3,y3,degree) x1=x1_new y1=y1_new x2=x2_new y2=y2_new x3=x3_new y3=y3_new StopDrawing() EndSelect ForEver
Dieses Programm öffnet ein Fenster, in welchem in der Mitte ein Kreis gezeichnet wird (Circle()), von dem eine Linie ausgeht, an der ein Dreieck hängt (LineXY()). Die Linie und das Dreieck drehen sich nun im Uhrzeigersinn.
Mit StartDrawing() wird ausgesagt, dass nun begonnen werden soll etwas zu zeichnen. Das Argument ist dabei die Form der Ausgabe, in diesem Fall ein Fenster. WindowOutput() muss wiederum als Argument die Fensternummer übergeben werden, die zur Zeichenausgabe dienen soll. Für StartDrawing() gibt es noch weitere Argumente, um z.B. eine Ausgabe zu drucken. Wenn fertig gezeichnet wurde und man noch andere Dinge im Programm ausführen will, sollte man StopDrawing() ausführen, da damit nicht mehr benötigte Rechnerressourcen freigegeben werden. Mit Circle() wird wie gesagt ein Kreis gezeichnet, wobei die ersten beiden Argumente die x- bzw. die y-Position darstellen und die anderen Argumente den Radius und die Farbe in RGB-Schreibweise. Letzteres heißt, dass die erste Zahl den Rot-, die zweite den Grün- und die letzte den Blauanteil der Farbe darstellt. In der Referenz ist eine Farbtabelle enthalten, über die man die Werte für bestimmte Farben herausfinden kann. Bei der x-y-Position wird 200 hinzuaddiert, weil die Prozeduren zum Drehen des Zeigers, diesen um die linke obere Fensterecke drehen. Mit LineXY() werden die Linien gezeichnet, wobei man jeweils zwei Punkte, die verbunden werden sollen, mit x-y-Koordinate angeben muss. Zusätzlich muss wieder die Farbe für die Linien angegeben werden. Darunter werden die Punkte, die verbunden werden sollen, gedreht. Die Prozeduren basieren hierbei auf Vektorrechnung. Die neuen Werte müssen zuerst in Zwischenvariablen gespeichert werden, da sowohl für die neue x-, als auch für die neue y-Koordinate, die alten Koordinaten benötigt werden. Mit Box() wird der gesamte bisher gezeichnete Inhalt übermalt, in dem über alles ein großes Viereck gelegt wird, da sonst die alten Linien immer noch sichtbar wären.
Farben
BearbeitenAuch das Benutzen von Farben ist ohne weiteres möglich.
; Listing 47: Farben OpenWindow(0,0,0,400,400,"Farben",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) rot = RGB(255, 0, 0) gruen = RGB( 0,255, 0) blau = RGB( 0, 0,255) gelb = RGB(255,255, 0) Repeat Select WindowEvent() Case #PB_Event_CloseWindow End Case #PB_Event_Repaint StartDrawing(WindowOutput(0)) Box( 0, 0,200,200,rot) Box(200, 0,200,200,gruen) Box( 0,200,200,200,blau) Box(200,200,200,200,gelb) StopDrawing() EndSelect ForEver
Dieses Programm öffnet ein Fenster, in dem vier Quadrate in verschiedenen Farben gezeichnet werden.
Zunächst werden die Werte der vier Farben rot,grün,blau und gelb über die Funktion RGB() in den Variablen gespeichert. Diese werden Benutzt um den Boxen einen Farbwert zuzuweisen. Alternativ können die RGB-Werte, wie im vorhergehenden Beispiel, auch direkt als letzter Parameter der Zeichenfunktion (hier: Box()) geschrieben werden.
Die Farben können alternativ auch als Hexadezimalzahl oder als Dezimalzahl geschrieben werden.
blau = RGB(0,0,255) blau = $FF0000 blau = 16711680
Jede dieser drei Zeilen bewirkt das selbe. Die Dezimalschreibweise ist nicht geläufig, da aus ihr nicht auf Anhieb abzulesen ist welche Farbe hinter der Zahl steckt. Einfacher ist es bei rot, die den Dezimalwert 255 hat. Die Funktion RGB() geht grob nach folgender Rechnung vor:
Rückgabewert = Rot + 2^8 * Grün + 2^16 * Blau