Im vorherigen Artikel haben wir uns mit der Geschichte von IFC und den Grundlagen der Schema- und Dateiformate beschäftigen. Damit haben wir uns einen Überblick über die wichtigsten Aspekte verschafft und können nun einen Blick in eine IFC-Datei werfen, um zu sehen, wie die Informationen strukturiert sind.
Dieser Artikel konzentriert sich auf die allgemeine Organisation von IFC-Dateien und ihre Kernentitäten – die digitalen Bausteine, die Wände, Räume, Gebäude und mehr darstellen. In Teil 3 werden wir uns tiefer mit Eigenschaften und Beziehungen beschäftigen.
Bei der Arbeit mit IFC-Schemas in openBIM-Projekten ist es für Architekten, Ingenieure und BIM-Koordinatoren von entscheidender Bedeutung, die Struktur von IFC-Dateien zu verstehen. Eine IFC-Datei mag in einem Texteditor wie ein Block aus kryptischem Text aussehen, folgt jedoch einer klaren Logik. Sie ist in zwei Hauptteile unterteilt: 📂
Der Header definiert den Kontext einer IFC-Datei. Er teilt der empfangenden Software mit, um welche Art von Datei es sich handelt. Typische Inhalte sind: 📝
Ohne den Header wüsste die Software nicht, welche Regeln auf die folgenden Daten anzuwenden sind. Der Header ist beispielsweise entscheidend für die Interpretation der IFC-Schema-Version und die Gewährleistung der Kompatibilität. Stellen Sie sich den Header wie das Deckblatt eines technischen Berichts vor – ohne ihn ist der Rest viel schwieriger zu interpretieren.
ISO-10303-21;HEADER;FILE_DESCRIPTION(('no view'),'2;1'); FILE_NAME('C://der/pfad/zur/datei.ifc',('Linda'),('Software Name', 'Konrad-Zu 1,Germany'), 'EDMsix Version 2.0100.09 Sep 7 2016','Allplan 2019.1 24.06.2019 16:10:06',''); FILE_SCHEMA(('IFC4'));ENDSEC;
Der IFC-Datenabschnitt enthält die aktuellen Projektinformationen. Jedes Objekt im Projekt wird als Instanz einer Entität aus dem Schema dargestellt. 📊
Jede Instanz erhält:
Hier ist ein vereinfachtes Beispiel für eine Wand in STEP-Syntax:
#42 = IFCPROJECT('2C45vBrGbB_w_CB97snkya', ...);#101 = IFCBUILDING('0oHfLk3df5wPq6', ...);#201 = IFCBUILDINGSTOREY('3K9xGv4C5T$zQq', ...);#301 = IFCWALLSTANDARDCASE('1Lm8y2FfH9R7Ts', 'Wall-001', ...);
Der obige Ausschnitt zeigt, wie IFC-Entitäten referenziert und verschachtelt werden, was ein charakteristisches Merkmal des IFC-Schemas ist. Beispielsweise gehört die Wand (#301) zu einem Stockwerk (#201), das zu einem Gebäude (#101) gehört, das wiederum zum Projekt (#42) gehört.
Um dies zu verstehen, ist es hilfreich zu wissen, wie IFC intern aufgebaut ist. Entitäten befinden sich nicht alle auf derselben Ebene – sie sind in einer Hierarchie von Ebenen organisiert, die aufeinander aufbauen:
Diese Schichten (Kernel, Core, Interoperability, Domain) bilden das Fundament des Industry Foundation Classes (IFC)-Schemas und gewährleisten sowohl Flexibilität als auch Interoperabilität zwischen BIM-Tools. Diese Schichtung macht IFC sowohl flexibel und erweiterbar (neue Domänen können neue Entitäten hinzufügen) als auch konsistent (alles teilt einen gemeinsamen Kernel).
Zusätzlich zur Schichtung nutzt das IFC-Schema in hohem Masse die Vererbung – ein Konzept, das aus der objektorientierten Programmierung übernommen wurde. IFC-Entitäten existieren nicht isoliert, sondern übernehmen Attribute und Verhalten von übergeordneten Entitäten.
Nehmen wir das Beispiel IfcWall:
Diese hierarchische Vererbung hat zwei große Vorteile:
Der Nachteil? IFC-Dateien können dadurch abstrakt und ausführlich aussehen, da Attribute nicht immer dort definiert sind, wo man sie erwartet – sie können aus drei Ebenen höher in der Vererbungskette stammen.
Entitäten sind das Fundament von IFC. Jede Entität beschreibt eine bestimmte Art von Objekt oder Konzept und definiert, welche Attribute es haben kann (z. B. IfcWall, IfcDoor). 🧱
Wir können Entitäten in drei Hauptkategorien einteilen: physikalische Elemente, räumliche Struktur und Ressourcen.
Physische Elemente sind die wichtigsten Bestandteile des IFC-Schemas, da sie direkt den Bauelementen in BIM-Modellen zugeordnet werden können. Beispiele hierfür sind:
Eine der Schwierigkeiten bei IFC besteht darin, dass Geometrien auf verschiedene Arten definiert werden können:
Hier ist eine einfache Wand mit extrudierter Geometrie:
#100 = IFCCARTESIANPOINT((0.0,0.0));#101 = IFCAXIS2PLACEMENT2D(#100, $);#102 = IFCRECTANGLEPROFILEDEF(.AREA., 'Wall Profile', #101, 200.0, 3000.0);#103 = IFCDIRECTION((0.0,0.0,1.0));#104 = IFCAXIS2PLACEMENT3D(#100, #103, $);#105 = IFCEXTRUDEDAREASOLID(#102, #104, #103, 3000.0);#106 = IFCSHAPEREPRESENTATION(#context, 'Body', 'SweptSolid', (#105));#107 = IFCPRODUCTDEFINITIONSHAPE($,$,(#106));#108 = IFCWALLSTANDARDCASE('1Lm8y2FfH9R7Ts', 'Wall-001', $, $, #localplacement, #107, $);
Im obigen Beispiel wird eine Wand geometrisch durch ein extrudiertes rechteckiges Profil (200 mm × 3000 mm × 3000 mm) dargestellt:
Die Geometrie sagt uns, wie ein Element aussieht, aber nicht, wo es im Gebäude hingehört. Dafür verwendet IFC eine Platzierungshierarchie.
Jedes Element hat eine lokale Platzierung, die definiert ist durch:
Platzierungen sind in der Regel verkettet:
Diese Hierarchie spiegelt die reale Konstruktion wider: Eine Wand schwebt nicht einfach im 3D-Raum, sondern hat einen definierten Standort innerhalb eines Stockwerks, innerhalb eines Gebäudes, auf einem Standort.
Hier ist ein Beispiel für eine Wand, die in einem Stockwerk platziert wurde:
#200 = IFCCARTESIANPOINT((0.0,0.0,0.0));#201 = IFCAXIS2PLACEMENT3D(#200, $, $);#202 = IFCLOCALPLACEMENT($, #201); -- Placement of Ground Floor storey#210 = IFCCARTESIANPOINT((5000.0,2000.0,0.0));#211 = IFCAXIS2PLACEMENT3D(#210, $, $);#212 = IFCLOCALPLACEMENT(#202, #211); -- Placement of Wall relative to Storey#220 = IFCBUILDINGSTOREY('3K9xGv4C5T$zQq', 'Ground Floor', $, $, #202, $, $);#230 = IFCWALLSTANDARDCASE('1Lm8y2FfH9R7Ts', 'Wall-001', $, $, #212, #geometry, $);
Dieses Positionierungssystem ist ein Grund dafür, dass die IFC-Dateistruktur für digitale Bauabl äufe zuverlässig ist – vom Entwurf bis zur Ausführung vor Ort.
Räumliche Entitäten bilden das hierarchische Rückgrat jeder IFC-Datei und sind ein wesentlicher Bestandteil des IFC-Schemas. Sie sind für die Organisation aller physischen Elemente zwingend erforderlich.
Die Hierarchie sieht in der Regel wie folgt aus:
Jedes Element im Modell muss durch Beziehungen in dieser Hierarchie enthalten sein. Beispielsweise sind Wände und Decken in einem Stockwerk „enthalten”, das zu einem Gebäude gehört.
Ressourcen in IFC sind Entitäten, die Hilfsinformationen definieren, die von mehreren Elementen verwendet werden.
Einige wichtige Beispiele:
Durch die Trennung von Ressourcen und physischen Elementen können IFC-Dateien Konsistenz und Wiederverwendbarkeit im gesamten IFC-Schema gewährleisten. Wenn sich die Materialdefinition ändert (z. B. Wechsel von Beton C30/37 zu C35/45), können alle Elemente, die dieses Material verwenden, entsprechend aktualisiert werden.
Um die IFC-Dateistruktur besser zu verstehen, sehen wir uns ein einfaches, aber vollständiges Beispiel an: eine Wand, die im Kontext innerhalb eines Gebäudegeschosses positioniert ist. 🧱📐
#10 = IFCPROJECT('2C45vBrGbB_w_CB97snkya', $, 'Demo Project', $, $, $, $, (#50));#20 = IFCSITE('0oHfLk3df5wPq6', 'Main Site', $, $, #100, $, $, $, .ELEMENT., $);#30 = IFCBUILDING('1abCDeFgHiJkLmNo', 'Building A', $, $, #110, $, $, $, .ELEMENT., $);#40 = IFCBUILDINGSTOREY('3K9xGv4C5T$zQq', 'Ground Floor', $, $, #120, $, $, $, .ELEMENT., $);#100 = IFCLOCALPLACEMENT($, #200); -- Placement of site#110 = IFCLOCALPLACEMENT(#100, #210); -- Placement of building relative to site#120 = IFCLOCALPLACEMENT(#110, #220); -- Placement of storey relative to building#130 = IFCLOCALPLACEMENT(#120, #230); -- Placement of wall relative to storey#200 = IFCAXIS2PLACEMENT3D(#500, $, $);#210 = IFCAXIS2PLACEMENT3D(#501, $, $);#220 = IFCAXIS2PLACEMENT3D(#502, $, $);#230 = IFCAXIS2PLACEMENT3D(#503, $, $);#500 = IFCCARTESIANPOINT((0.0,0.0,0.0));#501 = IFCCARTESIANPOINT((0.0,0.0,0.0));#502 = IFCCARTESIANPOINT((0.0,0.0,0.0));#503 = IFCCARTESIANPOINT((5000.0,2000.0,0.0)); -- Wall offset 5 m X, 2 m Y#600 = IFCCARTESIANPOINT((0.0,0.0));#601 = IFCAXIS2PLACEMENT2D(#600, $);#602 = IFCRECTANGLEPROFILEDEF(.AREA., 'Wall Profile', #601, 200.0, 3000.0);#603 = IFCDIRECTION((0.0,0.0,1.0));#604 = IFCAXIS2PLACEMENT3D(#500, #603, $);#605 = IFCEXTRUDEDAREASOLID(#602, #604, #603, 3000.0);#700 = IFCSHAPEREPRESENTATION(#50, 'Body', 'SweptSolid', (#605));#710 = IFCPRODUCTDEFINITIONSHAPE($,$,(#700));#800 = IFCWALLSTANDARDCASE('1Lm8y2FfH9R7Ts', 'Wall-001', $, $, #130, #710, $);#900 = IFCRELAGGREGATES('rel-1', $, $, #10, (#20)); -- Project contains site#901 = IFCRELAGGREGATES('rel-2', $, $, #20, (#30)); -- Site contains building#902 = IFCRELAGGREGATES('rel-3', $, $, #30, (#40)); -- Building contains storey#903 = IFCRELCONTAINEDINSPATIALSTRUCTURE('rel-4', $, $, (#800), #40); -- Storey contains wall
Diese Kette von Entitäten und Referenzen gibt der Wand ihre Bedeutung. Es handelt sich nicht nur um einen 3D-Block, sondern um eine bestimmte Wand in einem bestimmten Stockwerk mit einem definierten Material, das die Software konsistent interpretieren kann.
Entitäten können zwar abstrakt erscheinen, aber sie sind es, die IFC von einem 3D-Modell in einem CAD-Tool unterscheiden. IFC besteht nicht nur aus Formen – es handelt sich um strukturierte Informationen mit Identität, Hierarchie und Bedeutung: ⚙️
Aus diesem Grund ist IFC so ausführlich und manchmal schwer zu lesen – aber auch deshalb ist es so leistungsstark.
Das IFC-Schema ist mehr als nur ein Dateiformat – es ist die strukturierte Grundlage für die Interoperabilität von openBIM.
In diesem Artikel haben wir die IFC-Datei geöffnet und uns ihre Gesamtstruktur (Header und Daten) sowie die darin enthaltenen Entitäten angesehen: physikalische Elemente, räumliche Hierarchie und Ressourcen. ✅📌
Im nächsten Artikel (Teil 3) werden wir uns mit den Eigenschaften und Beziehungen befassen, die Entitäten bereichern und miteinander verbinden. Hier zeigt IFC seine wahre Stärke: Es verwandelt unverbundene Objekte in ein integriertes digitales Modell.
Wenn Sie Fragen haben, zögern Sie nicht, unten einen Kommentar zu hinterlassen!