Name
PARAMETERS
Syntax
PARAMETERS name1=wert1 [, name2=wert2, ... namen=wertn]
namei = Gültiger Parametername
werti = Zulässiger Wert, abhängig vom Parametertyp
werti = Zulässiger Wert, abhängig vom Parametertyp
Der Befehl kann in 2 Situationen verwendet werden.
1. Als alleinstehender Befehl:
Weist einem Parameter in der Parameterliste einen Wert zu. Dieser bleibt anders als bei der Zuweisung namei = wert auch nach Abarbeitung des Skriptes erhalten. Er wird nämlich in die Parameterliste der Objekteinstellungen übernommen. Vorherige und manuelle Eingaben werden damit überschrieben.
Es können auch komplette Arrays mit einer Anweisung übergeben werden. Ist der Zielparameter kein Array, wird nur der erste Wert der ersten Zeile/Spalte übergeben.
2. Als einleitendes Schlüsselwort innerhalb eines anderen Befehls:
Der CALL- und einige Befehle zur Attributedefinition rufen Makros, denen in Folge des Schlüsselwortes PARAMETERS Werte übergeben werden können. Zu Erläuterung siehe dort.
1. Als alleinstehender Befehl:
Weist einem Parameter in der Parameterliste einen Wert zu. Dieser bleibt anders als bei der Zuweisung namei = wert auch nach Abarbeitung des Skriptes erhalten. Er wird nämlich in die Parameterliste der Objekteinstellungen übernommen. Vorherige und manuelle Eingaben werden damit überschrieben.
Es können auch komplette Arrays mit einer Anweisung übergeben werden. Ist der Zielparameter kein Array, wird nur der erste Wert der ersten Zeile/Spalte übergeben.
2. Als einleitendes Schlüsselwort innerhalb eines anderen Befehls:
Der CALL- und einige Befehle zur Attributedefinition rufen Makros, denen in Folge des Schlüsselwortes PARAMETERS Werte übergeben werden können. Zu Erläuterung siehe dort.
PARAMETERS C=2.5, Beschriftung="FH-Tür", Schalter=1
Siehe auch Erläuterungen zu Variablen und Parameter.
Im folgenden ein Erklärungsmodell zur Verwendung und Speicherung von Parameterwerten.
In ArchiCAD werden hierzu 3 Tabellen geführt:
Nr. 1: PARAMETER-Liste.
Dies ist die Liste der Parameter, die bei der Objektprogrammierung als vom Anwender veränderbare Parameter angelegt wird. (Abb. 1) Die dort eingestellten Werte werden mit dem Objekt und nicht im Projekt gespeichert und dienen als Startwerte bei der Initialisierung eines Objektes, wenn es "frisch" in ein Projekt eingesetzt wird. Die Werte dienen damit als einmalige Grundwerte der Liste 2.
Nr.2: Datenbank-Liste. (Objekteinstellungsliste)
Ein ArchiCAD-Projekt besteht aus einer Datenbank, in der jedes Zeichnungselement mit den für seine Darstellung notwendigen Einstellungen abgelegt wird. Das trifft für Linien, Wände und Decken ebenso zu wie für Objekte. Objekte werden aber nicht mit den dargestellten Linien und Volumenkörpern abgelegt, sondern lediglich mit ihrer Position im Raum nebst Objektname, den Werten der Parameterliste und den übrigen Attributen (Stift, Material etc.). Alle Änderungen eines platzierten Objektes über den Einstellungsdialog (Abb. 2) oder bewegliche Fangpunkte, werden in dieser Liste vorgenommen. Sie haben natürlich keine Auswirkung auf die Liste 1, wohl aber auf Liste 3, für die sie die Grundwerte bereitstellt. Eine solche Liste wird für jedes Objekt im Plan geführt. Sie lässt sich vom Skript aus mit dem PARAMETERS-Befehl nur und ausschließlich in 2 Situationen ändern:
1. Das Parameterskript wird im Einstellungsdialog (des einzelnen Objektes) ausgeführt.
2. Das Parameterskript wird ausgeführt, weil ein beweglicher Fangpunkt (keine Objektecke = runder Fangpunkt) in Grundriss/ Schnitt/ 3D-Fester verändert wird.
(Den Inhalt dieser Liste konnte man bis ArchiCAD 7 in einer unter Speziell sichern>PlanDump erzeugten Textdatei sehen. (Abb. 3) Ab ArchiCAD 9 dienen die SQL-Befehle im Berechnungsmenü zum Auslesen der Projektdatenbank: In das Abfragefeld SELECT * FROM OBJECTS WHERE LIBRARY_PART_NAME='objektname' eintragen und auf Ausführen klicken.)
Nr.3: Variablenliste.
Für jede Abarbeitung eines Skriptes wird zu Beginn eine Liste aller Variablen angelegt und initialisiert. Dies sind alle innerhalb eines Skriptes verwendeten Variablen, deren Wert zunächst auf 0, bzw. "" (Leerstring für Texte) gesetzt wird. In diese Liste werden mit ihrem Namen alle Parameter aus Liste 1 übernommen. Sie können nun in Folge des Skriptes beliebig verwendet und innerhalb dieser Liste durch einfache Wertezuweisungen verändert werden. Diese wirkt sich aber nur auf ihre Entsprechung als Variable, also in Liste 3, NICHT aber auf Liste 2 aus. Der Grundwert dieser Parameter-Variablen wird aber im Gegensatz zu den im Skript neu angelegten Variablen aus Liste 2 bezogen. Und dies bei jedem Start eines Skriptes. Für die komplette Darstellung werden mitunter mehrere Skripte gestartet, wobei die Reihenfolge nicht unentscheidend ist. Bei jedem Start erfolgt die Initialisierung der Variablen und Parametervariablen (aus Liste 2) erneut. Veränderungen in Liste 3, und das ist hier die Essenz, haben keine Auswirkung auf die Liste 2. Am Ende jeden Skriptdurchlaufes wird die Variablenliste verworfen. Ihr kompletter Inhalt wird gelöscht.
Im Editiermodus eines Objektes kann man zur Abarbeitung eines Skriptes mit dem GDL-Debugger diese Liste nebst Inhalt einsehen. (Abb. 4)
Um Veränderungen an der Liste 2 aus dem Skript heraus vornehmen zu können, ist der PARAMETERS-Befehl (als eigenständiger Befehl) zu verwenden. Funktioniert aber eben nur im Einstellungsdialog, oder wenn ein beweglicher Fangpunkt verändert wird.
Anmerkung 1: Ist für ein im Projekt platziertes Objekt ein Parametername zwar in Liste 1 aufgeführt, in Liste 2 jedoch (noch) nicht, weil das Objekt inzwischen um diesen Parameter erweitert wurde, wird mit der ersten Skriptabarbeitung der Instanz des Objektes in dem Projekt der Eintrag in Liste 2 mit den Startwerten aus Liste 1 ergänzt.
Anmerkung 2: Es ist oft notwendig bestimmte Umgebungszustände eines platzierten Objektes mit dem PARAMETERS-Befehl in der Datenbankliste (Liste 2) abzulegen. Um z.B. diese Werte in interaktiven Auswertungen ausgeben zu können. Benötigt man hierzu Werte von Globalen Parametern kann es unschöner Weise dazu kommen, dass dies scheitert. Dies liegt daran, dass ArchiCAD nicht alle globalen Parameter in jedem Kontext korrekt bereitstellt. (Dies ergibt auch mitunter Sinn: Im 3D-Fenster und im 3D-Skript kann z.B. der Parameter GLOB_CSTORY_ELEV nicht eindeutig sein, da das Objekt aus jedem beliebigen Geschoss heraus aufgerufen und das Skript abgearbeitet werden werden kann.) Manchmal ist dieses Fehlen des Wertes im Kontext 5 (=Parameter-Skript-Abarbeitung), was eine korrekte Zuweisung durch den PARAMETERS-Befehl verhindert, aber schlicht ein bug und sollte Graphisoft gemeldet werden.
Ein paar erläuternde Beispiele:
Beispiel 1:
LET Breite = 1.25
Laenge = 2.50
A = 1.25
B = Laenge
Verändert die Variablen in der Liste 3, ungeachtet, ob es sich ursprünglich um Parameter handelte oder nicht.
Beispiel 2:
Laenge = 2.50
PARAMETERS A = 1.25, B = Laenge
Verändert die Variable "Laenge" in der Liste 3, A und B in Liste 2, also der Datenbankliste.
Beispiel 3:
Breite = 1.25
Laenge = 2.50
A = 1.25
B = Laenge
PARAMETERS Breite = 1.25, Laenge = 2.50, A = 1.25, B = Laenge
Verändert die Variablen sowohl in der Liste 3 als auch in Liste 2, sofern sie alle dort enthalten sind. Da die Variablen in Liste 3 bereits einen neuen Wert bekommen haben, könnte die Zeile mit dem PARAMETERS-Befehl auch so aussehen:
PARAMETERS Breite = Breite, Laenge = Laenge, A = A, B = B
(Man könnte nun versucht sein zur Verifizierung des hier Dargelegten einen PRINT Breite, Laenge, A, B anzufügen, was aber nicht hilft, da bei der Abarbeitung des Parameterskriptes, in welchem der PARAMETERS-Befehl nur wirksam ist, der PRINT-Befehl nicht ausgeführt wird. Bei der nachfolgenden Ausführung z.B. des 2D-Skriptes ist dann bereits alles passiert.)
Im folgenden ein Erklärungsmodell zur Verwendung und Speicherung von Parameterwerten.
In ArchiCAD werden hierzu 3 Tabellen geführt:
Nr. 1: PARAMETER-Liste.
Dies ist die Liste der Parameter, die bei der Objektprogrammierung als vom Anwender veränderbare Parameter angelegt wird. (Abb. 1) Die dort eingestellten Werte werden mit dem Objekt und nicht im Projekt gespeichert und dienen als Startwerte bei der Initialisierung eines Objektes, wenn es "frisch" in ein Projekt eingesetzt wird. Die Werte dienen damit als einmalige Grundwerte der Liste 2.
Nr.2: Datenbank-Liste. (Objekteinstellungsliste)
Ein ArchiCAD-Projekt besteht aus einer Datenbank, in der jedes Zeichnungselement mit den für seine Darstellung notwendigen Einstellungen abgelegt wird. Das trifft für Linien, Wände und Decken ebenso zu wie für Objekte. Objekte werden aber nicht mit den dargestellten Linien und Volumenkörpern abgelegt, sondern lediglich mit ihrer Position im Raum nebst Objektname, den Werten der Parameterliste und den übrigen Attributen (Stift, Material etc.). Alle Änderungen eines platzierten Objektes über den Einstellungsdialog (Abb. 2) oder bewegliche Fangpunkte, werden in dieser Liste vorgenommen. Sie haben natürlich keine Auswirkung auf die Liste 1, wohl aber auf Liste 3, für die sie die Grundwerte bereitstellt. Eine solche Liste wird für jedes Objekt im Plan geführt. Sie lässt sich vom Skript aus mit dem PARAMETERS-Befehl nur und ausschließlich in 2 Situationen ändern:
1. Das Parameterskript wird im Einstellungsdialog (des einzelnen Objektes) ausgeführt.
2. Das Parameterskript wird ausgeführt, weil ein beweglicher Fangpunkt (keine Objektecke = runder Fangpunkt) in Grundriss/ Schnitt/ 3D-Fester verändert wird.
(Den Inhalt dieser Liste konnte man bis ArchiCAD 7 in einer unter Speziell sichern>PlanDump erzeugten Textdatei sehen. (Abb. 3) Ab ArchiCAD 9 dienen die SQL-Befehle im Berechnungsmenü zum Auslesen der Projektdatenbank: In das Abfragefeld SELECT * FROM OBJECTS WHERE LIBRARY_PART_NAME='objektname' eintragen und auf Ausführen klicken.)
Nr.3: Variablenliste.
Für jede Abarbeitung eines Skriptes wird zu Beginn eine Liste aller Variablen angelegt und initialisiert. Dies sind alle innerhalb eines Skriptes verwendeten Variablen, deren Wert zunächst auf 0, bzw. "" (Leerstring für Texte) gesetzt wird. In diese Liste werden mit ihrem Namen alle Parameter aus Liste 1 übernommen. Sie können nun in Folge des Skriptes beliebig verwendet und innerhalb dieser Liste durch einfache Wertezuweisungen verändert werden. Diese wirkt sich aber nur auf ihre Entsprechung als Variable, also in Liste 3, NICHT aber auf Liste 2 aus. Der Grundwert dieser Parameter-Variablen wird aber im Gegensatz zu den im Skript neu angelegten Variablen aus Liste 2 bezogen. Und dies bei jedem Start eines Skriptes. Für die komplette Darstellung werden mitunter mehrere Skripte gestartet, wobei die Reihenfolge nicht unentscheidend ist. Bei jedem Start erfolgt die Initialisierung der Variablen und Parametervariablen (aus Liste 2) erneut. Veränderungen in Liste 3, und das ist hier die Essenz, haben keine Auswirkung auf die Liste 2. Am Ende jeden Skriptdurchlaufes wird die Variablenliste verworfen. Ihr kompletter Inhalt wird gelöscht.
Im Editiermodus eines Objektes kann man zur Abarbeitung eines Skriptes mit dem GDL-Debugger diese Liste nebst Inhalt einsehen. (Abb. 4)
Um Veränderungen an der Liste 2 aus dem Skript heraus vornehmen zu können, ist der PARAMETERS-Befehl (als eigenständiger Befehl) zu verwenden. Funktioniert aber eben nur im Einstellungsdialog, oder wenn ein beweglicher Fangpunkt verändert wird.
Anmerkung 1: Ist für ein im Projekt platziertes Objekt ein Parametername zwar in Liste 1 aufgeführt, in Liste 2 jedoch (noch) nicht, weil das Objekt inzwischen um diesen Parameter erweitert wurde, wird mit der ersten Skriptabarbeitung der Instanz des Objektes in dem Projekt der Eintrag in Liste 2 mit den Startwerten aus Liste 1 ergänzt.
Anmerkung 2: Es ist oft notwendig bestimmte Umgebungszustände eines platzierten Objektes mit dem PARAMETERS-Befehl in der Datenbankliste (Liste 2) abzulegen. Um z.B. diese Werte in interaktiven Auswertungen ausgeben zu können. Benötigt man hierzu Werte von Globalen Parametern kann es unschöner Weise dazu kommen, dass dies scheitert. Dies liegt daran, dass ArchiCAD nicht alle globalen Parameter in jedem Kontext korrekt bereitstellt. (Dies ergibt auch mitunter Sinn: Im 3D-Fenster und im 3D-Skript kann z.B. der Parameter GLOB_CSTORY_ELEV nicht eindeutig sein, da das Objekt aus jedem beliebigen Geschoss heraus aufgerufen und das Skript abgearbeitet werden werden kann.) Manchmal ist dieses Fehlen des Wertes im Kontext 5 (=Parameter-Skript-Abarbeitung), was eine korrekte Zuweisung durch den PARAMETERS-Befehl verhindert, aber schlicht ein bug und sollte Graphisoft gemeldet werden.
Ein paar erläuternde Beispiele:
Beispiel 1:
LET Breite = 1.25
Laenge = 2.50
A = 1.25
B = Laenge
Verändert die Variablen in der Liste 3, ungeachtet, ob es sich ursprünglich um Parameter handelte oder nicht.
Beispiel 2:
Laenge = 2.50
PARAMETERS A = 1.25, B = Laenge
Verändert die Variable "Laenge" in der Liste 3, A und B in Liste 2, also der Datenbankliste.
Beispiel 3:
Breite = 1.25
Laenge = 2.50
A = 1.25
B = Laenge
PARAMETERS Breite = 1.25, Laenge = 2.50, A = 1.25, B = Laenge
Verändert die Variablen sowohl in der Liste 3 als auch in Liste 2, sofern sie alle dort enthalten sind. Da die Variablen in Liste 3 bereits einen neuen Wert bekommen haben, könnte die Zeile mit dem PARAMETERS-Befehl auch so aussehen:
PARAMETERS Breite = Breite, Laenge = Laenge, A = A, B = B
(Man könnte nun versucht sein zur Verifizierung des hier Dargelegten einen PRINT Breite, Laenge, A, B anzufügen, was aber nicht hilft, da bei der Abarbeitung des Parameterskriptes, in welchem der PARAMETERS-Befehl nur wirksam ist, der PRINT-Befehl nicht ausgeführt wird. Bei der nachfolgenden Ausführung z.B. des 2D-Skriptes ist dann bereits alles passiert.)
Der Befehl wirkt nur im Editiermodus und im Einstellungsdialog des Objektes. Liegt das Objekt im Plan und wird dort mit beweglichen Fangpunkten verändert, wirken sich aus dem Skript in Verbindung mit dem Befehl PARAMETERS ergebende Wertänderungen nicht auf die Parameterliste aus. Erst beim nächsten Aufruf des Einstellungsdialoges erfolgen die Veränderungen.
Der Befehl ändert auch nicht den Wert des Parameters/der Variablen im laufenden Skript. Ist dies gewünscht, ist dies so zu programmieren:
C=2.5
Beschriftung="FH-Tür"
Schalter=1
PARAMETERS C=2.5, Beschriftung="FH-Tür", Schalter=1
Siehe Hintergund.
Bis ArchiCAD 6.5 ist es nicht erlaubt mit dem PARAMETERS-Befehl Parametern Werte zuzuweisen, die in der Parameterliste gar nicht gelistet sind. Die Ausführung des Parameterskripts wird dann fehlerlos abgebrochen.
Mit dem PARAMETERS-Befehl können weder globale Parameter, noch Attribute des platzierten Objektes (z.B. SYMB_VIEW_PEN) verändert werden. Lediglich auf die Parameter der Parameterliste kann zugegriffen werden.
Der Befehl ändert auch nicht den Wert des Parameters/der Variablen im laufenden Skript. Ist dies gewünscht, ist dies so zu programmieren:
C=2.5
Beschriftung="FH-Tür"
Schalter=1
PARAMETERS C=2.5, Beschriftung="FH-Tür", Schalter=1
Siehe Hintergund.
Bis ArchiCAD 6.5 ist es nicht erlaubt mit dem PARAMETERS-Befehl Parametern Werte zuzuweisen, die in der Parameterliste gar nicht gelistet sind. Die Ausführung des Parameterskripts wird dann fehlerlos abgebrochen.
Mit dem PARAMETERS-Befehl können weder globale Parameter, noch Attribute des platzierten Objektes (z.B. SYMB_VIEW_PEN) verändert werden. Lediglich auf die Parameter der Parameterliste kann zugegriffen werden.
Arrayparameter in der Parameterliste haben eine feste Ausdehnung. Diese kann ab ArchiCAD 8 individuell für jedes im Projekt platzierte Objekt per Skript erweitert werden, indem man den neuen Feldern einen Wert zuweist und mit PARAMETERS neu anlegt:
! ### Parameterskript
! Parameter 'aa' ist ein Array mit 1x3 Feldern, Typ Länge
FOR i=4 TO 5
aa[i]=A : PARAMETERS aa[i]=aa[i]
NEXT i
Die Zuweisung kann auch durch den Befehl PARAMETERS aa=aa erfolgen.
So ist auch eine Reduzierung der Arrayausdehnung möglich, indem man zunächst ein anders benanntes Array (z.B. bb[2]) mit geringerer Ausdehnung definiert und die benötigten Werte dorthin überträgt und danach mittels PARAMETERS aa=bb neu setzt.
! ### Parameterskript
! Parameter 'aa' ist ein Array mit 1x3 Feldern, Typ Länge
FOR i=4 TO 5
aa[i]=A : PARAMETERS aa[i]=aa[i]
NEXT i
Die Zuweisung kann auch durch den Befehl PARAMETERS aa=aa erfolgen.
So ist auch eine Reduzierung der Arrayausdehnung möglich, indem man zunächst ein anders benanntes Array (z.B. bb[2]) mit geringerer Ausdehnung definiert und die benötigten Werte dorthin überträgt und danach mittels PARAMETERS aa=bb neu setzt.
ArchiTalk (EN)
Wirksamkeit von PARAMETERS
Wirksamkeit von PARAMETERS
Parameterskript
ab 6.5