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
GELÖST!

IF ELSE ENDIF - Frage

Andreas81ch
Advisor

Hallo zusammen,

 

Mit dem Sript IF ..... THEN

 

ELSE

ENDIF 

kann man über den Parameter "Boole'sche Operation" Elemente ein und ausblenden

 

AC27_Parameter_Boole-sche Operation_IF ELSE END.png

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 ?

 

 

 

 

ArchiCAD v6.5 - 28 (CHE Swiss Edition) / macOS / Windows (Switzerland / Schweiz)
Workstation office specs: mac OS, Apple M2 Max, 64 GB RAM
18 ANTWORTEN 18

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".

 

bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm

Anbei kurz Screenshot vom Parameter;

 

AC27 Parameter_Auswahl.png

> Was ist mit "String" immer gemeint, ich lese es überall (Bei deutscher oder englischer Hilfe), aber finde es beim Typauswahl Menu nirgends.

 

ArchiCAD v6.5 - 28 (CHE Swiss Edition) / macOS / Windows (Switzerland / Schweiz)
Workstation office specs: mac OS, Apple M2 Max, 64 GB RAM
archig
Expert

String ist eine Textvariable. Also wenn du beim Variablentyp dieses ABC wählst, ist das genau das. Beim Wert kannst du dann Text eintippen. 

ArchiCAD 25 / Windows 10
archig
Expert

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
ArchiCAD 25 / Windows 10

Guten Tag archig,

 

Danke für den Hinweis.

Wie wäre das Beispiel wenn ich z.B. vier anstatt zwei Varianten habe?

ArchiCAD v6.5 - 28 (CHE Swiss Edition) / macOS / Windows (Switzerland / Schweiz)
Workstation office specs: mac OS, Apple M2 Max, 64 GB RAM

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)

ArchiCAD 25 / Windows 10
Jochen Suehlo
Moderator

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
Jochen Suehlo . AC12-27 . MAC OSX 14.4 . WIN11
GDL object creation: b-prisma.de

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.

 

 

bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm
torben_wadlinger
Virtuoso

Es fehlt einfach eine select case Bedingung im GDL. 

Keine Antwort gefunden?

Andere Beiträge
im Board ansehen

Zurück zum Board

Neueste Lösungen durchsuchen

Akzeptierte Lösungen zeigen

Eine neue Diskussion starten!

Neues Thema erstellen