Parameters + Variables

Ein Erklärungsmodell warum das gleiche nicht dasselbe ist.

Das besondere an Programmen ist, dass man allgemeine Lösungen findet, die für beliebige Werte korrekte Ergebnisse bringen. Dazu verwendet man Platzhalter oder Veränderliche.

Wir unterscheiden bei Veränderlichen in GDL-Skripten formal zwischen Parametern und Variablen. GDL kennt keine Klassen und Funktionen, kein echtes "local" und "global" und v.a. keinen echten Zwang Veränderliche zu deklarieren.

Allerdings gibt es verschiedene "Seienszustände" der Veränderlichen.

Zunächst eines Vorab: Setzt man ein Objekt ab, "merkt" sich ArchiCAD lediglich die GUID, die eindeutige Identifizierung des Objektes, und eine Liste der Parameter und deren Werte, die die Darstellung des Objektes berechnen lassen an dem Absetzpunkt des Objektes. Alle Geometrie und sonstige Intelligenz wird durch Abarbeiten (interpretieren) der GDL-Skripte erzeugt. Dieses Interpretieren erfolgt vielfach und mit den kontextabhängigen Skripten.

Die Parameterliste eines Objektes [1] ist fest mit  dem Objekt selbst verbunden und wird mit dem Objekt in der Bibliothek gesichert. Diese Liste ist ausschliesslich beim Editieren eines Objektes verfügbar und veränderbar.

Setzt man ein Objekt nun in einem Projekt ab, also im Grundriss, Layout, Ansicht oder wo auch imemr das möglich ist, wird als Grundinitialisierung diese Parameterliste mitsamt der im Objekt gespeicherten Werte und mit der GUID im Projekt eingesetzt.

 

Verwendet man Favoriten, werden die in den Favoriten voreingestellten Werte als Grundeinstellung verwendet. Beiden Wegen (aus Bibliothek oder von einem Favorit) gemeinsam ist, dass in dem Moment eine Kopie der Parameterliste des Objektes (ggf. mit den Werten des Favoriten) an der Absetzstelle im Projekt angelegt wird. Diese Parameterliste [2] kann durch direktes Verändern im Einstellungsdialog des Objektes an der Einsetzstelle verändert werden. Die zweite Art diese Liste zu ändern kommt weiter unten.

Bis hierher sind veränderte Werte dieser Parameter nicht flüchtig. D.h. veränderte Werte werden gespeichert und erhalten. Die Veränderlichen aus [1] und [2] nennen wir daher Parameter.

 Wird nun ein Skript abgearbeitet, also die Ausführung angestossen, wird wieder eine neue Liste von Veränderlichen angelegt. Die Variablenliste [3] während der Laufzeit.

 

Diese erhält, noch bevor eine erste Zeile Code abgearbeitet wurde alle Parameter der Liste [2] als Kopie und mit den Werten, die im Projekt für jeden Parameter definiert wurden. In der Folge der Skriptinterpretation kommen i.d.R. viele zusätzliche Variablen dazu. Alle Variablen, auch die, die aus der Parameterliste [2] zu Beginn nur kopiert wurden lasssen sich nun skriptgesteuert durch einfache Name=Wert - Anweisungen verändern. Aber lediglich in der Variablenliste 3 wird diese Veränderung "gemerkt".

 

Verwendet irgend ein Befehl in irgendeinem Skript zu irgendeinem Zeitpunkt eine Variable, kommt diese IMMER aus Liste 3, nie aus Liste 2. Wenn das Skript zu ende ist, oder auf ein END trifft, wird diese Variablenliste schlicht gelöscht. Die errechneten Werte sind danach nicht mehr verfügbar. Weder in interaktiven Auswertungen, noch in einem nachfolgend startenden Skript.

Der Befehl PARAMETERS stellt nun eine Besonderheit in der Skriptabarbeitung dar. Dieser verändert nicht die Werte der Variablenliste [3], sondern die der Parameterliste [2]. Derjenigen Werteliste, die im Projekt auch gespeichert wird. Und zwar ausschließlich der Liste 2. Nach der Befehlszeile

 C=3 : PARAMETERS C=4

steht in Liste 2 für C der Wert 4, in Liste 3 noch immer noch der Wert 3. Anders nach der Zeile:

C=5 : PARAMETERS C=C

 Danach ist in beiden Listen für C der Wert 5.

 

Und nun der Wermutstropfen: Der Befehl ist ausschließlich dann wirksam, wenn das PARAMETERS-Skript abgearbeitet wird. Und das passiert nur, wenn ein Objekt neu eingesetzt wird, der Einstellungsdialog eine Veränderung am Objekt hervorruft (da reicht schon das Ändern des Objektstiftes) oder wenn das Objekt im Grundriss mit beweglichen Fangpunkten verändert wird. Das reine Neuladen des Projektes oder der Bibliothek reicht i.d.R. nicht. Der Befehl ist daher im 2D-Skript überflüssig. Ein Trick wäre das Master-Skript, doch wird dieses nicht im Rahmen der Abarbeitung des Parameter-Skriptes abgearbeitet, ist der Befehl dennoch wirkungslos und wird ignoriert.