abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Wir schätzen Ihren Input!
Bitte nehmen Sie an der Umfrage zu Archicad 28 Startbildschirm und Lerninhalte/Schnell-Tutorials teil

Programmierung
Alles über Programmierung in GDL und Python

IF mit mehreren Bedingungen möglich?

snow
Moderator
Hallo ihr lieben,

ich frage mich gerade, ob das möglich ist... meine, in diversen Skripts schon mal gesehen habe, dass bei IF eine Zahl angegeben ist – vielleicht hat das ja was damit zu tun...

Dachte mir, ich könnte meiner Tür eine 'Ausführung als Schwingtür-Option' hinzufügen.
Da ich aber für das Grundriss-Symbol auch gerade und gebogenen Öffnnungslinien haben will, bräuchte ich jetzt wohl Bedingungskombinationen, wie:

WENN "Öffnungslinie gerade' UND "Schwingtür" DANN usw.

Lässt sich so was programmieren?
Archicad For Future F R E E D O M for-COLORS
______________________________________

archicad versions 8-27 | mac os 13 | win 10
14 ANTWORTEN 14
Frank Beister
Moderator
Die Bedingung in IF_THEN kann auch eine boolesche Operation sein.
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
Anonymous
Nicht anwendbar
Ja, du kannst genau so etwas wie Du beschrieben hast machen:

IF Bedingung_1 = "x" AND Bedingung_2 = "y" THEN
Oder mit "OR"
Oder kombiniert: IF (bed1 AND bed2) OR (bed3 and bed4) THEN
snow
Moderator
OK. Das stecke also hinter diesen Zahlen... dann werde ich mir das mal zu Gemüte führen.

Was ich inzwischen entdeckt habe, ist, dass sich die IF-Befehle ja auch verschachteln lassen:

z.B.
IF *Bedingung trifft nicht zu
IF *Bedingung trifft zu ! wird dann auch nicht ausgeführt, also z.B. nichts gezeichnet...
ENDIF
ENDIF
Archicad For Future F R E E D O M for-COLORS
______________________________________

archicad versions 8-27 | mac os 13 | win 10
Frank Beister
Moderator
Letztlich ist bedingung nur eine einstellige, binäre Zahl: 0 oder 1.
Alle Vergleichsoperationen ergeben als Ergebnis aber auch nur eine solche binäre Zahl, mit der man in AC sogar rechnen kann. Was programmstilistisch nicht so schön ist, aber kompakter Code werden kann.

bedingung = (5>2) + (2<5)
text2 0,0, bedingung ! ergibt 2


Ob es wie bei "Punkt vor Strich" in GDL auch eine Hierarchie bei dieser Art Operationen AND, OR und EXOR gibt, weiß ich nicht. Auch ob Vegleichsoperatoren dabei Priorität vor booleschen haben.

s= -0.3
text2 0, 0*s, 1 < 0 and 0 < 1
text2 0, 1*s, 1 > 0 and 0 < 1
text2 0, 2*s, 1 < 0 and 0 < 2


Die sichere Seite sind Klammern. Sie dienen auch der Übersichtlichkeit.
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
archig
Expert
@ beister: Gut zu wissen!
Aber im GDL Code würde ich das so eher nicht verwenden. Du sagst ja auch "programmstilistisch nicht so schön"

@ achmed:
beim verschachtelten Einsetzen von If solltest du das zweite if bis zum zugehörenden endif einrücken
Das macht das Ganze übersichtlicher.

Und Überblick ist notwendig, denn manchmal macht man auch einen Fehler: Beim Prüfen des Skripts meldet ArchiCAD zwar, wenn es endifs vermisst. Aber ohne Überblick über Verschachtelungen wird es schwer, rauszufinden, wo.
ArchiCAD 25 / Windows 10
Ma_Scht
Advocate
Was auch flippig ist, in das Konzept der StatusCodes im GLD Handbuch um Mehreres zu schalten OHNE die ANDs und ORs (die nebenbei auch in Klammern verschachtelt werden können/müssen).

j kann 0 oder 1 sein

j1*1
j2*2
j3*4
j4*8

IF j1*1 + j2*2 = 3 THEN
...
ENDIF

STRINGs als Bedingung sind kotzlangsam.
Schau Dir die GS-Scripte an!
Dort wird im Parameter-Script grundsätzlich die STRING-Bedingung in Zahlenwerte umgeackert und auf versteckten PARAMETERN abgelegt. Damit wird dann weitergearbeitet.
Gruß
archig
Expert

Schau Dir die GS-Scripte an!
...


ein guter tipp, um alle, die mit GDL anfangen, zu entmutigen 😉

die GS Skripte sind doch eher etwas unübersichtlich, finde ich.
ArchiCAD 25 / Windows 10
snow
Moderator
Kann es sein, dass das so nicht funktionieren kann:

IF gs_shadow=0 AND gs_shadow_r=0 THEN SHADOW OFF, OFF
IF gs_shadow=1 AND gs_shadow_r=0 THEN SHADOW ON, OFF
IF gs_shadow=0 AND gs_shadow_r=1 THEN SHADOW OFF, ON
IF gs_shadow=1 AND gs_shadow_r=1 THEN SHADOW ON, ON


... oder liegt es vielleicht doch an was anderem – vielleicht dass die Parametereinstellungen nicht ankommen (Macro), dass sich hier der Schattenempfang nicht abstellen lässt?
Archicad For Future F R E E D O M for-COLORS
______________________________________

archicad versions 8-27 | mac os 13 | win 10
Frank Beister
Moderator
Ich vermute, dass du zwei Schalter hast, die 4 Kombinationen zulassen und deine Code reagiert auf genau diese Kombination. Wichtig ist, dass die beiden Parameter vom Typ Boolean oder zumindest Integer sind.
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