Die Geheimnisse von IFC – Teil 2: Positionierung

Wie wir bereits in einem früheren Artikel festgestellt haben ist die Angabe der Position für ein Element mit Hilfe des IFC-Schemas grundsätzlich optional. In diesem Blog-Post wollen wir uns nun der Angabe der Position nun etwas genauer widmen, denn auch hier sind wieder einige wenig bekannte Aspekte „versteckt“, welche die Flexibilität von IFC sehr deutlich demonstrieren.

Die Eigenschaft ObjectPlacement kommt im Zuge der Vererbung bei der IFC-Klasse IfcProduct hinzu. Hierbei handelt es sich um eine sogenannte abstrakte Klasse, das heißt, dass wir kein konkretes Element definiereren können, welches dieser Klasse zugeordnet ist. Sie dient lediglich als Schablone für weitere, untergeordnete Klassen.

Die Platzierung des Objekts kann nunmehr auf eine der drei folgenden Arten erfolgen (vor IFC4x1 RC 3 waren es nur die ersten beiden):

  • durch eine lokale Positionierung (IfcLocalPlacement)
  • durch eine Rasterpositionierung (IfcGridPlacement)
  • durch eine lineare Platzierung (IfcLinearPlacement).

IfcLocalPlacement

Diese Variante ist die gängigste, auch wenn sie im Detail doch etwas komplexer – und flexibler – ist als auf den ersten Blick erkennbar. Ein Eintrag „IfcLocalPlacement“ in einer IFC-Datei setzt sich aus den folgenden zwei Attributen zusammen:

  • PlacementRelTo und
  • IfcAxis2Placement.

Die Eigenschaft PlacementRelTo (optional) referenziert die Position relativ zur Position eines anderen Elements. Hierfür gibt es einige Konventionen, um die Interpretation der Datei für die Programme zu erleichtern; die Einhaltung ist jedoch grundsätzlich nicht verpflichtend. Beispielhaft seien im Folgenden einige Anwendungen angeführt, eine ausführlichere Auflistung findet sich beispielsweise hier.

Grundstücke (IfcSite) sollen absolut positioniert werden, sich also auf das (Welt-)Koordinatensystem des Projektes beziehen. Gebäude (IfcBuilding) referenzieren die Position des Grundstückes. Elemente (IfcElement) werden relativ zu dem räumlichen Objekt platziert, in dem sie sich befinden (das könnte ein Grundstück sein, etwa für Bepflanzungen, aber auch das Gebäude bzw. ein Gebäudeteil). Es sollte jedoch die selbe Referenz gewählt werden, auf die sich auch die räuliche Zuordnung (also das Objekt, welches mittels IfcRelContainedInSpatialStructure verknüpft wird) bezieht. Das klingt jetzt reichlich kompliziert, ist aber für die weiter Betrachtung in diesem Artikel nicht weiter wichtig.

Die zweite Eigenschaft IfcAxis2Placement stellt uns eine Art lokales Koordinatensystem zur Verfügung, wobei dies eine 2D- (IfcAxis2Placement2D) oder 3D-Koordinate (IfcAxis2Placement3D) sein kann (um auch hier wieder flexibel zu sein). Wir werden hier die dreidimensionale Variante weiter untersuchen.

Diese wird ihrerseits durch drei Attribute definiert, wobei nur jene namens Location erforderlich ist. Damit wird die Position des Basispunktes des zu platzierenden Objektes festgelegt, und zwar durch einen Punkt (IfcCartesianPoint) mit X-, Y- und Z-Koordinaten. Optional können für IfcAxis2Placement3D noch relative Verdrehung mittels Axis (Richtungvektor der Z-Achse) und/oder RefDirection (Richtungsvektor der X-Achse) definiert werden.

Wir können also zusammenfassen: die Position eines Objektes in einem Gebäude kann beliebig komplex verschachtelt werden. Es ist möglich, absolute (Welt-)Koordinaten zu verwenden. Ebenso können relative Bezüge verwendet werden, bei der sich die Position des Gebäudes auf jene des Grundstücks, die Position eines Geschoßes auf das Gebäude, die Position einer Wand auf das Geschoß, jene der Tür auf die Wand, das Türblatt auf die Tür und der Türgriff auf das Türblatt bezieht. Verschiebt man nun das Gebäude, ändert sich in der Datei lediglich die Positionsangabe eines Objektes. Das nenne ich mal Flexibilität! Man kann somit viele Geometrien auf ein Koordatensystem beziehen, aber auch (und das sehen wir uns in einem späteren Beitrag an) eine Geometrie an mehreren Positionen wiederverwenden.

Dieser Aufbau sorgt – richtig angewandt – für eine sehr kompakte Dateigröße, welche ja ein wesentlicher Kritikpunkt an IFC-Dateien ist.

IfcGridPlacement

Die Platzierung anhand eines Rasters ist ebenso interessant. Leider wird diese nur in den wenigsten Programmen sauber umgesetzt; sowohl beim Export als auch beim Import gibt es hier große Schwächen. Betrachtet man jedoch die Festlegungen im IFC-Schema, so ist diese Möglichkeit der Positionierung sehr flexibel.

In den meisten BIM-Programmen können wir nur wenige Bauteile mit einem Raster verknüpfen, oft nur Stützen und Träger (z.B. in Autodesk Revit). Diese Einschränkung gibt es im IFC-Schema grundsätzlich nicht. Jedes Element, das von IfcProduct abgeleitet ist, kann auf diese Weise platziert werden.

Es können drei Eigenschaften für eine Rasterplatzierung definiert werden. PlacementRelTo kennen wir bereits aus der obigen Betrachtung der lokalen Platzierung; diese ist auch hier optional.

Erforderlich ist jedoch die Angabe der PlacementLocation durch einen gedachten Schnittpunkt von Rasterlinien (IfcVirtualGridIntersection). Dieser Schnittpunkt wird durch zwei Rasterlinien festgelegt, wobei zusätzlich noch ein Versatz (zwei- oder dreidimensional) angegeben werden kann.

Während bei einer vertikalen Stütze die Angabe eines Punktes ausreicht, benötigt man für eine Wand oder einen Träger natürlich eine weitere Eigenschaft namens PlaceRefDirection. Diese kann entweder eine Richtung oder auch ein zweiter Rasterschnittpunkt sein.

Das bedeutet, dass sich jede Art von Bauteilen auf einen Konstruktionsraster beziehen kann; seien es Wände, Leuchten, Fundamente oder Lüftungsauslässe (Deckenraster haben ebenso die Klasse IfcGrid). Diese Tatsache – und wie stark uns in diesem Fall die am meisten verbreiteten Programme einschränke – ist durchaus bemerkenswert.

IfcLinearPlacement

Dadurch, dass das IFC-Format immer häufiger auch für Infrastrukturbauten verwendet wird, musste auch die Bauwerksstruktur und Positionierungslogik adaptiert werden. Bei Brücken gibt es keine Geschoße, und auch Straßen und Tunnels werden nicht so „orthogonal“ geplant wie Hochbauten.

Hierfür wurde mit IFC4x1 RC3 die lineare Positionierung eingeführt, also die Platzierung von Elementen entlang einer definierten Trassierung (IfcAlignment), wobei wiederum einige Attribute definiert sind.

PlacementRelTo ist wie bei den beiden anderen Platzierungsarten wieder optional. Die Angaben zu PlacementMeasuredAlong mittels einer Kurve sowie zu Distance, also der „Stationierung“ sind jedoch erforderlich. Zusätzlich kann eine Verdrehung („Orientation„) angegeben werden. Die letzte, ebenfalls optionale Eigenschaft heißt „CartesianPosition“ und dient als „Fallback“, wenn Programme die lineare Platzierung nicht unterstützen.

Zusammenfassung

Mit Hilfe dieser drei Platzierungsarten können Elemente flexibel in einem Projekt positioniert werden. Das IFC-Schema bietet hier wie kaum eine proprietäre Lösung ein flexibles Gerüst für den effizienten Aufbau eines Gebäudemodells, und das nicht nur für den Hochbau. Was fehlt ist die Umsetzung in konkrete Software, wobei naturgemäß FreeCAD und BlenderBIM hier die Nase vorne haben. Es liegt aber an uns, diese Funktionalität auch bei den anderen Herstellern einzufordern.

Abgelegt unter: