IfcOpenShell version used : 0.6.0a1
If previous article we used IfcOpenShell’s (IOS) standard settings to read an ifc geometry which was generating a mesh. To generate something else let’s take a look at available settings. If your IDE provide you a good auto-completion you are able to see what options you have but not their meaning. With a quick search in the IOS repo using one of the options as keyword you’ll quickly find an header file called IfcGeomIteratorSettings.h which contains all definitions :
/// Specifies whether to use the Open Cascade BREP format for representation /// items rather than to create triangle meshes. This is useful is IfcOpenShell /// is used as a library in an application that is also built on Open Cascade. USE_BREP_DATA = 1 << 3,
BREP stands for Boundary representation which is probably what you want to use when modeling parametric ducts or pipes and their related components. You define settings in python as following :
# Define settings settings = geom.settings() settings.set(settings.USE_BREP_DATA, True)
If you write generated brep data to a file you will see that it is actually an Open Cascade BREP Format as suggested in setting’s description.
shape = geom.create_shape(settings, ifc_entity) # occ stands for OpenCascade occ_shape = shape.geometry.brep_data # IfcOpenShell generate an Open Cascade BREP with open("IfcOpenShellSamples/brep_data", "w") as file: file.write(occ_shape)
Fortunately Part module considered as a the core component of FreeCAD is also based on Open Cascade which makes the import of the geometry into FreeCAD as simple as :
# Create FreeCAD shape from Open Cascade BREP fc_shape = Part.Shape() fc_shape.importBrepFromString(occ_shape) # Ifc lenght internal unit : meter. FreeCAD internal unit : mm. fc_shape.scale(1000) # Add geometry to FreeCAD scenegraph (Coin) fc_part = doc.addObject("Part::Feature", "IfcPart") fc_part.Shape = fc_shape
Don’t forget to import Part
instead of Mesh at the top of your file.
If we use full code available here to generate geometry for wall from my previous article you get the same volume but this time is not a mesh (no triangles) :
If now instead for importing only IfcWall entities we import IfcElement entities from wikilab.ifc a wikihouse project. We get following geometries :
Of course FreeCAD still has a very better way to import it but if you activate shaded mode you get something nicer :
Next article will talk about location point and placement. How object IfcOpenShell reads it ? How does it take care of Local Coordinate System, Coordinate System Reference etc…