Name: Einführung in Context Free Art

Im ersten Teil möchte ich euch mit dem netten Programm [b]Context Free Art[/b] vertraut machen, das ihr vielleicht irgendwann mal gebrauchen könnt. Gerade wenn es darum geht, geometrische Muster oder Ornamente zu erstellen kann man einiges aus dem Programm rausholen. Das Programm ist Freeware und man kann es unter anderem hier runterladen: http://www.contextfreeart.org/

Schritt 1

Auf der linken Seite sehen wir das Code-fenster. Da werden wir später die Zeilen schreiben, aus denen dann unser Bild zusammengestellt wird.
Das rechte, große Fenster ist das Ausgabefenster. Sobald wir unseren Code „rendern“ (der Knopf oben links) wird das Ergebnis im Ausgabefenster angezeigt. der „Save Image“ button sollte selbsterklärend sein.
Rechts neben den beiden Knöpfen hab ich die Zeile gelb markiert. Auf diese Zeile solltet ihr ein Auge haben wenn ihr rendert, denn dort werden eventuelle Fehlermeldungen angezeigt.
Ganz rechts gibt es unter anderem noch einen Color Calculator, mit dem wir uns aber erst später beschäftigen, wenn es bunt wird. 😉

Schritt 2
[b]Der Codeaufbau und das Prinzip[/b]

Context Free arbeit nach einem eigentlich einfachen Prinzip, das man aber erstmal verstehen muss. Dazu nehm ich mal ein Beispiel und erkläre dann die einzelnen Punkte:

Der Code um dieses Bild zu erhalten, ist folgender:

startshape anfang

rule anfang {
CIRCLE{}
SQUARE{x 1}
TRIANGLE{x 2}
}

Erstellt ein neues Dolument und fügt diesen Code ein. Wenn ihr dann auf rendern klickt, seht ihr das oben gezeigte Bild.
Kommen wir zur Erklärung des Codes:
startshape anfang
Diese Zeile definiert die rule (=Regel), die beim ausführen des Codes als Einstieg gilt.
(Für die Programmierer unter euch: Man kann es sich z.b. wie ein [i]int main()[/i] vorstellen)
den Namen des startshapes kann man sich aussuchen. Ich habe einfach mal [b]anfang[/b] genommen, damit man sieht hier fangen wir an.

rule anfang { ... }
Bei Context Free gibt es [b]rule[/b]s (=Regeln) und [b]path[/b]s (=Pfade). Eine Regel ist so etwas wie eine Funktion, die man aufrufen kann. (Ein Pfad ist ein Pfad, aber dazu kommen wir später)
Da wir die rule [b]anfang[/b] als startshape definiert haben, brauchen wir unbedingt eine Regel mit diesem Namen.
Diese wird, wie bereits erwähnt, als erstes aufgerufen und aus ihr können wir weitere rules aufrufen.

CIRCLE{}
SQUARE{}
TRIANGLE{}

das sind die drei hauptobjekte, die man rendern kann. Das sind auch die Objekte, die wir auf dem Bild weiter oben sehen.
Jede dieser Regeln (ja, CIRCLE, SQUARE, etc sind ebenfalls „Regeln“) hat Eigenschaften, die man beim Aufruf beeinflussen kann.
Für den Anfang reicht es, wenn wir die folgenden Eigenschaften kennen:
x (relative X Position – links/rechts)
y (relative Y Position – oben/unten)
z (absolute Z Position – wird benutzt um zu bestimmen, welches Objekt über einem anderen liegen soll, falls diese sich überschneiden. Ein höherer Wert überlagert einen niedrigeren. Ohne Angabe hat jedes Objekt den Wert 0)
s (size = Größe)
r (rotation = Drehung)

wenn man eine rule aufruft, kann man ihr beim aufruf die Parameter übergeben, die benutzt werden sollen.
Das passiert in folgender Form:
[b]rulename {parameter1 #wert parameter2 #wert parameter… #wert}[/b]
ein konkretes beispiel wäre etwa sowas hier:
TRIANGLE{x 2 y -1 rotate 15 size 2.5}

damit erstellen wir ein Dreieck an Position x=2, y=-1, welches um 15° gegen den Uhrzeigersinn gedreht ist und eine größe von 2.5 hat.

Vielleicht fällt dem ein oder anderen ja jetzt schon auf, warum wir bei dem obigen Beispielcode SQUARE {x 1} und TRIANGLE {x 2} benutzen?
Genau, wenn wir die Positionierung der Objekte [u]nicht[/u] verändert hätten, würde unser Bild wie folgt aussehen:

Sieht irgendwie blöd aus, oder?
Wir ersetzen in unserem Code jetzt das [b]x[/b] in SQUARE und TRIANGLE durch ein [b]y[/b] und rendern das Bild nochmal.
Es fällt sofort auf, das die Objekte jetzt nicht mehr nebeneinander sondern untereinander sind.
Damit kommen wir auch direkt zu einer kurzen Erklärung des Koordinatensystems.

Schritt 2
Wieder hilft ein Screenshot bei der Erklärung:

Das Koordinatensystem kann man sich wie ein kariertes Blatt Papier vorstellen. Jede ganzahlige Position (x,y=-1000,-999,…,0,1,2,…,1000) ist ein Kästchen.
Die Ausgangsposition ist x 0 y 0.
Das bedeutet, wenn wir keine Koordinaten angeben, wird ein Objekt immer an der Position 0,0 gemalt.
Um ein Objekt (eine rule) zu verschieben, benutzen wir jetzt den x und/oder y parameter. (Hinweis: Wenn man z.b. nur den x parameter benutzt, wird die y position nicht verändert. Was gleichbedeutend mit y 0 ist)

Wenn ihr den folgenden Code in ein Context Free dokument kopiert, erhaltet er 10 Kugeln, die nebeneinander aufgereiht sind:

startshape anfang

rule anfang {
CIRCLE{x 1}
CIRCLE{x 2}
CIRCLE{x 3}
CIRCLE{x 4}
CIRCLE{x 5}
CIRCLE{x 6}
CIRCLE{x 7}
CIRCLE{x 8}
CIRCLE{x 9}
CIRCLE{x 10}
}

Ich hoffe ihr habt jetzt verstanden, wie das Koordinatensystem und der Aufruf von rules funktioniert. Spielt einfach ein bisschen mit den Parametern und schaut, was sich verändert.
Denn hier möchte ich den ersten Teil abschließen. Im nächsten Teil werden wir die rules genauer betrachten und endlich mal was konstruktives machen. 😉

zurück zu den Tutorials

Advertisements