Freitag
Hallo zusammen,
Mit dem Sript IF ..... THEN
ELSE
ENDIF
kann man über den Parameter "Boole'sche Operation" Elemente ein und ausblenden
Habe es bei meinem Script so geschrieben,
aber wenn ich z.B. den Parameter 2 erstelle z.B.
IF "Parameter Symbol 1" THEN
Script....2D oder 3D.....
ELSE
ENDIF
IF "Parameter Symbol 2" THEN
Script....2D oder 3D.....
ELSE
ENDIF
Das GDL Programm sagt, dass der Code so korrekt ist.
Das Problem ist, dass wenn ich das "Symbol 2" im Objekt auswähle und aktiviere (mit dem Kästchen an/aus), erscheint das Symbol 1 und gleichzeitig mit dem Symbol 2 (es überschneidet sich).
> Meine Frage ist nun, wie muss ich den Scriptbefehl schreiben, dass wenn ich Symbol 2 einblenden möchte (Aktiv Kästchen nur Symbol 2),
dass das Symbol 1 nicht erscheint ?
Gelöst! Gehe zu Lösung.
Freitag - zuletzt bearbeitet Freitag
Wir haben uns bei selfGDL bemüht genau das präzise anzugeben. Siehe https://www.selfgdl.de/syntax/
Wobei man gerade bei dem Beispiel sieht, dass das nicht ganz einfach ist. Funktionieren würde auf folgendes:
variable = "anSymb2"
LOCK variable
Der Parameter des Befehls muss vom Typ String sein. Ob dezidiert als Klartext "klartext" oder als variable vom Typ string ParameterName = "klartext".
Freitag
Anbei kurz Screenshot vom Parameter;
> Was ist mit "String" immer gemeint, ich lese es überall (Bei deutscher oder englischer Hilfe), aber finde es beim Typauswahl Menu nirgends.
Freitag
String ist eine Textvariable. Also wenn du beim Variablentyp dieses ABC wählst, ist das genau das. Beim Wert kannst du dann Text eintippen.
Freitag
ach ja... wenn du nur zwei Symboldarstelllungen hast, und entweder Symbol1 oder Symbol2 darstellen willst, dann reicht Dir einer dieser boolschen parameter (Checkbox Parameter).
Dann nennst du den z.B. symbol2,
und tippst
if symbol2 then
gosub 200
else
gosub 100
endif
end
100!
!hier kommt alles 2d rein für Symbol 1
return
200!
!hier kommt alles 2d rein für Symbol 2
return
Freitag
Guten Tag archig,
Danke für den Hinweis.
Wie wäre das Beispiel wenn ich z.B. vier anstatt zwei Varianten habe?
Freitag - zuletzt bearbeitet Freitag
Dann würde ich es nicht mit boolschen Variablen, sondern mit einer Auswahlliste so machen:
Parameter namens symboltyp anlegen, typ: String (siehe oben)
!parameterskript
values "symboltyp" "Symbol A", "Symbol B", "Symbol C", "Symbol D"
!2d skript
if symboltyp = "Symbol A" then gosub 100
if symboltyp = "Symbol B" then gosub 200
if symboltyp = "Symbol C" then gosub 300
if symboltyp = "Symbol D" then gosub 400
end
100: !
!hier kommt alles 2d rein für Symbol A
return
200: !
!hier kommt alles 2d rein für Symbol B
return
300: !
!hier kommt alles 2d rein für Symbol C
return
400: !
!hier kommt alles 2d rein für Symbol D
return
sind vielleicht tippfehler drin... (gerade einen behoben: Doppelpunkt hinter der Sprungmnarkennummer)
Freitag
Eine Frage lautete noch sinngemäß: Kann man den eine Parameter auf Null setzen wenn der andere auf 1 gesetzt wird? Ja, das geht wie folgt:
IF GLOB_MODPAR_NAME = "b_param_1" THEN
IF b_param_1 THEN
b_param_2 = 0 : PARAMETERS b_param_2 = b_param_2
ENDIF
ENDIF
IF GLOB_MODPAR_NAME = "b_param_2" THEN
IF b_param_2 THEN
b_param_1 = 0 : PARAMETERS b_param_1 = b_param_1
ENDIF
ENDIF
Freitag
Das geht etwas schlanker:
!parameterskript
values "symboltyp" "Symbol A", "Symbol B", "Symbol C", "Symbol D"
!2d skript
gosub symboltyp
end
"Symbol A":
!hier kommt alles 2d rein für Symbol A
return
"Symbol B":
!hier kommt alles 2d rein für Symbol B
return
"Symbol C":
!hier kommt alles 2d rein für Symbol C
return
"Symbol D":
!hier kommt alles 2d rein für Symbol D
return
Die Sprungmarken für GOSUB können auch vom Typ Text/String sein. symboltyp ist ja ein Textparameter und man kann den Auswahltext so verwenden. Kann das Skript gerade nicht testen. Möglich, dass in dem Sprungmarkentext kein Leerzeichen erlaubt ist. Dann kann man das auch so lösen, dass symboltyp ein Ganzzahl-Parameter ist:
!parameterskript
values{2} "symboltyp" 100,"Symbol A", 200,"Symbol B", 300,"Symbol C", 400,"Symbol D"
!2d skript
gosub symboltyp
end
100:
!hier kommt alles 2d rein für Symbol A
return
200:
!hier kommt alles 2d rein für Symbol B
return
300:
!hier kommt alles 2d rein für Symbol C
return
400:
!hier kommt alles 2d rein für Symbol D
return
Angezeigt und zur Auswahl ist dann der Text aber der Parameter enthält die vorangestellte Zahl. Diese wird dann wieder als Sprungmarke genutzt. Das ist programmietrtechnisch auch die sauberere Lösung.
Allerdings bin ich, wenn es nicht zu unübersichtlich wird, für eine linearere Programmstruktur und würde bei wenig unterschiedlichem Code es ohne Unterprogramme lösen. Durch code-folding ist das auch im Skript zu überblicken:
!parameterskript
values "symboltyp" "Symbol A", "Symbol B", "Symbol C", "Symbol D"
!2d skript
if symboltyp = "Symbol A" then
!hier kommt alles 2d rein für Symbol A
endif
if symboltyp = "Symbol B" then
!hier kommt alles 2d rein für Symbol B
endif
if symboltyp = "Symbol C" then
!hier kommt alles 2d rein für Symbol C
endif
if symboltyp = "Symbol D" then
!hier kommt alles 2d rein für Symbol D
endif
Wie gesagt alles ohne es getestet zu haben.
Andere Programmiersprachen haben hier noch etwas schönere Befehle für Fallunterscheidungen, aber es geht am Ende auch so.
Samstag
Es fehlt einfach eine select case Bedingung im GDL.