Was sind Arrays?
Arrays sind in tabellenartig aufgebauten Speichern abgelegte Werteansammlungen.
Man kann Arrays kurz als Wertetabellen übersetzen. (Im GDL-Handbuch werden sie als Ansammlungswerte bezeichnet)
Es gibt 2 Arten von Arrays:
a) die direkt im Script definierten
b) die im Parametereingabefeld definierten.
zu a) Die Arrays werden im 2D-Script, im 3D-Script oder im Master-Script "erklärt".
Dies macht man mit dem Befehl "DIM".
Will man eine Wertetabelle mit einer Spalte (und 9 Werten) definieren, schreibt man
DIM wt[9]
Will man eine Wertetabelle mit einer Zeile (und 9 Werten) definieren, schreibt man
DIM wt[1][9]
Will man eine Wertetabelle mit 9 Zeilen und 9 Spalten definieren, schreibt man
DIM wt[9][9]
Die Bezeichnung "wt" ist willkürlich gewählt. Sie stellt quasi den Namen der Wertetabelle dar.
Jede neu definierte Array muß natürlich einen eigenen Namen besitzen und darf keinen bereits verwendeten Variablen- oder Parameternamen besitzen (und keinen Befehlsnamen wie PRISM).
Die Zahlen müssen in eckigen Klammern stehen; die erste Zahl gibt die Anzahl der Zeilen an, die zweite die Anzahl der Spalten.
Nach der "Erklärung" der Arrays sind diese noch leer und müssen gefüllt werden.
Man kann schreiben:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> wt[1]=1
wt[2]=1.1
wt[3]=1.2
..................usw.alternativ geht es auch mit einer Schleife:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">for k=1 TO 9
wt[k]=1+(k-1)*0.1
NEXT k Die Werte der Arrays können nicht nur Zahlen (Abmessungen, Ganzzahlen oder natürliche Zahlen) sein, sondern auch Text, Materialien etc. Es geht allerdings nicht, dass Wert 1 eine Abmessung und Wert 2 ein Textausdruck ist.
Wenn "wt" eine Textansammlung ist, kann der erste Wert heißen:
wt[1]="Guten Morgen"
Die Array-Werte können nach dem GDL-Kochbuch nicht mit Parametern oder veränderlichen Variablen gefüllt werden.
Bei einem Test in ArchiCAD 7.0 + 6.5 scheint dies allerdings doch möglich zu sein.
zu b) Die Arrays werden im Parametereingabefeld definiert, indem man auf den Schalter mit dem Tabellensymbol klickt, der sich rechts neben dem Schalter, mit dem man den Parametertyp definiert, befindet. Es öffnet sich das Dialogfeld "Ansammlungswerte" mit einem einzigen Standardwert. Will man weitere Reihen definieren, klickt man auf die linke "1" und drückt sooft "Einfügen" bis man die gewünschte Anzahl erreicht. Für weitere Spalten klickt man entsprechend auf die obere "1".
Man kann anschließend die Werte für die entsprechenden Felder eingeben oder auch auf Null lassen.
Statt die Werte direkt einzugeben, geht dies auch im Parameter-Script mit dem PARAMETERS-Befehl, z.B. PARAMETERS wt[1]=0.5
Ist der Parametertyp "Länge", gibt man Längenwerte ein, ist er "Material", wählt man Materialien aus.
Will man später die Werte vom Parametereingabefeld aus editieren, darf man nicht erneut auf das Tabellensymbol klicken, sondern man muß ganz oben auf den Schalter "SET" klicken.
Ein Vorteil von Typ b) ist, dass der Anwender im Dialogfeld des Bibliothekselementes die Ansammlungswerte editieren kann.
Hierdurch kann man z.B. hundert Parameter in einem einzigen Parameter "komprimieren".
Nachteil hierbei ist allerdings, dass das ganze sehr unübersichtlich wird. Ich würde diese Art der Parametereingabe durch den Anwender nur für selten zu ändernde Parameter verwenden, wie die Daten eines Kalenders, die einmal eingegeben, ihre Gültigkeit behalten.
Anwendung von Arrays:
1. Einer der wesentlichen Anwendungen, für die ich Arrays verwende, ist die Schleifenbildung mit veränderlichen Variablen.
Wenn man eine normale Schleife aufstellt, sind die wiederkehrenden Werte, z.B. Abmessungen immer gleich. Mit Arrays ist es möglich, z.B. eine Pfosten-Riegel-Konstruktion mit unterschiedlichen Achsmaßen zu erstellen, ohne auf ein kurzes Script mit einer Schleife verzichten zu müssen.
Beispiel:
Normales 3D-Script ohne Array und Schleife:
Parameter: c2, c3, c4, c5, c6 (Abstände)
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">CYLIND 1,0.1
ADDx c2
CYLIND 1,0.1
ADDx c3
CYLIND 1,0.1
ADDx c4
CYLIND 1,0.1
ADDx c5
CYLIND 1,0.1
ADDx c6
CYLIND 1,0.1
DEL TOP3D-Script mit Array und Schleife:
Parameter: c2, c3, c4, c5, c6 (Abstände) und (Parameter-Array mit 6 Werten)
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">FOR k=1 TO 6
ADDx c[k]
CYLIND 1,0.1
NEXT k
DEL TOPWie man sieht, ist das Script sehr kurz und übersichtlich, was sich bei komplexeren Objekten noch wesentlich stärker bemerkbar macht. Allerdings gewinnt das Parameter-Script an zusätzlichem Gewicht, was wie folgt lautet:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">PARAMETERS c[1]=0
PARAMETERS c[2]=c2
PARAMETERS c[3]=c3
PARAMETERS c[4]=c4
PARAMETERS c[5]=c5
PARAMETERS c[6]=c6Eine komplette einfache Pfosten-Riegelkonstruktion stellt folgendes Objekt dar:
<OBJECT ID="GDLCtl" codebase="http://www.gdlcentral.com/bin/files/GDLCtl.cab#version=1,2,5,178" WIDTH="200" HEIGHT="200" CLASSID="CLSID:64D9B72C-E42A-490e-9181-221E1E035A14"><PARAM NAME="GdllistTxt" VALUE=""><PARAM NAME="SRC" VALUE="http://download.b-prisma.de/objekte/PR_Simple.gsm"><embed name='GDLCtl' width='200' height='200' Src='http://download.b-prisma.de/objekte/PR_Simple.gsm' GdlListTxt=''></OBJECT>
2. Eine intressante Anwendung von Arrays ist die Definition von Auswahllisten für den VALUES-Befehl im Parameter-Script:
z.B. Kann man statt: VALUES "C" "Müller","Meier","Schulze" (wenn C ein Texttyp-Parameter ist)
folgendes schreiben:
VALUES "C" d
Die Namen "Müller","Meier","Schulze" würde man in einen Parameter-Array mit dem Namen "d" eintragen und das Script wäre äußerst sauber. Es ist sogar möglich, dass der Anwender in diesem Array eigene Einträge vornimmt. So könnte er dort z.B. seine 4 (oder mehr) am häufigsten verwendeten Schrifttypen eintragen (die ja bei jedem Anwender unterschiedlich sein können).
Über Beiträge von weiteren Anwendungsmöglichkeiten von Arrays würde ich mich sehr freuen.
[ 03. Juli 2005, 12:18: Beitrag editiert von: Jochen Suehlo ]