Robuste GDL-Objekte fangen ungültige Zustände ab, bevor sie zu Laufzeitfehlern führen. Die häufigsten Fehlerquellen und ihre Absicherung:


Stiftfarben (PEN)

Stiftnummern müssen in Archicad immer ≥ 1 sein (außer bei Hintergrundstiften). Werte von 0 oder negativen Zahlen führen zu Fehlern.

GDL
! --- PEN darf nicht kleiner als 1 sein 
IF pen < 1 THEN pen = 1 
! --- Gleiches gilt für alle abgeleiteten Stiftparameter 
IF post_fill_pen < 1 THEN post_fill_pen = 1 
IF post_fill_bg_pen < 1 THEN post_fill_bg_pen = 1 
IF line_pen < 1 THEN line_pen = 1

Fehlende Schraffur (FILL)

Referenziert ein Objekt eine Schraffur per Name, kann diese im Zielprojekt fehlen. Vor der Verwendung ist daher zu prüfen, ob sie existiert:

GDL
! --- Prüfe, ob "Misch-Schraffur 50 %" im Projekt vorhanden ist 
fill50 = IND(FILL, "Misch-Schraffur 50 %") 
IF fill50 > 0 THEN 
    framefill = fill50 
ELSE 
    framefill = 1 ! Fallback auf erste verfügbare Schraffur 
ENDIF 

! Anschließend Abfrage des Namens
rrr = REQUEST("Name_of_Fill", framefill, fillName)

Hinweis: IND() gibt 0 zurück, wenn das Element nicht gefunden wurde – dieser Fall muss immer abgefangen werden.

Linienstärken (LINE_TYPE)

Analog zu Schraffuren können auch Linientypen im Zielprojekt fehlen:

GDL
! --- Prüfe, ob der Linientyp vorhanden ist
linType = IND(LINE_TYPE, "Strichlinie")

IF linType < 1 THEN linType = 1    ! Fallback auf Standardlinie

Divisions- und Modulo-Operationen

Division durch null ist ein klassischer Laufzeitfehler:

GDL
! --- Division absichern
eps = 0.0001
IF ABS(divisor)  eps THEN
    ergebnis = zaehler / divisor
ELSE
    ergebnis = 0    ! oder sinnvollen Defaultwert setzen
ENDIF

! --- Gleiches gilt für MOD
IF anzahl > 0 THEN
    rest = wert MOD anzahl
ELSE
    rest = 0
ENDIF

Array-Grenzen

Zugriffe außerhalb eines Array-Index führen zu Laufzeitabbrüchen:

GDL
! --- Vor Array-Zugriff Indexgrenzen prüfen
IF idx >= 1 AND idx <= VARDIM1(myArray) THEN
    wert = myArray[idx]
ELSE
    wert = 0    ! Fallback
ENDIF

Geometrische Mindestwerte

Längen, Breiten und Höhen von null erzeugen degenerierte Geometrie:

GDL
! --- Mindestmaße sicherstellen
IF A < 0.001 THEN A = 0.001
IF B < 0.001 THEN B = 0.001
IF ZZYZX < 0.001 THEN ZZYZX = 0.001

! --- Winkel im gültigen Bereich halten
IF winkel < 0    THEN winkel = 0
IF winkel > 360 THEN winkel = 360

Materialien und Oberflächen

GDL
! --- Prüfe, ob das Material im Projekt vorhanden ist
matIdx = IND(MATERIAL, mat_name)

IF matIdx < 1 THEN
    matIdx = 1    ! Fallback auf erstes verfügbares Material
ENDIF

MATERIAL matIdx

REQUEST-Abfragen

REQUEST() gibt 0 zurück, wenn die Abfrage fehlschlägt – das Ergebnis ist immer zu prüfen:

GDL
! --- REQUEST-Rückgabe absichern
rrr = REQUEST("Name_of_Fill", framefill, fillName)

IF rrr <> 1 THEN
    fillName = "unbekannte Schraffur"    ! Fallback-Text
ENDIF

Übersicht: Absicherungsregeln

Typ Fehlerquelle Absicherung
PEN Wert < 1 IF pen < 1 THEN pen = 1
FILL / LIN / MATERIAL Name nicht im Projekt IND() prüfen, Fallback auf Index 1
Division / MOD Divisor = 0 IF divisor <> 0 THEN ...
Array Index außerhalb Bounds VARDIM1() / VARDIM2() prüfen
Geometrie Wert = 0 oder negativ Mindestwert erzwingen
REQUEST Abfrage schlägt fehl Rückgabewert rrr auf = 1 prüfen

 

Grundsatz: Jeder Wert, der aus einem Benutzerparameter, einem REQUEST oder einem IND-Aufruf stammt, ist als potenziell ungültig zu behandeln und vor der Verwendung zu validieren.