Support Forum

[Frage] Probleme mit Array und fehlender Aktualisierung [Gelöst]

Schlagworte:
  • Allplan
  • Smartparts
  • Array
  • Plugin-Download

Hallo zusammen

Ich habe ein Problem, mit einem SmartPart, dass ich momentan neu erstelle.
Aus diversen Parametern solle parallele Linien gezeichnet werden. Die Parameter sollen jeweils in Arrays eingetragen werden.
Die jeweils erste Linie wird vorgegeben; die restlichen entsprechend berechnet.
Das Problem, das nun besteht ist, dass beim ändern eines Parameters (z.B. ld_t oder l_matte) nicht alle Linien des Gitternetzes korrekt neu berechnet werden. Ich muss im Register 2D-Script mehrmals auf "Script ausführen" klicken, damit alles aktualisiert wird. Nun die Frage: Wo könnte der Fehler liegen?

Danke und Gruss
Karim

Fette Parameter werden über die Eingabemaske definiert und geändert.

Parameter-Script
PARAMETERS ld_s [ 1 ][ 1 ]= 0.0
PARAMETERS ld_s [ 1 ][ 2 ]= ue_4
PARAMETERS ld_e [ 1 ][ 1 ]= l_matte
PARAMETERS ld_e [ 1 ][ 2 ]= ue_4

FOR i = 2 TO ld_stk STEP 1
PARAMETERS ld_s [ i ][ 1 ]= ld_s [ i - 1 ] [ 1 ]

PARAMETERS ld_s [ i ][ 2 ]= ld_s [ i - 1 ] [ 2 ]+ ld_t
PARAMETERS ld_e [ i ][ 1 ]= ld_e [ i - 1 ] [ 1 ]

PARAMETERS ld_e [ i ][ 2 ]= ld_e [ i - 1 ] [ 2 ]+ ld_t
NEXT

2D-Script
FOR i = 1 TO ld_stk STEP 1
LINE2 ld_s [ i ][ 1 ], ld_s [ i ][ 2 ], ld_e [ i ][ 1 ], ld_e [ i ][ 2 ]

NEXT

Lösung anzeigen Lösung verbergen

Im Script arbeitet man immer mit Variablen.
Vor dem Starten jedes Scriptes werden alle Parameter in die Variablen kopiert.
Im Scriptverlauf können neue Variabeln ohne vorherige Definition benutzt werden.

Die Zuweisung von Parameterwerten mit PARAMETERS param = wert
kopiert den Wert zurück in den Parameter.

Dadurch kann es passieren, dass Variable und Parameter nicht mehr denselben Wert beinhalten.
Beipiel: Parameter "a" und "b" mit Wert 1, bei Starten des Scripts erhält dieses Variablen "a" und "b" mit dem Wert 1
Nach dem Ausführen von "PARAMETERS a=2, b = a+1" entsteht folgendes:
Variablen a=1, b=1
Parameter a=2, b=2
Das ist scheinbar falsch, man würde erwarten Parameter a=2 und b=3

Aber dadurch, dass der neuen Wert von Parameter "b" aus der unveränderten Variable "a" berechnet wurde, ist das korrekt.
PARAMETERS param = wert weist den Wert nur dem Parameter zu, nicht der gleichnamigen Variablen bzw. dem Array

Eine korrekte Zuweisung von berechneten Werten, sowohl zur Variablen, als auch zum Parameter sieht so aus:

a = 2 !Variablenzuweisung
b = a+1 !Variablenzuweisung
PARAMETERS a = a, b = b !Parameterzuweisung

Man sollte strikt trennen, zwischen Zuweisung von berechneten Werten zur Variablen
und der "Synchronisierung" der Parameter!

Im Script arbeitet man immer mit Variablen.
Vor dem Starten jedes Scriptes werden alle Parameter in die Variablen kopiert.
Im Scriptverlauf können neue Variabeln ohne vorherige Definition benutzt werden.

Die Zuweisung von Parameterwerten mit PARAMETERS param = wert
kopiert den Wert zurück in den Parameter.

Dadurch kann es passieren, dass Variable und Parameter nicht mehr denselben Wert beinhalten.
Beipiel: Parameter "a" und "b" mit Wert 1, bei Starten des Scripts erhält dieses Variablen "a" und "b" mit dem Wert 1
Nach dem Ausführen von "PARAMETERS a=2, b = a+1" entsteht folgendes:
Variablen a=1, b=1
Parameter a=2, b=2
Das ist scheinbar falsch, man würde erwarten Parameter a=2 und b=3

Aber dadurch, dass der neuen Wert von Parameter "b" aus der unveränderten Variable "a" berechnet wurde, ist das korrekt.
PARAMETERS param = wert weist den Wert nur dem Parameter zu, nicht der gleichnamigen Variablen bzw. dem Array

Eine korrekte Zuweisung von berechneten Werten, sowohl zur Variablen, als auch zum Parameter sieht so aus:

a = 2 !Variablenzuweisung
b = a+1 !Variablenzuweisung
PARAMETERS a = a, b = b !Parameterzuweisung

Man sollte strikt trennen, zwischen Zuweisung von berechneten Werten zur Variablen
und der "Synchronisierung" der Parameter!

Zitiert von: Nemo
Im Script arbeitet man immer mit Variablen.

Natürlich, danke für das wieder daran Erinnern! Eigentlich klar, aber irgendwie wieder vergessen.
Jetzt funktioniert es, wie gewünscht! In allen bisher erstellten SmartParts habe ich mich immer daran gehalten.

Danke und Gruss
Karim