abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
Programmierung
Alles über Programmierung in GDL und Python

TIPPS + TRICKS: ARRAYS

Anonymous
Nicht anwendbar
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 ]
7 ANTWORTEN 7
kurb70
Participant
Im Moment ist die Länge von Text in Arrayfeldern noch auf 32 Zeichen beschränkt. Mit ArchiCAD 8 fällt diese Barriere zum Glück.
kurb70
Participant
Interessant ist vielleicht auch, dass nicht gefüllte Arrays (in der Parameterliste) die Dateigrösse vergrössern, als wären sie gefüllt. Bei exzessiver Nutzung kann das einiges ausmachen.
Anonymous
Nicht anwendbar
ab welcher ac version gibt es den befehl array?
und kann ich eine variable[x,y] auch direkt aus den parameterfeld definieren?
Anonymous
Nicht anwendbar
Den DIM-Befehl gibt es mindestens seit Version 6.0, ich schätze es gab ihn auch schon früher, weil es auch ein typischer BASIC-Befehl ist.

Eine Variable [x,y] lässt sich auch direkt im Parameterfeld definieren. Lies oben: "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..."
Anonymous
Nicht anwendbar
ok, dann fällts für mich flach weil ichs eben nicht im gdl-handbuch gefunden hab und der befehl unter ac5 nicht läuft 😞
Anonymous
Nicht anwendbar
Ich hab grad noch ne Demoversion von AC 5.0 gefunden. Der DIM-Befehl funktioniert hier schon, aber die Eingabe von Arrays im Parameterfeld ist nicht möglich.
Anonymous
Nicht anwendbar
Cool,

danke Jochen ... mit dem Befehl hatt ich mich am Wochenende befasst und mir dabei echt die Rübe zermartert ... jetzt hab ich wenigstens ne Anleitung und kann diesen Befehl mal testen ...

Klasse - bärenstark von dir

Ciao
Karin