CH NEO-ZÜRICH AUSGABE
WETTER · GRAU 10°C
BLEND DES TAGES · 07/ROGUE
EST. 2027
DIE AEC CYBER MORGENZEITUNG

PAZ Kaffi

DESIGN · ABBRUCH · KOFFEIN · DEPESCHE
AUSGABE 1011 · 11 October 2026
SENDUNG 04:42 MEZ
2'400 BOGEN GEDRUCKT
LESEZEIT · 47 MIN
IfcOpenShell 0.9.0: Dein erstes Python-Türenverzeichnis mit Brandschutzcheck
Akademie
FRAME · 06:50
11-10-2026

IfcOpenShell 0.9.0: Dein erstes Python-Türenverzeichnis mit Brandschutzcheck

IfcOpenShell 0.9.0 neu geschrieben. Mit pip installieren, beliebige IFC öffnen, Türenverzeichnis als CSV schreiben, fehlende FireRatings flaggen.

IfcOpenShell 0.9.0 ist raus. Gemäss den IfcOpenShell-v0.9.0-Versionshinweisen auf GitHub ist es «der letzte grosse Meilenstein vor IfcOpenShell 1.0». Gemäss PyPI wurde das Python-Paket ifcopenshell 0.9.0 am 29. September 2026 hochgeladen, und der Release-Tag ifcopenshell-v0.9.0 folgte auf GitHub am 1. Oktober 2026. Darunter hat die Community das IFC-Datenmodell und den Parser von Grund auf neu aufgebaut. Oben ist das Python, das Architekten tatsächlich schreiben, noch immer eine Handvoll Zeilen. Der Motor ist neu und das Interface, das man berührt, noch überschaubar – ein guter Moment, die Grundzüge zu lernen.

Jedes Schweizer Büro empfängt IFC-Dateien vom Ingenieur, dem Fassadenplaner und dem anderen Architekten des Wettbewerb-Teams. Die meisten dieser Dateien werden in einem Viewer geöffnet, gedreht und geschlossen. Niemand stellt ihnen eine Frage, aber die Antworten sind bereits in der Datei. Jede Tür darin hat entweder eine Brandschutzklasse oder nicht, und man kann alle lesen, bevor der Kaffee kalt wird.

Was die Community tatsächlich ausgeliefert hat

Die IfcOpenShell-Versionshinweise berichten in ihrem Highlights-Abschnitt von einem kompletten Neuaufbau des C++-IFC-Datenmodells und Parsers. Dies ist das «v1.0-Datenmodell»: Es basiert auf weak_ptr, hat eine Plug-in-Architektur für Schemas, Geometrie-Kernel und Serialisierer und unterstützt Lazy-Loading sowie seitenweises Parsing. Dieselben Highlights nennen zwei neue Geometrie-Kernel, Manifold und Passthrough, sowie Bonsai Viewer, einen neuen Web- und Desktop-Viewer mit GPU-Unterstützung. Bonsai Viewer bringt ein .ifcview-Cache-Format, Streaming, Verbund, Messwerkzeuge und einen WebAssembly-Build. Laut PyPI decken vorkompilierte Wheels Python 3.10 bis 3.15 unter der LGPLv3+-Lizenz ab. Die offizielle Installationsanleitung auf docs.ifcopenshell.org nennt denselben Python-3.10–3.15-Bereich und gibt einen einzigen Befehl an: pip install ifcopenshell.

Hinter dieser Ein-Zeilen-Installation stecken Jahre unspektakulärer Arbeit. Hunderte Menschen haben zu IfcOpenShell beigetragen. Zu den sichtbaren Kern-Beitragenden auf ifcopenshell.org gehören Dion Moult (der PyPI-Autor), Thomas Krijnen (aothms auf GitHub), Bruno Postle und Andrej730. Einen Parser zu bauen ist die halbe Arbeit. Die andere Hälfte ist, ihn in ein Wheel zu verwandeln, das sauber auf einem Büro-Laptop installiert, mit dokumentierten Helfern in ifcopenshell.util und einem Viewer, der im Browser läuft – und diese Hälfte ist oft die schwierigere. Diese Maintainer sind der Grund, dass ein Türenverzeichnis mit pip beginnt.

Eine Zeile lesen, bevor du eine schreibst

IFC ist kein kompiliertes Format. Es ist reiner Text, standardisiert von buildingSMART International, und man kann es in Notepad öffnen. Hier ist eine veranschaulichende IFC4-Türen-Zeile der Art, die ein Exporter schreibt:

#152=IFCDOOR('2O2Fr$t4X7Zf8NOew3FLOH',#5,'T02',$,$,#160,#170,$,2.1,0.9,.DOOR.,$,$);
  • #152 ist die lokale Kennung der Zeile. Andere Zeilen verweisen über sie auf diese Tür.
  • '2O2Fr$t4X7Zf8NOew3FLOH' ist die 22-stellige GlobalId, die exportübergreifend stabil bleibt.
  • #5 verweist auf die Owner History (wer das Element erstellt hat und wann).
  • 'T02' ist der Name. Die zwei $ danach sind eine leere Description und ein leerer ObjectType.
  • #160, #170 verweisen auf Placement (wo die Tür sitzt) und die Geometrie-Darstellung (wie sie aussieht).
  • 2.1, 0.9 sind OverallHeight und OverallWidth in den Projekteinheiten (2,1 m mal 0,9 m hier).
  • .DOOR. ist die PredefinedType-Enumeration.

Sieh, was aus dieser Zeile fehlt: das Brandschutzrating. Es sitzt in einem separaten Property Set, Pset_DoorCommon, das buildingSMART International definiert und das die Tür mit einer Beziehung anderswo in der Datei verlinkt. Das Skript unten folgt diesem Link für dich.

←HEUTE: IfcOpenShell 0.9.0 lässt sich mit einem pip-Befehl auf Python 3.10–3.15 installieren und liest jeden IFC4-Export.
→3012: Die Gebäude in Zürich, die heute noch repariert werden, sind die, deren Daten in einem Format geschrieben wurden, das jeder lesen kann.
Fulcrum: Eine offene Textdatei wird nur zur Infrastruktur, wenn normale Praktiker sie abfragen, nicht nur anschauen.

Das Tool: IfcOpenShell ist das freie, LGPLv3+-Toolkit zum Lesen und Schreiben von IFC. Es wird von einer offenen Community gepflegt und treibt Bonsai an (das native-IFC-Add-on für Blender), IfcTester für IDS-Checks und nun Bonsai Viewer. Ein Nachmittag lohnt sich, weil es «das Modell, das wir erhalten haben» in Daten verwandelt, die man zählen, filtern und zurückschicken kann.

Setup: Python 3.11 oder neuer von python.org installieren. Dann in einer frischen virtuellen Umgebung arbeiten. Wenn ein älteres ifcopenshell systemweit installiert ist, kann Python diese Kopie statt der neuen importieren, und das venv schliesst das aus.

mkdir ifc-doors && cd ifc-doors
python -m venv .venv
.venvScriptsactivate        # macOS/Linux: source .venv/bin/activate
pip install ifcopenshell==0.9.0
python -c "import ifcopenshell; print(ifcopenshell.version)"
# expected output: 0.9.0

Erste Schritte:

  1. Eine echte Datei nehmen: den eigenen IFC-Export des Büros oder eine beliebige IFC4-Datei aus einem aktuellen Projekt, egal ob sie aus einem Archicad-Workflow oder dem Tool eines Beraters stammt. In den Ordner kopieren.
  2. Das Folgende als door_schedule.py speichern. Es öffnet das Modell, läuft durch jede Tür, liest Pset_DoorCommon und das enthaltende Geschoss und schreibt eine CSV.
import csv, sys
import ifcopenshell
import ifcopenshell.util.element as ue
import ifcopenshell.util.selector as us

model = ifcopenshell.open(sys.argv[1], lazy=True)
print("Schema:", model.schema, "| ifcopenshell", ifcopenshell.version)

rows = []
for d in us.filter_elements(model, "IfcDoor"):
    common = ue.get_psets(d).get("Pset_DoorCommon", {})
    storey = ue.get_container(d)
    rows.append({
        "GlobalId": d.GlobalId,
        "Name": d.Name,
        "Storey": storey.Name if storey else "",
        "Width_m": d.OverallWidth,
        "FireRating": common.get("FireRating", ""),
        "IsExternal": common.get("IsExternal", ""),
    })

with open("door_schedule.csv", "w", newline="", encoding="utf-8") as fh:
    w = csv.DictWriter(fh, fieldnames=list(rows[0]))
    w.writeheader(); w.writerows(rows)

missing = [r["Name"] for r in rows if not r["FireRating"]]
print(f"{len(rows)} doors written; {len(missing)} without FireRating: {missing}")
  1. Führe aus: python door_schedule.py my_model.ifc, dann öffne door_schedule.csv in Excel oder LibreOffice. Der PAZ Research Desk führte es am 2. Oktober 2026 auf Windows mit ifcopenshell 0.9.0 auf einer dreier-Türen-IFC4-Testdatei aus. Es generierte eine korrekte CSV und gab 1 ohne FireRating: ['T02'] aus.
  2. Lies die Vorbehalte, bevor du den Zahlen traust. OverallWidth richtet sich nach den Projekteinheiten der Datei: Meter in dieser Testdatei, oft Millimeter in echten Exports. lazy=True ist neu in 0.9 und wurde bisher nur an einer kleinen Datei getestet.

Die zwei Helfer mit der echten Arbeit sind in der 0.9.0-API-Referenz dokumentiert. Laut der ifcopenshell.util.element-Doku ruft get_psets Property Sets mit ihren Eigenschaftsnamen und -werten ab, und get_container gibt den räumlichen Struktur-Container zurück – hier das Geschoss. Dieselben ifcopenshell.util-Helfer begegnen dir wieder bei IDS-Checks mit IfcTester und in Bonsai. Darum startet der Python-Track in den PAZ-Workshops hier, nicht mit Syntax-Drills.

Eine Einschränkung: Die Datei sagt nur, was der Exporter schreiben wollte. Eine Tür ohne Pset_DoorCommon gibt ein leeres Dict zurück, keinen Fehler, also kann «kein Rating» bedeuten, dass das Rating nie zugewiesen oder einfach nicht exportiert wurde. Entweder Fall, es lohnt sich, diese Frage an den Modellverantwortlichen zu schicken – und jetzt kommt sie mit einer GlobalId mit.

Atelier: Für ein kleines Büro in Zürich, das auf erhaltene IFCs abstimmt, braucht eine Modellkontrolle keinen Autorensitz und keinen Spezialisten mehr. Es braucht ein venv und etwa dreissig Zeilen, die ein Junior mit einem KI-Assistenten an der Seite lesen kann, und das ändert, wer im Team dem Modell schwierige Fragen stellen darf. Montagszug: door_schedule.py auf die letzte IFC deines Büros laufen lassen und die Liste der Türen ohne FireRating dem Modellverantwortlichen vor der nächsten Abstimmung mailen.

Hack: Frag den Selector nach Türen ohne Rating in einem Filterstring. Laut IfcOpenShell-Selector-Syntax nehmen Property-Filter die Form Pset.Prop=value an, mit Operatoren = != > >= < <= *= !*=. Mit = NULL bekommst du die Elemente, denen die Eigenschaft fehlt; die Doku zeigt die Inverse, != NULL, um die Elemente mit der Eigenschaft zu finden. Fünf Zeilen, keine Loop-Logik:

import ifcopenshell
import ifcopenshell.util.selector as us
model = ifcopenshell.open("my_model.ifc")
for d in us.filter_elements(model, "IfcDoor, Pset_DoorCommon.FireRating = NULL"):
    print(d.GlobalId, d.Name)

Wenn das läuft, versuch den Stretch, den die Doku andeutet: Tausch IfcDoor gegen IfcWall und Pset_DoorCommon gegen Pset_WallCommon. Die Doku zeigt IfcWall, Pset_WallCommon.ThermalTransmittance>1.5 als U-Wert-Filter – praktisch, wenn der Energieberater anfragt.

Zum Lernen:

Ein Wort aus dem späten 2070er. Die Gebäude, die schlecht gealtert sind in meiner Zeit, waren nicht die hässlichen. Es waren die, die keiner reparieren konnte, weil die Datei, die sie beschrieb, dunkel wurde mit ihrem Anbieter. Eine IFC, die man in Notepad lesen und mit LGPL-Code abfragen kann, ist das Gegenteil. Sich jetzt angewöhnen, sie abzufragen: ein Nachmittag.

Öffne die letzte IFC auf deinem Server und frag sie, welche Türen kein Brandschutzrating haben.

GEMELDET AUS
MIT-UNTERZEICHNER
PAZ Academy
VERTRAUEN
HIGH
NACHDRUCKE
© PAZ - PARAMETRIC ACADEMY ZURICH · ALLE RECHTE VORBEHALTEN

PAZ Kaffi · interdisziplinäre Redaktionsarbeit, geleitet von der PAZ Academy

⚑ FEHLER MELDEN · KORREKTUR EINSENDEN
◂ ZURÜCK ZUR TITELSEITE · PAZ KAFFI

© 2026 PAZ Academy.