IFC-Dateien für das Web parsen: Ein Leitfaden zu Open-BIM-Daten

Warum IFC-Dateien parsen?

Jedes BIM-Modell muss irgendwann sein Autorenwerkzeug verlassen. Architekten exportieren aus ArchiCAD, Tragwerksplaner aus Tekla, TGA-Ingenieure aus Revit — und das gemeinsame Format, das alle sprechen, ist IFC (Industry Foundation Classes).

Wenn man webbasierte Tools für die Bauindustrie baut — ob Modellviewer, Mengenermittlung, automatisierte Normprüfung oder HLK-Berechnungsplattform — muss man IFC-Dateien lesen können. Das Problem: IFC-Dateien sind dicht, tief verschachtelt und verwenden ein Format (STEP/ISO 10303-21), das die meisten in der Branche noch nie von innen gesehen haben.

Dieser Beitrag erklärt, was in einer IFC-Datei steckt, wie man nützliche Daten daraus extrahiert und wie man diese Daten für Webanwendungen verfügbar macht.

Was steckt in einer IFC-Datei?

Eine IFC-Datei ist eine Textdatei (üblicherweise mit der Endung .ifc), die im STEP-Format kodierte Entitätsinstanzen enthält. Jede Zeile definiert ein Bauwerkselement mit einer eindeutigen ID, einem Typ und einer Reihe von Attributen — Dinge wie ein Name, ein globaler Bezeichner, eine Platzierung im 3D-Raum und eine geometrische Form.

Die Entitätstypen bilden eine tiefe Hierarchie. Ein Kanalabschnitt ist beispielsweise ein spezieller Typ eines Strömungssegments, das ein Typ eines Verteilungselements ist, das ein Typ eines Bauwerksprodukts ist. Diese Hierarchie bestimmt, welche Eigenschaften und Beziehungen jedes Element haben kann.

Jedes Element verbindet sich mit anderen Elementen über Beziehungen. Ein Kanalabschnitt gehört zu einem Verteilungssystem (über eine Gruppenzuordnung). Ein Raum ist in einem Stockwerk enthalten (über eine räumliche Zuordnung). Eine Wand hat einen Satz von Eigenschaften (über eine Property-Set-Beziehung). Das Verständnis dieser Beziehungen ist der Schlüssel zur Extraktion nützlicher Daten aus IFC.

Das Werkzeug: IfcOpenShell

IfcOpenShell ist die De-facto-Open-Source-Bibliothek für die Arbeit mit IFC-Dateien. Sie bietet Python- und C++-APIs zum Lesen, Schreiben und Manipulieren von IFC-Daten und übernimmt das STEP-Parsing, die Entitätsauflösung und die Typhierarchie.

Mit IfcOpenShell kann man:

  • Eine IFC-Datei öffnen und die Schemaversion (IFC2x3 oder IFC4) sowie die Gesamtzahl der Entitäten inspizieren
  • Elemente nach Typ abfragen — alle Wände, alle Kanalabschnitte, alle Rohrsegmente, alle Räume
  • Eigenschaften lesen — sowohl Standard-Property-Sets (definiert durch die IFC-Spezifikation) als auch benutzerdefinierte Property-Sets
  • Beziehungen traversieren — finden, zu welchem System ein Kanal gehört, auf welchem Geschoss ein Raum liegt

TGA-Systemdaten extrahieren

Für HLK- und TGA-Anwendungen sind die wertvollsten Daten in einer IFC-Datei die Strömungssystemdaten — Kanäle, Rohre, Formstücke, Endgeräte und die Systeme, zu denen sie gehören.

Schritt 1: Kanal- und Rohrsegmente sammeln

Das Modell nach allen Kanalabschnitten und Rohrsegmenten abfragen. Für jedes Element extrahieren:

  • Identität: Global-ID und Elementname
  • Systemzugehörigkeit: Zu welchem Verteilungssystem gehört dieses Element? (z.B. „Zuluftanlage 1" oder „Trinkwasser warm"). Dies erfordert das Traversieren der Gruppenzuordnungsbeziehungen.
  • Abmessungen: Nenndurchmesser (bei runden Kanälen/Rohren), Breite und Höhe (bei rechteckigen Kanälen) und Länge. Diese kommen aus Standard-Property-Sets.
  • Material: Die Materialspezifikation, falls verfügbar.
  • Lage: Das Stockwerk, das das Element enthält, und seine 3D-Koordinaten.

Schritt 2: Property Sets verarbeiten

IFC organisiert Elementdaten in Property Sets (Psets). Es gibt zwei Arten:

  • Standard-Psets (Namen beginnend mit Pset_ oder Qto_) — Durch die IFC-Spezifikation definiert, konsistent über alle Autorenwerkzeuge. Beispiele: Nenndurchmesser und Form bei Kanalabschnitten; Länge und Oberfläche bei Mengenauswertungen.
  • Benutzerdefinierte Psets — Definiert durch das Autorenwerkzeug oder die BIM-Standards des Büros. Hier findet man Dinge wie Dämmstärke, Brandschutzklasse, Systemkürzel und andere projektspezifische Daten. Namenskonventionen variieren stark zwischen Büros.

Schritt 3: Räumliche Hierarchie auflösen

Jedes Element existiert irgendwo in der räumlichen Struktur des Gebäudes: Grundstück → Gebäude → Geschoss → Raum. Um herauszufinden, auf welchem Geschoss ein Kanalabschnitt liegt, traversiert man die räumlichen Zuordnungsbeziehungen.

IFC-Daten über eine Web-API bereitstellen

Sobald man Daten aus IFC-Dateien extrahieren kann, ist der nächste Schritt, sie für Webanwendungen verfügbar zu machen. Der typische Ansatz:

  1. Upload-Endpunkt — Eine IFC-Datei per HTTP-Upload entgegennehmen
  2. Parsen und extrahieren — Die Extraktionslogik serverseitig ausführen (Python mit IfcOpenShell)
  3. Strukturiertes JSON zurückgeben — Die extrahierten Daten in einem sauberen, gut strukturierten Format zurücksenden

Eine nützliche API-Antwort für TGA-Daten könnte enthalten:

  • Zusammenfassungsebene: Gesamtzahl der Segmente, Anzahl der Kanäle vs. Rohre, Liste der entdeckten Systeme
  • Systemebene: Für jedes System — Name, Elementanzahl, Gesamtlänge, Elementtypen
  • Elementebene: Für jedes Segment — ID, Name, Typ, System, Abmessungen, Material, Geschoss, Koordinaten

Für den Produktiveinsatz empfiehlt es sich, die IFC-Datei einmal zu parsen und die extrahierten Daten in einer Datenbank zu speichern. Nachfolgende Abfragen greifen dann auf die Datenbank zu statt die Datei erneut zu parsen — wichtig bei Dateien von 500 MB+ für ein vollständiges Gebäudemodell.

IFC4 vs. IFC2x3: Unterschiede, die zählen

Man begegnet in der Praxis zwei Haupt-IFC-Versionen:

MerkmalIFC2x3IFC4
TGA-SystemeGenerische SystementitätenSpezifische Verteilungssystementitäten
Ports/VerbindungenGrundlegende Port-DefinitionenBesser definiert, zuverlässiger
Property-VorlagenGrundlegendWiederverwendbare Property-Template-Definitionen
GeometrieÜberwiegend VolumengeometrieTessellierte Geometrie, bessere Kurven
DateigrößeTypischerweise kleinerGrößer durch reichhaltigere Daten

Die praktische Auswirkung: Bei der Systemdatenextraktion muss man beide Versionen berücksichtigen. IFC4 verwendet spezifischere Entitätstypen für Verteilungssysteme, während IFC2x3 generischere Systementitäten nutzt.

Praktische Anwendungsfälle

Sobald man IFC-Dateien parsen kann, sind die Anwendungen breit gefächert:

  • Automatisierte QA — Validieren, dass jeder Kanalabschnitt eine Dämmstärke hat, jedes Rohr eine Brandschutzklasse, jeder Raum eine Auslegungstemperatur.
  • Mengenermittlung — Gesamte Kanallänge nach Durchmesser, Rohrlänge nach Material, Anzahl der Formstücke nach Typ summieren. Direkt in die Kostenschätzung einspeisen.
  • Kollisions-Vorprüfung — Vor der aufwändigen Kollisionserkennung in Navisworks eine Bounding-Box-Vorprüfung durchführen.
  • Datenvalidierung — TGA-Elemente gegen eine Information Delivery Specification (IDS) abgleichen.
  • Berechnungseingabe — Raumvolumen, Hüllflächen und thermische Eigenschaften extrahieren und in HLK-Berechnungstools wie Mepbau einspeisen.

Performance-Tipps für große Modelle

  1. Früh filtern. Nur die benötigten Entitätstypen laden.
  2. Property-Lookups cachen. Das Traversieren von Beziehungen ist aufwändig bei tausenden Elementen.
  3. Einmal parsen, oft abfragen. Für Produktionsanwendungen die IFC-Datei einmal beim Upload parsen und die Daten in einer Datenbank speichern.
  4. Große Dateien streamen. Bei sehr großen Modellen Iterator-basiertes Parsing nutzen statt alles in den Speicher zu laden.

Bauen Sie Web-Tools rund um IFC-Daten? Ich freue mich über den Austausch. Schreiben Sie mir an hello@laborsam.com.