Name
CALL

Syntax
CALL makroname [zahl1, zahl2, ... zahln]
[Variante 1a] 
oder

CALL makroname [,] [zahl1, zahl2, ... zahln] [, RETURNED_PARAMETERS zurück1 [, zurück2, ... zurückn]]
[Variante 1b (ab ArchiCAD 10.0)] 
oder

CALL makroname PARAMETERS name1=wert1 [, name2=wert2, ... namen=wertn]
[Variante 2a (ab ArchiCAD 5.0)] 
oder

CALL makroname PARAMETERS ALL
[Variante 2b (ab ArchiCAD 8.0)] 
oder

CALL makroname [,] PARAMETERS [ALL] [name1=wert1 [, name2=wert2, ... namen=wertn]] [, RETURNED_PARAMETERS zurück1 [, zurück2, ... zurückn]]
[Variante 2c (ab ArchiCAD 10.0)] 
oder

CALL makroname [,] PARAMETERS [wert1 [, DEFAULT, wert2, ... wertn]] [, RETURNED_PARAMETERS zurück1 [, zurück2, ... zurückn]]
[Variante 2d (ab ArchiCAD 10.0)] 

Aufklappen Wertebereiche
makroname, Typ string, (maximal 31 Zeichen)
namei = Gültiger Parametername in der Parameterliste des Makros
werti = Zulässiger Wert, abhängig vom Parametertyp
zahli = Typ real
zurücki = Variablennamen im Hauptobjekt

Aufklappen Erläuterung
Ruft ein in den aktiven Bibliotheken enthaltenes Makro mit dem Namen makroname auf. Der Name kann als konstanter Text oder in einer Variable angegeben werden. Die Dateinamenserweiterung (z.B. .GSM) muss nicht angegeben werden.
Zur Steuerung der Darstellung im Makroskript können Werte an das aufgerufene Objekt übergeben werden.

Ein Makro kann beliebig oft innerhalb eines Skriptes aufgerufen werden.

Das Koordinatensystem ist für das aufgerufene Objekt dann an der Position und Verformung, wie es sich zum Zeitpunkt des Aufrufs im Hauptobjekt eingestellt ist. Das Makroskript wird in einer "eigenen Umgebung" mit eigenen Attributeinstellungen zu Stiften, Linientypen etc. ausgeführt. Änderungen von Attributeinstellungen haben keine Auswirkung auf das aufrufende Objekt. Alle Variablen des aufgerufenen Objektes werden bei jedem Aufruf erneut auf 0, bzw. "" (Leerstring) oder auf den Standardwert ihrer (eigenen) Parameterliste zurückgesetzt, sofern vom Hauptobjekt keine Werte vorgegeben werden.

Es sind grundsätzlich zwei Arten von Makroaufrufen möglich:

[1a] Makros mit der Endung GDL (z.B. door_panel_A.gdl) enthalten reinen Skripttext ohne Parameterliste. Um diesen Makros Werte zu übergeben, kann nach dem makroname eine Liste von max. 26 Zahlenwerten (zahli) angefügt werden (Erste Syntaxform). Sie stehen dann im Makro in den Variablen A,B,C,... nach der Reihenfolge ihrer Auflistung zur Verfügung. Texte und Arrays können so nicht übergeben werden. Eine dezidierte Zuweisung eines Wertes an einen bestimmten Variablennamen ist nicht möglich, einzig die Reihenfolge entscheidet.

[2a] Das Makro verfügt über eine eigene Parameterliste. Siehe Hintergrund. Dadurch kann vor der Abarbeitung des Makroskriptes Variablen ein gezielter Werte in der Form namei = werti nach dem Schlüsselwort PARAMETERS zugewiesen werden (Zweite Syntaxform). Werden nicht allen Parametern der Liste Werte übergeben, werden die in dem Makro gespeicherten Werte zur Initialisierung der Variablentabelle übernommen.

[2b] Sind im aufrufenden Objekt alle zu übergebenden Variablen exakt wie in der Parameterliste des Makros benannt und sollen auch alle Werte übergeben werden, so kann statt einer vollständigen Zuweisungsliste nur das Schlüsselwort ALL verwendet werden (Dritte Syntaxform). Dann sucht ArchiCAD selbstständig nach übereinstimmenden Variablen-/ Parameternamen und übergibt deren Werte an das Makro. Im aufrufenden Objekt nicht definierte Variablen werden im Makro auf den im Makroobjekt gespeicherten Standardwert gesetzt.

[2d] Ab ArchiCAD 10 kann die Werteübergabe dadurch beschleunigt werden, dass man in der Syntax dem Interprter die Suche und Zuordnung der Werte zu den Variablennamen abnimmt. Dazu werden alle zu übergebenden Werte (werti) wie beim einfach GDL-Typ nacheinander aufgelistet und im Makro dann den Parametern der Parameterliste in der Reihenfolge ihrer Auflistung zugewiesen. Der Wertetyp muss dabei dem Parametertyp der Liste entsprechen. Die maximale Anzahl an Werten entspricht der Länge der Parameterliste im Makro. Sind weniger Werte gelistet als Parameter vorhanden, werden die im Makroobjekt gespeicherten Standardwerte verwendet. Außerdem kann statt (!) eines konkreten Wertes (werti) auch das Schlüsselwort DEFAULT angegeben werden, das für den nach der Parameterliste zuzuordnenden Parameter mit seinem im Makroobjekt gespeicherten Standardwert versieht. Dem Weglassen von Werten am Ende der Werteliste ist die Angabe von DEFAULT somit gleichwertig.

[1b]/[2c] Ab ArchiCAD 10 wird ein Mechanismus eingeführt, der die Datenübergabe zwischen Makro und Hauptobjekt ermöglicht. Dazu wird dem END-Befehl (im Makroobjekt) nach dem Schlüsselwort RETURNED_PARAMETERS eine Liste von Ausdrücken (feste oder berechnete Werte oder Variablen) angehängt. Diese Werte werden (in der Reihenfolge ihrer Auflistung im Makro) der Liste von Variablen (zurücki) zugewiesen, die im aufrufenden Hauptobjekt wiederum im CALL -Befehl nach dem Schlüsselwort RETURNED_PARAMETERS aufgeführt sind. Diese Funktionalität stellt die Umkehrung der Datenübergabe an das Makro mit PARAMETERS dar.
Die Verwendung ist in beiden Arten von Makros (.GDL und .GSM) möglich.

Je nach Makroobjekt werden nicht alle dort enthaltenen, sondern nur die dem Kontext entsprechenden Skripte abgearbeitet. Wird also aus dem Parameterskript des Hauptobjektes heraus ein Makro aufgerufen wird auch nur das Master- und das Parameterskript des Makros ausgeführt.

Aufklappen Beispiel
Beispiel:
! Hauptobjekt
!
! Parameterliste:
! "bein", Typ Länge
! "dick", Typ Länge
! "zzyzx", Typ Länge

! Tischbeine
CALL "selfgdl_CALLed-1.ism" PARAMETERS A=bein, B=zzyzx-dick, sockel=bein
ADDx A-bein
CALL "selfgdl_CALLed-1" PARAMETERS A=bein, B=zzyzx-dick, sockel=bein
ADDy B-bein
CALL "selfgdl_CALLed-2.gdl" bein, zzyzx-dick
ADDx -(A-bein)
CALL "selfgdl_CALLed-2" bein, zzyzx-dick
DEL 3

! Tischplatte
ADDz zzyzx-dick
BLOCK A,B,dick
DEL 1

Im Hauptobjekt werden die Transformationen zu den Tischbeinen vorgenommen und die Tischplatte ausgegeben.

! Makro "selfgdl_CALLed-1.ism"
!
! Parameterliste:
! "sockel", Typ Länge
! "kapitell", Typ Länge

BLOCK A,A,sockel

ADD A/2,A/2,sockel
CYLIND B-sockel-kapitell,A/2
DEL 1

ADDZ B-kapitell
BLOCK A,A,kapitell
DEL 1

1. Makro für Tischbeine. Objekt mit Parameterliste. Für ArchiCAD 7 wird die Endung ISM verwendet. Ab ArchiCAD 8 muss dies GSM sein. Im Hauptobjekt ist das ggf. anzupassen.

! Makro "selfgdl_CALLed-2.gdl"
! Reiner GDL-Text

ADD a/2,a/2,a/2
SPHERE a/2
DEL 1

ADDz a
BLOCK a,a,b-a
DEL 1

2. Makro für Tischbeine. Reiner GDL-Skripttext.

Aufklappen Beispiel Erläuterung
Bis ArchiCAD 7 können Objekte an ihrer Dateinamenserweiterung unterschieden werden:

*.gsm: Allgemeines Objekt
*.win: Fenster
*.dor: Tür
*.lmp: Leuchte
*.esm: Treppe
*.lbl: Etikett
*.rsm: Raumstempel
*.ism: Makro
*.gdl: Reiner GDL-Text

Objekte des Typs *.ism und *.gdl tauchen in keinem Werkzeug als platzierbar auf, können also nur als Makros verwendet werden.

Ab ArchiCAD 8 ist dies durch die Subtyp-Option überarbeitet worden: Alle Typen haben die Endung GSM. Ihre Art wird intern mit dem Subtyp festgelegt. Alle Objekte enthalten ungeachtet ihres Types zusätzlich einen Schalter "platzierbar", der das Erscheinen im Auswahldialog des entsprechenden Werkzeugs regelt.

Prinzipiell ist in allen Versionen möglich alle Objekte, ob Makro oder "normales" Objekt, ob platzierbar oder nicht als Makro zu verwenden.

Die ursprüngliche Form des Makros in *.GDL, der reine GDL-Skripte ohne Zusätze wie Parameterliste oder kontextabhängige Skripte, wird aus Kompatibilitätsgründen zwar noch unterstützt und kann auch noch in aktuellen ArchiCADs editiert, aber nicht neu erstellt werden.

Aufklappen Besonderheiten
Findet der GDL-Interpreter bei der Ausführung im Skript einen Ausdruck, der kein Befehlswort ist, versucht er ein so benanntes Makro aufzurufen. Das Befehlswort CALL kann also eigentlich entfallen. Zur besseren Lesbarkeit und um etwaige Fehlinterpretationen zu vermeiden empfehlen wir aber dringend dessen Verwendung.

Beim Erstellen eines Projektarchives werden alle enthaltenen Objekte in die PLA-Datei integriert. Optional können auch nur die verwendeten Objekte eingebunden werden. Verwenden die Objekte Makros, so werden nur diejenigen Makroobjekte berücksichtigt, die im Klartext benannt sind. Macroaufrufe, bei denen der Dateiname in einer Variablen übergeben wird, werden ignoriert. Das Archiv ist nicht vollständig. Ab ArchiCAD 9 kann dies mit dem Befehl FILE_DEPENDENCE kompensiert werden. Bis ArchiCAD 8.1 kann man sich so behelfen, dass nach dem END-Befehl in einem beliebigen Skript eine Liste von allen möglichen Makroaufrufen im Klartext erfolgt, die aber nicht abgearbeitet werden.

Das optionale Komma (,) nach makroname wurde mit ArchiCAD 10 eingeführt und war zuvor nicht erlaubt. Ohne dieses Komma ist es nicht möglich die Parameterliste in einer neuen Programmzeile beginnen zu lassen. Diese Quellcodelayout-unterstützende Option sollte ab ArchiCAD 10 verwendet werden. Keinesfalls darf es jedoch auftreten, wenn man ein ".gdl" Makro aufruft.

Makros können nur eindimensionale Arrays zurückgeben. Wenn ein zweidimensionales Array in einem END-Befehl verwendet wird, so wird seine Struktur in ein eindimensionales Array umgewandelt. Sollte man auf die Zweidimensionalität angewiesen sein, muss in einer Schleife im aufrufenden Objekt die ursprüngliche Struktur wiederhergestellt werden.

Aufklappen Tipps und Tricks
Es ist möglich ein Makro auch ohne Parameter aufzurufen und dennoch ein Rückgabeergebnis zu erhalten. Dabei wird das "parameters" Befehlswort zwar verwendet, aber ohne jegliche zu übergebende Parameter:
call "mein_macro" parameters returned_parameters paramname

Bis Archicad 9 war es nicht möglich einen Ergebnis- oder Rückgabewert zu festzulegen. Allerdings wird am Ende der Ausführung eines Makros der Speicher des Puffers nicht gelöscht, so dass über diesen numerische Ergebnisse übergeben werden können. Dies funktioniert neben der Übergabe von Werten in der Parameterliste des CALL-Befehls natürlich auch zum Makro hin beim Makroaufruf. Die im Hauptobjekt im Pufferspeicher abgelegten Werte sind dann im Makro auslesbar. Im Umkehrschluss bedeutet das, dass in Makros die Verwendung von get(nsp) tunlichst unterlassen werden sollte.

Außerdem hat der eigenständige PARAMETERS-Befehl auch Auswirkung auf das aufrufende Objekt, wenn in diesem ein identisch deklarierter Parameter in der Parameterliste vorliegt. Voraussetzung ist für diese Übergabe von Werten natürlich, dass der PARAMETERS-Befehl auch in dem verwendeten Kontext ausführbar ist, was die Benutzung aber doch sehr einschränkt.
In diesem Zusammenhang sei auch darauf verwiesen, dass dazu analog im Makro erzeugte bewegliche Fangpunkte (bei identischem Vorliegen der Parameter in der Parameterliste des aufrufenden und des aufgerufenen Objektes) den Parameter im aufrufenden Objekt ebenfalls ändern. Siehe Links.

Im aufrufenden Objekt definierte Schriften (siehe DEFINE STYLE beiben auch innnerhalb des Makros definiert, müssen also nicht noch einmal angelegt werden.
Globale Parameter, denen im Hauptobjekt ein neuer Wert zugewiesen wurde, erhalten ihren Inhalt auch innnerhalb des Makros.