coord-transf.2d elements3d elementsnon geo scriptsfunctionscontrol statem.attributesvariousaddons
flow controlloopsext. connection
PRINT OPEN INPUT OUTPUT CLOSE CALL FILE_DEPENDENCE
Name
CALL
Syntax
CALLmakroname [number1, number2, ... numbern]
[Variante 1a] 
oder

CALL makroname [,] [number1, number2, ... numbern] [, RETURNED_PARAMETERS return_name1 [, return_name2, ... return_namen]]
[Variante 1b (since ArchiCAD 10.0)] 
oder

CALL makroname PARAMETERS name1=value1 [, name2=value2, ... namen=valuen]
[Variante 2a (since ArchiCAD 5.0)] 
oder

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

CALL makroname [,] PARAMETERS [ALL] [name1=value1 [, name2=value2, ... namen=valuen]] [, RETURNED_PARAMETERS return_name1 [, return_name2, ... return_namen]]
[Variante 2c (since ArchiCAD 10.0)] 
oder

CALL makroname [,] PARAMETERS [value1 [, DEFAULT, value2, ... valuen]] [, RETURNED_PARAMETERS return_name1 [, return_name2, ... return_namen]]
[Variante 2d (since ArchiCAD 10.0)] 
Aufklappen Range
makroname, Typ string, (maximal 31 Zeichen)
namei = Gültiger Parametername in der Parameterliste des Makros
valuei = Zulässiger Wert, abhängig vom Parametertyp
numberi = Typ real
return_namei = Variablennamen im Hauptobjekt
Aufklappen Description
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 (numberi) 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 = valuei 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 (valuei) 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 (valuei) 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 (return_namei) 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 Example
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 Specialities
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 since ArchiCAD 10 verwendet werden.
Aufklappen Background
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 Tips and Tricks
Wie in höheren Programmiersprachen bei der Deklaration von Methoden und Funktionen üblich ist es bei den Makroaufrufen in GDL bis ArchiCAD 9 nicht möglich einen Ergebnis- oder Rückgabewert zu festzulegen. Allerdings wird am Ende der Ausführung eines Makros der Speicher des Pufferspeichers 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.

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.
Aufklappen References
GDL-Handbuch 4.5 (DE) p. 113
GDL-Handbuch 5.0 (DE) p. 158
GDL-Handbuch 6.0 (DE) p. 192
GDL-Handbuch 6.5 (DE) p. 192
GDL-Handbuch 7.0 (DE) p. 192
GDL-Handbuch 8.0 (DE) p. 129
GDL-Handbuch 8.1 (DE) p. 130
GDL-Handbuch 9.0 (DE) p. 220
GDL-Handbuch 10.0 (DE) p. 220
GDL-Handbuch 11.0 (DE) p. 226
GDL Reference Guide 9.0 (INT) p. 212
GDL Reference Guide 10.0 (INT) p. 218
GDL Reference Guide 11.0 (INT) p. 218
GDL Cookbook 3.1 (EN/DE) p. 2.38/2.147