IFC im Notepad: ein Gebäude lesen mit drei Zeilen IfcOpenShell-python
IFC ist ein Klartext-STEP-Graph, den du im Notepad öffnest. Lese und bearbeite ein echtes Gebäude in drei Zeilen IfcOpenShell-python — ohne Lizenz, ohne Vendor-Lock-in.
Öffne ein echtes Gebäude in drei Zeilen Python, und das erste, das dir auffällt, ist, was fehlt: keine Lizenz-Dongle, kein Cloud-Workflow, kein proprietärer Viewer. Der IfcOpenShell «Hello, world!»-Crashkurs startet dich mit import ifcopenshell und model = ifcopenshell.open('model.ifc'), und von diesem Moment an ist das Gebäude nur Daten, die du gehen kannst. Das ist das Signal, auf dem sich zu stoppen lohnt — nicht ein neues Feature, sondern eine Erinnerung daran, was IFC eigentlich unter jedem BIM-Tool ist, das es stillschweigend konsumiert.
Denn die Struktur ist hier die ganze Lektion. Eine IFC-Datei ist keine kompilierte Binärdatei; sie ist eine STEP Physical File (SPF), die Klartextcodierung gemäss ISO 10303-21 — Text, den du in einem Editor öffnest und Zeile für Zeile liest. Jede Zeile ist eine Entity, und jede Entity ist eine geordnete Liste von Attributen plus eine Menge von Verweisen auf andere Entities. Formal ist ein IFC-Modell ein gerichteter Graph: Knoten sind Entities, Kanten sind Verweise. Wenn die Dokumentation dir model.traverse(wall) (die Elemente, auf die eine Wand zeigt) und model.get_inverse(wall) (die Elemente, die auf sie zurück zeigen) zeigt, gibt sie dir die zwei Richtungen dieses Graphen in die Hand. Lerne, diese Kanten zu lesen, und du verstehst IFC besser als die meisten, die es eine Dekade lang exportiert haben.
←HEUTE: IfcOpenShell-python liest ein Live-Gebäudemodell in drei Zeilen; die Datei öffnet sich im Notepad, keine Lizenz, kein Server.
→3012: Die Plugins sterben und die Vendors fusionieren, aber eine STEP-Datei, die ein 25-Jähriger mit blossem Auge lesen kann, überlebt jeden einzelnen.
Angelpunkt: Ein Format, das du von Hand parsen kannst, ist die einzige Geometrie, die du noch verteidigen kannst, nachdem das Werkzeug, das sie gezeichnet hat, weg ist.
Schau dir eine Entity an, die in SPF-Form geschrieben ist — das ist die exakte Form, die der Crashkurs erzeugt, wenn du eine Wand mit Schlüsselwort-Argumenten erstellst:
#1=IfcWall('0EI0MSHbX9gg8Fxwar7lL8',$,'Wall Name',$,$,$,$,$,$)
Wenn du es in Teile zerlegst, fällt die ganze Grammatik von IFC heraus. #1 ist die STEP ID — die Adresse der Entity in der Datei, die Nummer, die du zum Querverweis verwenden würdest. IfcWall ist die Klasse, der Typ im Vererbungsbaum des Schemas (deshalb gibt wall.is_a('IfcElement') auch True zurück — eine Wand ist ein Element). Der zitierte String '0EI0MSHbX9gg8Fxwar7lL8' ist das erste Attribut, die GlobalId: eine 22-stellige Base64-Codierung einer 128-Bit-GUID, bestimmt, die Identität des Objekts über jeden Export und jedes Werkzeug hinweg zu sein. Jedes $ ist ein nicht gesetztes Attribut — OwnerHistory, Description und der Rest auf null gelassen. Und 'Wall Name' ist das dritte Attribut, der menschenlesbare Name. Die Attribut-Reihenfolge ist durch das Schema festgelegt; deshalb lässt dich IfcOpenShell einen Wert sowohl positionell (wall[2]) als auch nach Name (wall.Name) erreichen. Nichts ist verborgen. Dies ist buildingSMART’s IFC — das als ISO 16739 veröffentlichte Schema — das genau das tut, was ein Datenaustauschstandard tun sollte: das Gebäude in einer Form beschreiben, die kein einzelner Vendor besitzt.
Das Werkzeug: IfcOpenShell ist das Open-Source-Toolkit, auf dem die meiste freie openBIM-Welt aufgebaut ist — ein C++-Kern mit einer Python-Bindung (ifcopenshell-python), die IFC2X3, IFC4 und IFC4X3 liest, bearbeitet und schreibt. Es ist die gleiche Engine unter Bonsai (natives IFC-Authoring in Blender). Wenn du ernsthafte BIM-Arbeit machst, ist dies langfristige Infrastruktur, kein Wochenend-Spielzeug. Ein Nachmittag damit ist ein Nachmittag, in dem du die Sprache lernst, die dein Authoring-Werkzeug nur mit Akzent spricht.
Setup:
# Python 3.11+; ein frisches venv hält deine CAD-Workstation sauber
python -m venv .venv
.venvScriptsactivate # Windows; verwende source .venv/bin/activate auf macOS/Linux
pip install ifcopenshell
# beweise, dass es gegen jedes .ifc auf der Festplatte funktioniert
python -c "import ifcopenshell; m=ifcopenshell.open('model.ifc'); print(m.schema)"
# -> IFC2X3, IFC4, oder IFC4X3
Kein Modell zur Hand? Die Dokumentation zeigt auf ein kleines Sample vom Institute for Automation and Applied Informatics (IAI) am Karlsruhe Institute of Technology — es ist auf Deutsch, also, wie der Crashkurs fröhlich warnt, «brauchst du vielleicht etwas Kreativität beim Lesen der Daten.» Für einen PAZ-Leser ist das ein Feature, kein Bug.
Erste Schritte:
- Laden und orientieren:
print(model.schema)sagt dir, welchen IFC-Dialekt du verwendest — das entscheidet alles Nachfolgende. - Etwas Echtes zählen:
walls = model.by_type('IfcWall'); print(len(walls)). Du hast jetzt einen Live-Zugriff auf jede Wand in einem fremden Modell. - Eine untersuchen:
wall = walls[0]; print(wall.get_info())gibt ihre Attribute als Wörterbuch aus;ifcopenshell.util.element.get_psets(wall)holt die Eigenschaftssätze — diePset_WallCommon.LoadBearingund benutzerdefinierten SwissFireRatingFelder, wo jedes Handover-Argument eigentlich lebt. - Ändern und speichern: weise
wall.Name = 'Reviewed'neu zu, dannmodel.write('checked.ifc'). Du hast ein Gebäude in normalem Python bearbeitet.
Atelier: PAZ hat diesen Faden schon früher behandelt — unser openBIM-Übergabe-Beitrag zeigte, dass zwei Teams 100% normenkonform sein können und sich trotzdem zwei verschiedene Gebäude übergeben können, weil das Vokabular geteilt ist, aber der Dialekt nicht. IfcOpenShell ist, wie ein Schweizer Atelier aufhört, den Export-Button zu vertrauen, und anfängt zu lesen, was es gesendet hat. Der nächste Schritt: Bevor das nächste IFC dein Büro verlässt, führe ein fünf-Zeilen-Skript aus, das model.schema ausdruckt, die Anzahl jedes by_type zählt, das du zu liefern versprochen hast, und get_psets auf ein repräsentatives Element pro Disziplin anwendet — und hänge diesen Ausdruck ans Übergabedokument. Du hast gerade «Ich habs exportiert» in «hier ist, was ich exportiert habe» — mit Zahlen — verwandelt.
Hack: Gehe den Referenzgraph einer Wand entlang, um zu sehen, welche Öffnungen, Mengen und Beziehungen tatsächlich auf sie zurück zeigen — die inversen Kanten, die dir kein Property Panel zeigt. So erkennst du eine Tür, die nie richtig angebunden wurde, bevor das Modell auf die Baustelle kommt.
import ifcopenshell
model = ifcopenshell.open('model.ifc')
wall = model.by_type('IfcWall')[0]
for ref in model.get_inverse(wall): # wer verweist auf diese Wand?
print(ref.is_a(), '->', getattr(ref, 'Name', ''))
Der Trade-off ist ehrlich und verdient klare Worte: IfcOpenShell gibt dir den rohen Graph, nicht die parametrische Intelligenz. Dein Authoring-Werkzeug weiss, dass ein Fenster in eine Wand gehört, und bewegt es, wenn die Wand sich bewegt; die IFC-Datei zeichnet nur die Beziehung auf, wie sie beim Export stand. Lies sie, erwarte nicht, dass sie sich parametrisch verhält. Genau deshalb ist die Lesefähigkeit wichtig — die Datei ist ein Snapshot, den du verifizieren musst, nicht ein Live-Modell, dem du vertrauen kannst.
Und hier ist der lange Blick vom Schreibtisch, der erlebt hat, wie Plugins obsolet wurden: die parametrische Arbeit, die meine Generation bereut, war nie die hässliche Form — es war das Modell, dessen Logik niemand rekonstruieren konnte, nachdem die Software, die es erstellte, nicht mehr unterstützt wurde. Eine Geometrie, die du nur in einer nicht mehr unterstützten Anwendung öffnen kannst, ist eine schöne Vermutung. Eine STEP-Datei, die du immer noch von Hand parsen kannst, ist ein Gebäude, das du immer noch verteidigen kannst. Bewahre das lesbare Format; der schicke Viewer wird dich nicht überdauern.
Learn-it:
- Das Projekt: IfcOpenShell — Startseite & Downloads
- Der Crashkurs: ifcopenshell-python «Hello, world!»
- Natives IFC-Authoring: Bonsai (IFC in Blender)
- Der breitere offene Stack: OSArch AEC Free Software directory
- Der Standard selbst: buildingSMART — IFC-Schema
- PAZ-Anmerkung: Die 3 Dokumentationslücken — Archicad Python
QUELLE · ↗
PAZ Kaffi · interdisziplinäre Redaktionsarbeit, geleitet von der PAZ Academy