Hinweise und Beispiele zur Makroprogrammierung

Die verfügbaren Makrokommandos

Wenn Sie sich einen Überblick über die Makrokommandos verschaffen wollen, erzeugen Sie sich unter dem Kommando Makrodatei >> Dokumentieren im Parameter-Menü eine Liste der aktuell verfügbaren Makrokommandos. Zusammen mit den von uns mitgelieferten Beispieldateien geograf.mde und menue.mde haben Sie die ideale Grundlage, um Ihre eigenen Makros oder Stapeldateien zu programmieren. Mit F12 bekommen Sie ebenfalls alle zur Verfügung stehenden Kommandos am Bildschirm aufgelistet. Durch Eingabe eines Kommandoteils (z.B. Lin), können Sie sich alle Kommandos in einer Auswahlliste anzeigen lassen, die den Text 'Lin' enthalten. Durch Auswahl eines Kommandos können Sie die Funktionsweise überprüfen.

Häufige Fehlerquellen

1. Befehlsabfolge

Bei der Makroprogrammierung ist eine feste Befehlsfolge einzuhalten. Die Folgende bildet eine “Einheit”:

CMD ”CMD-Befehl” RET

Beispiele: ALT-p=CMD ”SetEbene” RET ”1503.1” RET CMD ”SetDotArt” RET ”1503.233” RET

GM0="Linienart" { CMD "SetLinArt" RET "." RET } LF \

Die Groß- und Kleinschreibung im CMD-Befehl dient nur der Übersicht und ist nicht von Bedeutung. Die Ausdrücke CMD und RET müssen jedoch groß geschrieben werden.

Alternativ kann ab Version 4.0c die verkürzte Syntax CMDBefehl verwendet werden.

Beispiele: ALT-p=CMDSetEbene "1503.1" RET CMDSetDotArt "1503.233" RET

GM0="Linienart" { CMDSetLinArt "." RET } LF \

2. Befehlsabfolge mit Funktionstasten

A) Für einige Kommandos innerhalb eines Werkzeuges existieren nicht unbedingt Namen. Hier wird, wie in früheren Versionen, mit den Funktionstasten F1 bis F9 gearbeitet. Dabei steht F1 für das erste Werkzeug von links, F2 für das zweite u.s.w.. Da Makros mit Funktionstasten vom Kontext abhängig sind, in dem sie aufgerufen wurden, müssen diese Befehlszeilen stets mit einem CMD-Kommando vorweg starten.

Beispiel: CMD "SchraffFlaeche" RET F2 "3,5" RET F4 "1" RET  ruft das Erzeugen eine Normalschraffur über einer Fläche mit Linienabstand 3,5 auf.

B) Einträge in Aufklapplisten und Auswahlfenstern lassen sich im Makro über F<n> "<option>" RET wählen, wobei <n> für das n-te Kommando von links und <option> für den Eintragstext der gewünschten Option in der Auswahlliste steht. Dieses Kommando gilt ebenso für die sogenannten "Rundumschalter" für Einstellungen in GEOgraf, von denen stets der Eintrag vor der Klammer gültig ist (z. B. '2D(3D)' oder 'Teilen ja (nein)' ).

Beispiele:

C) Auswahldialoge, in denen mehrere Optionen angehakt werden können, sind auch per Makro ansteuerbar durch F<n> "001011..." RET, wobei jede 0 oder 1 eine Zeile des Dialogs setzt.

3. Die Kommandos RET und ESC

Jedes Makrokommando wird mit einem ‘RET‘ beendet. Zum Teil wird mehr als ein ‘RET‘ verlangt. Das ist im Einzelfall in GEOgraf “per Hand” nachzuvollziehen.

Beispiel:

ALT-l=CMD "PrnDatei" RET RET "ü" RET CMD "PrnSeitenNr" RET "1" RET

Soll ein Werkzeug nach seiner Ausführung per Makro (in Kombination mit F10) gleich wieder verlassen werden, so kann ein ESC am Ende programmiert werden.

4. Definition der Grafikmenüs und Tastaturkommandos

Tastatur- oder Menüdefinitionen (z.B.: GM22 oder Alt-p) dürfen keine Leerzeichen enthalten.

Falsch: GM 22 oder ALT -p  Richtig: GM22 oder ALT-p

Eine Makrodefinition darf nicht mit einer Leerzeile beginnen.

Falsch: GM0=   

                       "Rechnen" { CMD "RechnenFlaechen" RET GM2 } LF \ 

Richtig: GM0="Rechnen" { CMD "RechnenFlaechen" RET GM2 } LF \

Innerhalb der Makrokommandos sind Leerzeichen nötig. Hier sind auch mehrere Leerzeichen hintereinander zulässig, um beispielsweise die Makrodatei übersichtlicher zu gestalten. Definitionen von Grafikmenüs dürfen keine TABs enthalten. Verwenden Sie Leerzeichen stattdessen.

6. Die Kommandos ‘LF \‘ ,‘ | ‘ und ‘LF‘

Diese Kommandos formatieren das Grafikmenü. ‘LF \‘ bildet die waagrechte Trennlinie zum nächsten Kommandofeld und muss am Ende einer Zeile stehen. 'LF' bildet den Abschluss eines Grafikmenüs. ‘ | ‘ ist die senkrechte Begrenzungslinie für Menüfelder, die statt untereinander, nebeneinander liegen sollen. Beide Menüfelder müssen in einer Zeile stehend definiert sein. Vor jedem ‘LF‘ muss eine Kommandofolge in Klammern {  } stehen.

Beispiel:

GM11="Konstruktion" { CMD "PunkteOrtho" RET ...} LF \

"Rechnen" { CMD "...   } | "Beschriften" { CMD "...   } LF \

"Ende" { GM0 } LF

7. Das Kommando 'ALT-LF \' für mehrzeilige Menüs

Der Menüeintrag wird durch das Kommando ALT-LF \ am Ende um eine Zeile vergrößert. In einem Zeilenset, das mit ALT-LF verbunden ist, darf nur eine Kommandoklammer stehen, wobei dies wahlweise die erste oder zweite Zeile sein darf.

Beispiel:

GM0="1. Zeile Beschrift" { CMD "BeschriftDot" RET GM1 }     ALT-LF \

          "2. Zeile Beschrift"              LF \

          "erste Zeile Spline"     ALT-LF \

          "zweite Zeile Spline"  { CMD "SplineGen" RET GM2 }     LF \

8. Verzweigung von Grafikmakros

GM0

GM1

 

 

Verzweigung vom Makro Konstruktion in GM0 zu GM1.

GM0="Konstruktion" { GM1 } LF \

9. HardZoom-Kommandos

HardZoom-Kommandos wechseln den Ausschnitt der Grafik (Blatt, Plotbox, ...). Ein Makro, welches ein HardZoom-Kommando enthält, muss mit diesem enden. Darauf folgende Kommandos können aufgrund des Multithreadings nicht mehr ausgeführt werden.

Beispiel:

GM9= "Blattwechsel" { CMD "HardZoomBlatt" RET "Geograf" RET } LF \

Daher funktioniert auch der Befehl END nach einem Mako, welches einen Ausschnitts-Wechsel auslöste, nicht mehr. Hier muss das gewünschte GMxxx explizit programmiert werden.

10. Massenbearbeitung über Makros

Eine Massenbearbeitung kann auch in Makros programmiert werden. Dazu gibt es einige Regeln, welche Sie unbedingt beachten sollten. Der Ablauf der Programmierung muss grundsätzlich folgendermaßen sein:

  1. CMD-Kommando F10Stop
  2. GEOgraf-Einstellungen und Werkzeugaufruf über CMD- Befehle  
  3. Definition der Masse

Beispiel: Massenhaftes Erzeugen von Schraffuren über Objekte

CMDF10Stop   CMDSetEbene "11" RET  CMDSetLinArt "2013" RET   CMDSchraffObjekte  F2 "2" RET  F3 "100" RET  F4 "Normal" RET   CMDF10ArtenEbenen "1001" RET "11,81" RET CMDF10SelectAlles CMDF10SelectStart

Per Makro wird F10 nur über Kommandos aus dem 2. Abschnitt vollständig gewählt. Daher muss nach einer Auswahl über den 3. Abschnitt ("F10ArtenEbenen") noch ein "F10SelectAlles" ergänzt werden. Ausgelöst wird die Massenbearbeitung über ein CMDF10SelectStart am Ende.

11. Subroutinen in der GEOgraf Makroprogrammierung

Um bei der Programmierung von GEOgraf-Makros mehr Übersicht zu erhalten, können auch Subroutinen verwendet werden. Auch mehrere Subroutinen nacheinander können mit einem Makrobefehl aufgerufen werden. So verhindern Subroutinen, dass die Makrodefinitionszeilen unübersichtlich lang werden.  

Die Syntax für Subroutinen lautet:

M<nr>=<Makrobefehl>

mit <nr> = Nummer der Subroutine, Zahl ab 1000

und <Makrobefehl> = Sequenz von Makrobefehlen, die ausgeführt werden sollen.   

 

Die Aufruf-Syntax lautet dann beispielsweise:

ALT-c=M1001 M1010

 

oder als Grafikmakro

"Kommandofeld-Name" { M1005 }

 

Beispiele:

* M1001 = Funktion F10 abschalten zwischen den Makros

M1001=CMD "F10Stop" RET

* M1002 = Funktion "Texte löschen" per Masse

M1002=CMD "TxtDelete" RET CMD "F10SelectAlles" RET "j"

* M1003 = Funktion "Schraffen löschen" per Masse

M1003=CMD "SchraffDelete" RET CMD "F10SelectAlles" RET "j"

....

ALT-d=M1001 M1002 M1001 M1003

  

* M1004 = Funktion "PNR AN"

M1004=F9 F9 F9 F9 F3 "3" RET "5" RET ESC

* M1005 = Funktion "PNR AUS"

M1005=F9 F9 F9 F9 F3 "0" RET ESC

....

GM0="- HAUPTMENÜ -" { } LF \

....

"PNR AN" { M1004 } | \

"PNR AUS" { M1005 } LF

 

12. Ansicht-Menü per Makro steuern

Für alle Optionen und Zusatzfenster, welche sich per Mausklick an und aus schalten lassen, ist eine Makrosteuerung implementiert. Dies gilt im Wesentlichen für die Einträge im Ansicht-Menü, welche ein Häkchen davor haben, wenn sie angeschaltet sind, und keines nach Abschaltung.

Das Makro-Kommando lautet:

CMD "SetView" RET

Nachfolgend wird der Text des Kommandos geschrieben, welches gesteuert werden soll, und =1 für das Anschalten oder =0 für das Abschalten angehängt.

Beispiele:

CMD "SetView" RET "Plotansicht=1" RET

CMD "SetView" RET "Ebenenmanager=0" RET

CMD "SetView" RET "Plotboxen=0" RET

CMD "SetView" RET "Plotansicht=0, Punktnummern=1" RET

Die Kommandotexte müssen genau so geschrieben werden, wie sie im Menü stehen. Nur die Groß-/Klein-Schreibung ist beliebig. Wird ein Kommandotext ohne =1 bzw. =0 angegeben, so schaltet der aktuelle Zustand dieser Ansicht um.

13. Menü-Kommandos per Makro starten

Alle Kommandos in den Menüs von GEOgraf können per Makro aufgerufen werden, wozu der Befehl

CMDStartTool

zur Verfügung steht. Mit geöffnetem Dialog endet das Makro.

Das gewünschte Kommando wird als Text angegeben, genau so, wie der Text im GEOgraf erscheint. Das Trennzeichen zwischen den einzelnen Texten im Menübaum ist der senkrechte Strich |.

Beispiele:

CMDStartTool "Werkzeuge|Punkte|Ändern|Datum" RET

CMDStartTool "Datei|Drucken" RET

CMDStartTool "Export|ALK.EDBS|Grundriss" RET

Wenn der Text im Menübaum eindeutig ist, kann eine verkürzte Eingabe erfolgen.

CMDStartTool "Wer|Pu|Änd|Dat" RET

CMDStartTool "Da|Drucken" RET

CMDStartTool "Ex|ALK.ED|Gru" RET

Bedenken Sie dabei jedoch die Lesbarkeit und Pflege Ihrer Makrodateien!

14. Drucken per Makro

Das Drucken einer Plotbox mit einem anzugebenden Blatt kann auch per Makro erfolgen, obwohl die Plotboxauswahl ein Dialog ist.

CMDPlotboxDrucken "Box10" RET "Blatt7" RET

 

15. Absteckskizze per Makro steuern

Normalerweise enden GEOgraf-Makros, wenn ein Dialog geöffnet wird. Aber für den Dialog Bemaßungsparameter der Absteckskizze ist eine Ansteuerung per Makro möglich.

Zunächst erfolgt der Aufruf des Werkzeugs mit

CMD "BemassOrtho" RET

Zur Eingabe der Parameter wird dahinter ein F4 und in Anführungszeichen jeweils ein Attributname und der gewünschte Wert geschrieben und mit RET abgeschlossen.

F4 "Punktart=1" RET

F4 "Linienart.Ordinate=1" RET

F4 "Anlegemaß.Textart=20" RET

F4 "Endmaß.Format=&(*.###)" RET

F4 "Abszisse.Rahmen=2" RET

Als Attributname wird genau der Text angegeben, der auch im Dialog für diesen Parameter steht. Bei den Parametern aus den vier Registern wird der Registername mit einem Punkt getrennt vorangestellt.

Die Eingabe kann jedoch verkürzt werden, da jeweils die ersten 2 Buchstaben ausreichen.

F4 "Pu=1" RET

F4 "Li.Or=1" RET

F4 "An.Te=20" RET

F4 "En.Fo=&(*.###)" RET

F4 "Ab.Ra=2" RET

Attribute, die nicht im Makro erwähnt werden, bleiben unverändert.

Wird von einem zweiteiligen Attributnamen nur ein Teil angegeben, so steuert dieses Makro alle Felder mit diesem Namen. So kann durch ein Kommando das Textformat, also die Anzahl der Nachkommastellen in allen vier Registern umgestellt werden. Auch der Rahmen oder die Textart von Anlegemaß, Endmaß, Ordinate und Abszisse kann mit einem einzigen Makrokommando einheitlich gesetzt werden.

F4 "Format=&(*.#)" RET

F4 "Format=&(*,##)" RET

F4 "Format=&(*.###)" RET

F4 "Rahmen=5" RET

F4 "Textart=20" RET

Der gewünschte Rahmen wird als Nummer angegeben. Diese entspricht seiner Position in der Auswahlliste der Textrahmen im Dialog. Beispielsweise stellt Rahmen=5 den fünften Rahmen aus dieser Liste "eng, doppelt unterstrichen" ein.

16. Maßkette per Makro steuern

Normalerweise enden GEOgraf-Makros, wenn ein Dialog geöffnet wird. Aber für den Dialog Maßkettenparameter der Maßkette ist eine Ansteuerung per Makro möglich. Das funktioniert analog zum Werkzeug Absteckskizze .

Zunächst erfolgt der Aufruf des Werkzeugs mit

CMDBemassKette bzw. CMDDimensionChain

Zur Eingabe der Parameter wird dahinter ein F5 und in Anführungszeichen jeweils ein Attributname und der gewünschte Wert geschrieben und mit RET abgeschlossen.

F5 "Punktart=1" RET

F5 "Linienart=1" RET

F5 "Textart=20" RET

F5 "Minimale Streckenlänge(m)=1" RET

F5 "Format=&(*.###)" RET

Als Attributname wird genau der Text angegeben, der auch im Dialog für diesen Parameter steht. Das Attribut Format steht erst ab Version 10.2 zur Verfügung.

17. Fangparameter per Makro steuern

Normalerweise enden GEOgraf-Makros, wenn ein Dialog geöffnet wird. Aber für den Dialog Fangparameter ist eine Ansteuerung per Makro möglich. Die einzelnen Kontrollkästchen werden dabei durch 0 bzw. 1 aus- bzw. angeschaltet. Gezählt werden die 14 Zeilen unter "Alle".

alles an:

CmdSnapParameter "11111111111111" RET

 

Alles aus:

CmdSnapParameter "00000000000000" RET

 

Gemischt:

CmdSnapParameter "11001101101110" RET

 

Fehlermeldungen

Beim Interpretieren der *.mde-Datei werden von GEOgraf bei Programmierfehlern meistens Fehlermeldungen ausgegeben.

Unbekannte Anweisung

Diese Fehlermeldung gibt einen Hinweis auf die Zeile, in der vermutlich ein Fehler steckt. Gleichzeitig zeigt die Meldung an, welches Zeichen bei der Interpretation Schwierigkeiten macht.

Taste schon belegt

Diese Fehlermeldung gibt an, dass eine Tastenkombination mehrfach mit Makrokommandos definiert wurde. Sie gibt einen Hinweis auf die Zeile, in der vermutlich ein Fehler steckt.

Keine Fehlermeldung, Grafikmenü unvollständig

GEOgraf gibt keine Fehlermeldung aus für fehlende Leerzeichen, RET, CMD oder Linefeed. Um diese Fehlerquellen schon bei der Programmierung auszuschließen, empfiehlt sich ein Editor, der Leerzeichen, TABs und Zeilenumbrüche anzeigt.