Z.u.L. > Dokumentation > Makros

Makros

Makros sind Abkürzungen von Konstruktionsschritten. Makros können wie kleine Unterprogramme angesehen werden, die sich an beliebiger Stelle aufrufen lassen. Man konstruiert gewissermaßen etwas vor, und das Programm lernt die Konstruktionsschritte im nachhinein, und kann sie an anderer Stelle wieder anwenden.

Außerdem lassen sich Makros in beschreibenden Konstruktionen definieren, die aus externen Dateien geladen werden. Die Syntax ähnelt dann der Syntax von Unterprogrammen in einer Programmiersprache.

Makros haben Parameter, die die Ausgangsobjekte bestimmen. So ist die Mittelsenkrechte zwischen zwei Punkten von den Punkten als Parameter abhängig. Sie können auch ausgezeichnete Zielobjekte haben, etwa die Gerade, die die Mittelsenkrechte ist. Bei der Definition wird dann geprüft, ob sich die Zielobjekte aus den Parametern konstruieren lassen, und es werden nur die notwendigen Konstruktionsschritte ins Makro übernommen. Außerdem können die Zwischenschritte automatisch versteckt werden.

Die Makrozeile

Makros können über eine optionale Zeile mit Icons, über das Makrowerkzeug, oder über ein Popupmenü aufgerufen werden. In die optionale Zeile mit Makros werden allerdings nur diejenigen Makros aufgenommen, die mit einem kurzen Text in Klammern enden. Der Text wird angezeigt, falls nicht ein Icon für das Makro erstellt wurde. Nähere Informationen finden Sie hier.

Default-Makros

Beim Start von Z.u.L. sucht das Programm nach der Datei ".de_default.mcr" und lädt alle Makros, die in dieser Datei enthalten sind. Diese Makros werden geschützt. D.h. sie werden nicht gelöscht, wenn eine neue Konstruktion geladen wird, und sie werden nicht mit Konstruktionen abgespeichert.

Die Default-Makros sind sozusagen Werkzeuge, die Bestandteil von Z.u.L. sind.

Definition von Makros

Um Makros zu definieren, benötigt man eine "Musterkonstruktion". Diese Konstruktion hat Objekte, auf denen sie aufbaut und die dann zu Parametern des Makros werden. Die Musterkonstruktion hat außerdem Zielobjekte, die das Makro konstruieren soll. Die Konstruktion der Mittelsenkrechten beginnt mit zwei Punkten und hat als Ziel die Mittelsenkrechte.

Als erstes setzt man die Parameter fest. Dies geschieht mit dem entsprechenden Menüpunkt, oder mit dem Werkzeug für neue Makros. Die Parameter werden wie üblich mit der Maus ausgewählt. Das Werkzeug nimmt währenddessen das Icon rechts an. Zum Zeichen, dass die Ausgangsobjekte einzugeben sind, sind die Punkte links vom Pfeil rot.

Dann drückt man das Werkzeug erneut, wonach es das Icon  annimmt. Nun kann man optional Zielobjekte auswählen. Beachten Sie, dass in diesem Zustand nur Objekte angezeigt werden, die aus den Parametern konstruierbar sind. Werden keine Ziele angegeben, so besteht das Makro aus allen konstruierbaren Objekten. Sonst besteht es nur aus denjenigen Objekten, die notwendig sind, um das Ziel aus den Parametern zu konstruieren.

Soll das Makro im beschreibenden Modus verwendet werden, so ist es ratsam, Zielobjekte anzugeben. Der Benutzer kann dann nämlich den Zielobjekten beim Makroaufruf Namen zuordnen. Außerdem können, wenn ein Ziel definiert wurde, alle Zwischenobjekte automatisch versteckt werden. Sonst werden nämlich alle Objekte angezeigt, die auch in der Definitionskonstruktion sichtbar waren.

Beim dritten Druck auf das Werkzeug (oder der Auswahl des entsprechenden Menüpunktes) wird das Makro nun erzeugt. Es hat stets einen Namen, der im folgenden Dialog festzulegen ist.

Makrodefinition

In diesem Dialog ist es möglich, einen beschreibenden Kommentar anzugeben. Der Kommentar kann vom Benutzer aus der Auswahlbox für Makros heraus angezeigt werden. Natürlich sollte sich der Kommentar auf die bei den Prompts verwendeten Bezeichnungen beziehen.

Die folgenden Eingabefelder (eines für jeden Parameter) nehmen Texte auf, die dem Benutzer des Makros angezeigt werden, wenn die Eingabe des Parameters erwartet wird.

Man kann Parameter auf bestimmte Objekte fixieren, indem man "=Name" als Prompt eingibt. Wenn ein Objekt "Name" existiert und den richtigen Typ hat, dann wird der Parameter beim Ablauf des Makros nicht abgefragt, sondern auf das Objekt gesetzt.

Weiter kann man festlegen, ob die Konstruktionsdetails beim Ablauf des Makros versteckt werden sollen, oder ob sie sogar vollständig versteckt werden sollen.

Versteckte Parameter

Damit auch Punkte als Parameter eingegeben werden können, die nur einer Orientierung des Makros dienen, ist es möglich, Punkte, die während des Ablaufs des Makros bei der Parameterauswahl neu erzeugt wurden, sofort wieder zu verstecken. Dazu muss bei der Definition des Makros der entsprechende Parameter versteckt sein. Ein Beispiel wäre etwa, ein gleichseitiges Dreieck auf einer Strecke zu errichten, wobei der Benutzer zusätzlich auf die Seite der Strecke klickt, wo das Dreieck erscheinen soll. In diesem Fall müsste das Vorzeichen einer der beiden 60-Grad-Winkel berechnet werden, wobei der dritte vom Benutzer eingegeben Punkt verwendet wird, also etwa in der Form "60*sign(180-a(A,B,P))".

Prompts

Schließlich ist es noch möglich, während des Aufrufs von Makros vom Benutzer einen Wert abzufragen. Dieser Wert kann als Größe eines Kreises mit festem Radius (also ohne Radiuspunkt), als Größe eines festen Winkels (also eines Winkels ohne dritten Schenkelpunkt) oder als Wert für einen Ausdruck verwendet werden. Dazu gibt man bei der Definition im obigen Dialog den Namen, den der feste Kreis oder Winkel in der Konstruktion hat, an. Es darf kein Parameter verwendet werden. Beim Aufruf wird eine Dialogbox erscheinen, in der der Benutzer einen Wert eingeben kann. Der Kreis, der Winkel oder der Ausdruck wird dann mit diesem Wert erzeugt. Der eingegebene Wert kann ein beliebiger arithmetischer Ausdruck sein. Als Eingabeprompt wird der Name des Objekts verwendet.

Es können auch mehrere Eingaben gefordert werden. Die Namen der entsprechenden Objekte werden durch Komma getrennt.

Die Eingabe eines beliebigen Ausdrucks ermöglich äußerst flexible Konstruktionen. Ein Beispiel wäre eine zentrische Streckung, wobei der Streckungsfaktor vom Benutzer erfragt wird. Negative Streckungsfaktoren lassen sich dann ebenfalls realisieren, indem man die Koordinaten des erzeugten Punktes einzeln berechnet.

Makroordner

Makros können in Unterverzeichnissen organisiert werden. Dadurch hat man keine so lange Makroliste im Programm. Dazu stellt man den Namen den gewünschten Verzeichnisnamen voran wie in "Unterordner/Makroname". Um ein Makro in einen Unterordner zu verschieben, muss man es also einfach umbenennen. Diese Unterordner haben also nichts mit Dateiordnern zu tun.

Laden und Speichern von Makros

Makros können separat geladen und gespeichert werden, oder zusammen mit der Konstruktion.

Wenn im Menü die Option "Mit Makros Speichern" aktiv ist, so werden alle gerade vorhandenen Makros mit den Konstruktionen abgespeichert. Wenn eine Konstruktion geladen wird, so werden stets alle Makros der Konstruktion geladen, wobei vor dem Überschreiben von schon vorhandenen Makros gefragt wird.

Außerdem lassen sich Makros auch separat in Dateien schreiben. Die beiden Dateiformate sind identisch. Allerdings enthalten reine Makrodateien keine Konstruktionen.

Beim HTML-Export ist zu beachten, dass der Benutzer die geladenen Makros nur benutzen kann, wenn er das Makrowerkzeug zur Verfügung hat. Er kann auch nur dann Makros selbst entwerfen, wenn er das entsprechende Werkzeug hat.

Makroaufruf

Makros werden mit dem Makrowerkzeug  gestartet. Das Makro muss aus der Liste der vorhanden Makros ausgewählt werden. Wird beim Starten des Werkzeugs die Strg-Taste gedrückt, so wird einfach das vorherige Makro nochmals gestartet. Außerdem können Makros mit der rechten Maustaste aufgerufen werden. Es erscheint ein Popup-Menü mit einer Liste der vorhandenen Makros.

Nach dem Start des Makros erscheint in der Statuszeile der festgelegte Text für jeden Parameter hinter dem Makronamen, dem Typ des Parameters und seiner Nummer. Der Benutzer muss auch tatsächlich einen Punkt auswählen, wenn ein Punkt als Parametertyp verlangt ist.

Falls in Klammern "Leertaste wählt ..." steht, so kann man für diesen Parameter mit der Leertaste denselben Punkt auswählen, wie bei dem letzten Makroaufruf. Dies vereinfacht den Ablauf von Makros mit vielen Parametern erheblich.

Zusätzlich besteht die Möglichkeit, eine Kopie des Makros zu erzeugen, bei der aber gewisse Parameter immer automatisch gewählt werden. Dazu drückt man die Umschalttaste während der Wahl eines Parameters. Nach dem Beenden der Parameterauswahl erzeugt das Programm ein weiteres Makro, bei dem die entsprechenden Parameter fest aus der Konstruktion entnommen werden. Hat man etwa eine affine Abbildung durch die Bilder dreier Punkte definiert, so braucht man diese sechs Punkte nicht immer wieder einzugeben, wenn man ein Makro mit festen Parametern erzeugt.

Werden solche Makros in Konstruktionen verwendet, in denen die entsprechenden Objekte nicht existieren, oder werden die Objekte gelöscht, so wird wieder zur Eingabe der nicht existierenden Parameter aufgefordert. Ihre Bindung wird sofort aufgelöst.

Wenn alle Parameter ausgewählt sind, so wird das Makro ausgeführt. Falls das Makro einen Werteparameter hat, so erscheint eine Dialogbox, die diesen Wert abfragt. Es kann dann jeder gültige arithmetische Ausdruck verwendet werden, insbesondere auch der Wert von konstruierten Objekten.

Makros sind normalerweise so eingestellt, dass Makroziele, die schon vorhanden waren, versteckt erzeugt werden. Dies kann aber bei der Definition der Makros abgestellt werden.

Makros Iterieren

Wenn ein Makro nur von einem Parameterpunkt abhängt und mindestens einen Punkt als Ziel hat, kann es iteriert angewendet werden. Dabei wird in jedem Schritt das produzierte Ziel als neuer Parameter genommen. Die Anzahl der Schritte kann beliebig angegeben werden (Vosicht!).

Statt eines Punktes kann ein beliebiges Parameterobjekt verwendet werden, wenn ein Zielobjekt erzeugt wird, dass damit kompatibel ist. Falls ein Makro von anderen Objekten abhängen muss, so muss man diese Parameter fixieren, indem man "=" vor den Prompt stellt.

Eine Anwendung von Iteration ist etwa die einfache Iteration, bei der jeder Punkt über Ausdrücke vom vorherigen Punkt abhängt. Man muss lediglich sicher stellen, dass andere Parameter fixiert sind. Um eine Funktionenschar zu erstellen, verwendet man Ausdrücke, die vom vorherigen Ausdruck abhängen und dessen Wert etwa um 1

Sekundäre Parameter

Im allgemeinen ist es am günstigsten, Punkte als Parameter auszuwählen. Allerdings sind auch Kreise und Geraden möglich. Bei Strecken, Geraden aus zwei Punkten (also nicht Parallelen, festen Winkeln und Senkrechten) werden die Endpunkte der Strecke zu sekundären Parametern, wenn sie zur Konstruktion der Zielobjekte notwendig sind. Falls dies der Fall ist, muss der Benutzer dann auch beim Makroaufruf ein Objekt gleichen Typs wählen. Falls die Gerade ohne ihre Definitionspunkte verwendet wird, so kann er beliebige Geraden wählen. Bei Kreisen wird immer der Mittelpunkt sekundärer Parameter.

Sekundärparameter werden natürlich dann auch beim Lauf des Makros zugeordnet. Es ist dabei wichtig zu beachten, dass die Sekundärparameter in der gleichen Konfiguration vorliegen müssen, wenn das Makro aufgerufen wird. So müssen etwa konzentrische Kreise als Parameter wieder konzentrisch sein. Falls die Strecken AB und BC als Parameter verwendet werden, müssen beim Aufruf Strecken EF und FG angeben werden.

Als Beispiel kann man eine Mittelsenkrechte in Abhängigkeit von einer Strecke durch ein Makro konstruieren lassen.

Selbstreferenzen in Objekten

Wie schon im Abschnitt über die Objekte von Z.u.L. dargestellt, kann es nützlich sein, Objekte zu erzeugen, die von sich selbst abhängen. Ein Beispiel ist ein Punkt, der nur auf ganzzahligen Koordinaten läuft oder in einem Kreis beschränkt bleibt. Solche Selbstreferenzen sind kein Problem für Zielobjekte. Aber für Parameter ausgewählte Punkte werden normalerweise nicht verändert. Wenn allerdings zur Definitionszeit ein solcher Parameter mit der Umschalttaste ausgewählt wird, so wird er mit der Selbstreferenz ins Makro übernommen, und er ändert dann auch den zur Laufzeit ausgewählten Parameter.

Ausdrücke in Makros

Arithmetische Ausdrücke werden bei Makros korrekt übersetzt. Wenn etwa ein Ausdruck auf den Wert eines Makro-Parameters zugreift, so wird stattdessen das für diesen Parameter übergebene Objekt verwendet. Das führt zu sehr trickreichen "Konstruktionen", die allerdings auch sehr undurchschaubar sind.

Z.u.L. > Dokumentation > Makros