GrafServerV21

Werbung
GrafClient / GrafServer für Konsolenanwendungen unter C++ (Vers. 2.1)
Zielsetzung: Es sollte eine Möglichkeit geschaffen werden, in einfachen C++-Programmen
(Konsolenanwendungen mit main()-Funktion) Grafiken auszugeben.
Umsetzung: Leider erwies sich die Einbindung einer Grafik-Bibliothek in Konsolenanwendungen als
problematisch. Deshalb wurde ein Client-Server-Ansatz gewählt: Die Grafik wird von einem ServerProgramm (unter Java entwickelt) dargestellt (GrafServer). Die Konsolenanwendung enthält einen GrafikClient, der der Einfachheit halber als cpp-Datei mit #include eingebunden wird (GrafClient). Der Client stellt
die Verbindung zum Server her und kann dann Grafik-Befehle an diesen schicken.
Installation: Für die Verwendung des Grafik-Servers ist eine Installation von Java (JDK oder JRE)
Voraussetzung (auf diese soll hier nicht eingegangen werden). Das GrafServer-Programm liegt seit Version
2.0 als ausführbares Java-Archiv (jar-Datei) vor. Man benötigt nur die Datei GrafServer.jar. Zum Starten des
GrafServers sollte es genügen, eine Verknüpfung auf GrafServer.jar zu erstellen, die man auf dem Desktop
platziert. Falls dies nicht funktioniert, kann man eine Batch-Datei oder eine Verknüpfung mit der
Kommandozeile:
java –jar GrafServer.jar
erstellen. Falls der java-Befehl nicht gefunden wird, kann man auch explizit den Pfad angeben:
Pfad der Java-Installation/bin/java.exe –jar GrafServer.jar
Für den Grafik-Client kopiert man die Datei GrafClient.cpp in das include-Verzeichnis des C++-Compilers.
Verwendung von GrafClient / GrafServer: Um in einer Konsolenanwendung unter Borland C++-Builder,
Dev-C++ oder Visual C++ eine Grafikausgabe zu erzeugen, bindet man als include-Datei den Grafik-Client
ein:
#include <GrafClient.cpp>
Bei Visual C++ muss man unter Projekteigenschaften ( Konfigurationseigenschaften  Linker  Eingabe)
bei "Zusätzliche Abhängigkeiten" Ws2_32.lib angeben.
Bei Dev-C++ muss man bei den Projekt-Optionen (Tab Parameter) als Kommandozeilenoption für den
Linker -lwsock32 angeben (rechts bei Linker eintragen).
Es können dann in der Konsolenanwendung die nachfolgenden Grafik-Funktionen aufgerufen werden. Bevor
das C++-Programm gestartet wird, muss allerdings der Grafik-Server durch Aufruf von GrafServer.jar
gestartet werden.
Die wichtigsten Grafik-Funktionen: Die Namen der Grafik-Funktionen in der folgenden Tabelle von
drawLine bis setFont entsprechen denen in der Programmiersprache Java, in der auch der Grafik-Server
geschrieben wurde. Dies erleichtert einen eventuellen späteren Umstieg auf Java, das, im Unterschied zu
C++, die Grafik-Fähigkeit bereits im Sprach-Standard enthält. In der Tabelle sind alle Koordinaten in PixelEinheiten, die x-Koordinate geht von links nach rechts, die y-Koordinate von oben nach unten. Der Zusatz
2.1 weist darauf hin dass diese Funktion erst ab GrafServer-Version 2.1 verfügbar ist.
Funktionsaufruf
Beschreibung
startClient ();
oder
startClient (hoehe, breite);
Muss zu Beginn aufgerufen werden, um die Kommunikation zwischen
Client und Server herzustellen. Öffnet ein Grafik-Display. Die erste Form
verwendet Standardwerte für Breite und Höhe der Zeichenfläche, bei der
zweiten werden diese explizit angegeben.
endClient ();
Muss am Ende aufgerufen werden, um die Kommunikation zu beenden.
setSize (hoehe, breite);
Ändert die Größe des Grafik-Displays.
setTitle (titel);
Ändert den Titel des Grafik-Displays.
clear ();
Löscht die gesamte Zeichenfläche.
drawLine (x1, y1, x2, y2);
Zeichnet eine Linie vom Punkt (x1, y1) zum Punkt (x2, y2).
drawRect (x, y, w, h);
Zeichnet ein Rechteck mit linker oberer Ecke (x, y), Breite w und Höhe h.
fillRect (x, y, w, h);
Wie drawRect, aber gefüllt.
drawOval (x, y, w, h);
Zeichnet eine Ellipse, die in einem Rechteck mit linker oberer Ecke (x, y),
Breite w und Höhe h sitzt.
fillOval (x, y, w, h);
Wie drawOval, aber gefüllt.
drawPolyline (ax, ay, n);
Zeichnet einen Linienzug. Die x-Koordinaten stehen im int-Array ax, die yKoordinaten im int-Array ay, n ist die Anzahl der zu verbindenden Punkte.
drawPolygon (ax, ay, n);
Zeichnet einen geschlossenen Linienzug (Polygon). Der letzte Punkt wird
mit dem ersten verbunden. Parameter wie bei drawPolyline.
fillPolygon (ax, ay, n);
Wie drawPolygon, aber gefüllt.
drawBezier (x1, y1,
x2, y2, x3, y3, x4, y4);
Zeichnet eine gekrümmte Kurve, eine so genannte Bézier-Kurve dritter
Ordnung. Anfangspunkt ist (x1, y1), Endpunkt ist (x4, y4). Die Punkte
(x2, y2) und (x3, y3) steuern die Tangenten der Bézier-Kurve im Anfangsund Endpunkt. Die Koordinaten können als double-Werte angegeben
werden.
drawString (text, x, y);
Zeichnet den in der Zeichenkette text enthaltenen Text (z. B. “Hallo!“). Der
Punkt (x, y) gibt das linke Ende der Grundlinie des Textes an.
setColor (r, g, b);
Wählt eine Farbe zum Zeichnen. r, g, und b sind der Rot-, Grün- und Blauanteil. Sie liegen zwischen 0 und 255. Beispiele:
setColor (0, 0, 0): schwarz,
setColor (255, 255, 255): weiß,
setColor (0, 255, 0): grün.
setStroke (dicke);
Wählt die Strichdicke (in Pixeln) zum Zeichnen.
setFont (name, style,
size);
Wählt einen Font (Schriftart), der bei drawString verwendet wird. name ist
der Fontname (z. B. “Arial“), style steht für PLAIN (normal), BOLD (fett)
oder ITALIC (kursiv) und size ist die Schriftgröße. Auch die Kombination
BOLD + ITALIC ist möglich.
setClip (x, y, w, h);
2.1
Schränkt die nachfolgenden Zeichenoperationen auf einen rechteckigen
Bereich mit linker oberer Ecke (x, y), Breite w und Höhe h ein (so
genanntes Clipping).
resetClip ();
2.1
Beendet das durch setClip eingeleitete Clipping.
autoPaint (true);
autoPaint (false);
und
paint ();
Standardmäßig werden alle Grafikbefehle sofort im Grafik-Display angezeigt. Mit autoPaint (false) wird diese Automatik abgeschaltet. In diesem
Fall muss durch Aufruf der Funktion paint () explizit die Anzeige
aufgefrischt werden. Mit autoPaint (true) wird die Automatik wieder
eingeschaltet.
getMouseClick (x, y);
Wartet, bis mit der Maus auf die Zeichenfläche geklickt wurde. Dabei
besteht ein „Klick“ aus dem Drücken und Loslassen einer Maustaste. Die
Position des Mausklicks wird in den Variablen x und y abgespeichert.
getMousePress (x, y);
Ähnlich wie getMouseClick, reagiert aber schon auf das Drücken (ohne
Loslassen) einer Maustaste.
getMouseRelease (x, y);
Ähnlich wie getMouseClick, wartet aber auf das Loslassen der Maustaste.
mouseClicked ()
mousePressed ()
mouseReleased ()
2.1
Mit diesen Funktionen kann man feststellen, ob auf die Zeichenfläche
geklickt / eine Maustaste gedrückt / losgelassen wurde. Die Funktionen
geben dazu true oder false zurück.
getKey ()
2.1
Wartet, bis eine Taste auf der Tastatur gedrückt wurde und liefert dann
den ASCII-Code des entsprechenden Zeichens als int-Wert zurück. Damit
dies funktioniert, muss der Fokus auf dem Grafik-Fenster liegen.
keyPressed ()
2.1
Mit dieser Funktion kann man feststellen, ob eine Taste auf der Tastatur
gedrückt wurde. Falls ja, wird true, andernfalls false zurückgegeben.
Damit dies funktioniert, muss der Fokus auf dem Grafik-Fenster liegen.
Herunterladen