Tuesday, May 6, 2014

Updates on Geometry

Primarily IfcOpenShell focusses on the geometrical content of IFC files. This post provides an overview of some of the recent accomplishments related to our core business of processing IFC geometry.

Parametric profile definitions
IfcOpenShell already supported most parametric profile definitions, but until recently implementation for some of them remained. All parametric profile definitions are now supported. Contrary to many other implementations of the IFC format, IfcOpenShell takes special care of correctly converting all fillet radii and leg slope attributes.

One of the promising additions that IFC4 brings to the table is the support for b-spline surfaces. With support for this elementary example of a twisted cube defined using IfcBSplineSurfaceWithKnots, provided by GeometryGym, the first baby steps towards IfcOpenShell as a IFC4 compliant geometry engine have been made.

Constructive Solid Geometry
IfcOpenShell now supports all CSG primitives and boolean operand connectives.

BIMserver Render Engine improvements
The BIMserver.org project reached an important milestone recently with its 1.3.0 release. IfcOpenShell contributed to this release by supplying a Render Engine that converts the IFC product representations into explicit triangular geometry. For example for use in their web-based viewer called BIMsurfer. In close collaboration with the BIMserver team we took special care of making sure that the engine is fault-tolerant and in the meantime took the time to implement initial support for surface styles and colors.

Apart from interpreting geometry, more and more so IfcOpenShell is stepping up to provide a framework for generating geometry as well. Recently the code to generate the IfcOpenHouse example, an IFC building model generated entirely from code, has been updated to conform a little bit better to the CoordinationView implementers agreements. You can read more on our struggle with actual parametric interoperability here.

Read more about IfcOpenShell as an IFC creation framework in the recent blog post by Yorik van Havre as he discusses the promising steps towards IFC support in FreeCAD.

Be sure to check how your favorite IFC viewer compares to IfcOpenShell by looking at the sample files here (just note that these developments are not yet part of the official built releases). Also note that some of these recent developments where funded by an generous external party and implemented by AECgeeks a company founded by Thomas, one of the principle IfcOpenShell developers.


  1. No doubt ifcopenshell is (if not already) becoming the best IFC interface around!

  2. Congratulations Thomas. Would love to integrate ifcOpenShell in some form into Unity game engine (as C# library). But guess that this would be hard with the whole of OpenCASCADE behind it. Or is it?

    1. Thanks Stefan. It really depends on what kind of integration you'd want between IfcOpenShell and your C# code. If it is only the geometry your after I'd recommend just invoking the IfcConvert executable and display e.g the Collada file in Unity (surely it must be able to easily load that (and you get caching for free)). Otherwise as you might know we are using SWIG to generate interfaces from scripting language to the IfcOpenShell core, SWIG also supports generating C# interfaces, so that's surely an option too.

  3. Hi Thomas,
    regarding that IfcOpenHouse: did you build that through OpenCascade or did you generate the Ifc files directly?

    1. Hi Arne,

      The file contains one tesselated nurbs surface created with Open Cascade, other than that the shape representations are explicitly constructed using all sorts of helper functions. There is no easy way yet inside IfcOpenShell to convert arbitrary Open Cascade BReps into IFC directly. However, implementing this is being considered.

      Kind regards,