IfcOpenShell

Description
IfcOpenShell is an open source (LGPL 3) software library that helps developers work with the industry foundation classes (IFC) file format. The IFC file format can be used to describe building and construction data. The format is commonly used for building information modelling (BIM), for example, mechanical loading analysis, and thermal and energy efficiency studies. IfcOpenShell is primarily a collection of C++ libraries, however, as it has Python bindings, it can be integrated with programs like FreeCAD and Blender.

IfcOpenShell uses OpenCASCADE internally to convert the implicit geometry in IFC files into explicit geometry that other CAD packages can understand.

As of v0.19, FreeCAD is able to import IFC files as long as the Python module is available in the system. Likewise, the Arch and BIM Workbenches can export a building model to the IFC format so that it can be used in other applications.

To verify that IfcOpenShell is installed in your system, try to import it from the Python console; the library is correctly installed if no error message is returned.

Installation
IfcOpenShell can be installed in various ways depending on your operating system and Python environment. In the past, IfcOpenShell was a bit difficult to install as it needed to be compiled for the proper Python version; however, as of this writing (2020) it is much easier to work with it, as it is now included together with FreeCAD in many systems. In general, it is advisable to use one of these pre-compiled systems, and only compile it yourself if you are an advanced user.

Conda
For Windows and MacOS systems, FreeCAD distributions put together with the Conda package manager usually include IfcOpenShell already so no further installation is necessary. Get the appropriate distribution from the Download page.

The AppImage for Linux is also based on Conda, and it also includes IfcOpenShell.

Linux
You may install IfcOpenShell from your distribution's package manager, if it is available.

However, please notice that packages provided by a Linux repository tend to be old, and may not contain the latest developments in the software. If you want to be sure you are using the newest software, use a Conda-based distribution of FreeCAD, a pre-compiled IfcOpenShell distribution, or compile IfcOpenShell yourself.

Using a pre-compiled IfcOpenShell package
There is a special repository of the IfcOpenShell project that compiles regularly the IfcOpenShell libraries for various systems (Linux, Windows, MacOS), architectures (32-bit and 64-bit), and Python versions (2.7, 3.x). To use these pre-compiled libraries, you must pick the right version that matches your operating system, architecture, and the major and minor numbers for the Python that is used with FreeCAD. This means that the first two numbers must match (Python 3.6 and 3.7 are considered distinct versions) while the third one (micro) does not matter (Python 3.6.5 and 3.6.12 are considered to be the same for compatibility purposes).


 * 1) Head to the build repository IfcOpenBot/IfcOpenShell. This repository is not for development, it only contains a copy of the main repository as well as pre-compiled packages.
 * 2) As of this writing (2020), the master branch of the IfcOpenShell project does not contain the latest code, so we need to select the desired branch, for example,.
 * 3) Click on the commit number, which will take you to the list of commits for the branch, for example,.
 * 4) Go back in the history until you find a commit that has a comment. This will indicate the moment when pre-compiled libraries were released.
 * 5) Click on the commit. You will see a comment by IfcOpenBot showing a table of combinations of operating system, architecture, and Python version. Choose the right link for "Python" to match your version of FreeCAD. The "Blender", "IfcConvert", and "IfcGeomServer" packages are not needed for FreeCAD usage.
 * 6) The downloaded package needs to be extracted, and the extracted directory needs to be placed in the Python search path in order to find the new modules.

the following examples assume a Debian/Ubuntu based system, but the general procedure should work for other operating systems.


 * Unzipping the downloaded package creates an folder.


 * The search path can be found by inspecting the variable in the Python console.


 * If you'd like to install the IfcOpenShell library only for your user, and not affect system directories, you should place the extracted folder in your own user's home directory.


 * If you'd like to install the IfcOpenShell library system-wide, you typically need superuser privileges to write to system directories; this is usually a directory, or a  directory for Debian/Ubuntu distributions.

If the directory is correctly moved, test that the module is accessible from the Python console.

To remove the installed library, just remove the corresponding directory with all modules inside.

Compiling
Compiling IfcOpenShell is recommended only for advanced users. The process is similar to compiling FreeCAD on Linux, so if you have done this already, then you may already have the necessary requisites like the OpenCASCADE's development files. The process uses the CMake configuration tool to produce a custom for use with the Make tool.

The general instructions are outlined in the IfcOpenShell repository, and are as follows:
 * 1) Get the source code of IfcOpenShell from its main repository.
 * 2) Gather all dependencies for compiling, including a C++ compiler, CMake, and Make, and the development files for Boost, libxml2, OpenCASCADE, SWIG, Python, and OpenCOLLADA (optional). Most of these components are strictly optional, however, for use with FreeCAD they should all be installed. OpenCOLLADA is optional as it only provides DAE support for the  binary.
 * 3) Run  to generate a, then start the compilation by running.
 * 4) Install the  Python module in the appropriate  directory so that it is found by FreeCAD.

the following examples assume a Debian/Ubuntu based system, but the general procedure should work for other operating systems. For example, in Debian shared libraries are normally located in while in other distributions this may be  so the paths should be adjusted accordingly.

Prerequisites
Get the source code of the project and place it in a custom directory to which you have full write access.

As of this writing (2020), the master branch of the IfcOpenShell project does not contain the latest code, so we need to clone a specific branch.

Install the basic compilation tools.

OpenCASCADE
Install the development files of OpenCASCADE.

Which expands to

You may use the community edition (OCE) of OpenCASCADE as well, however, please notice that this version is old and no longer recommended by FreeCAD as of 2020.

OpenCOLLADA
Install the development files of OpenCOLLADA.

If the files are too old in your distribution, you may also compile the libraries yourself. The procedure is outlined in the main repository, KhronosGroup/OpenCOLLADA, and it's very straight forward as it only requires and  as requisites.

Python wrapper
For usage with FreeCAD you need the Python wrapper which uses SWIG to generate the proper interfaces from the C++ classes.

CMake configuration
It is recommended to perform the compilation in a specific build directory.

Notice that the file that drives CMake is inside the  subdirectory in the source directory.

Depending on your Linux distribution, and the way you installed the dependencies, you may have to define some CMake variables so that the libraries are found properly.

Specifying the OpenCASCADE libraries
If you manually compiled OpenCASCADE, or if the libraries are not in a standard directory, you may have to set the proper variables.

By default the build system expects the community edition (OCE) of OpenCASCADE, however, please notice that this version is old and no longer recommended by FreeCAD as of 2020. For this reason installing the development files of the main version of OpenCASCADE (OCCT) is recommended.

Without OpenCOLLADA
If you don't need OpenCOLLADA support (DAE files) you need to turn it off explicitly with the variable.

With OpenCOLLADA
If you manually compiled OpenCOLLADA, or if the libraries are not in a standard directory, you may have to set the proper variables for OpenCOLLADA and for the library.

Specifying the libxml2 libraries
If the libraries are not found during compilation and linking, or if the libraries are not in a standard directory, you may have to set the proper variables.

Specifying installation in the user's home directory
By default, the Python module will be installed in a system  directory, so it requires superuser privileges. By setting the variable, the installation of the Python module will be done to the user's home directory.

Specifying Python version
If you want to generate a binding for a particular Python version, set the variable to the specific executable. Remember that this version must be the same Python version against which FreeCAD was compiled.

Single configuration line
In a typical Debian/Ubuntu system you may use this line to configure the compilation. Adjust it as necessary.

Without OpenCOLLADA:

Actual compilation
If there were no error messages during configuration with CMake, a should have been created in the build directory, so you can proceed to compile the libraries by running.

is the number of processors that you assign to the compilation process; choose at least one fewer than the total number of CPU cores that you have.

Troubleshooting and other options
All configuration options are available in the file located inside the  directory. You may look for other options that can be set here if there are problems when running CMake and Make.

Testing the compilation in the build directory
In the build directory there should be a test IFC file that can be run through the newly compiled program to output another file, either OBJ, DAE if OpenCOLLADA support was enabled, STEP, IGS, XML, SVG, or another IFC.

If no output file is specified, by default it will create an OBJ file and its accompanying material table (MTL).

Installation of compiled libraries
If the compilation doesn't report any errors, you may install the headers, compiled libraries, as well as the Python wrapper to the corresponding directories.

By default, the is, so all compiled files will be installed to this directory, which normally requires elevated privileges.

In similar way, the Python wrapper will be placed in a directory, or a  directory for Debian/Ubuntu distributions.

If the variable was set during the CMake configuration step, the installation will be done to the user's  directory.

Removing compiled libraries
To remove the installed libraries, just remove the corresponding files that were installed, and the directory with all modules inside.

Or if the variable was set.

Manual installation
Compilation of the entire IfcOpenShell distribution produces the and  binaries, as well as many static libraries,  in the build directory. However, for FreeCAD we only need the Python wrappers generated inside the directory, and the Python modules in the source directory under.


 * Produced by the compilation process:


 * Existing in the source directory:

The module is created by copying the original source directory, and adding the two  files to it.

Now this directory can be moved to the user-specific or system to make it available for all Python applications.

Or for system-wide installation:

More information

 * Website: ifcopenshell.org
 * Code repository: IfcOpenShell/IfcOpenShell
 * Academy with examples and articles: academy.ifcopenshell.org
 * OSArch community with resources for open source architecture: wiki.OSArch.org
 * Compiling IfcOpenShell for MacOS; a guide that describes the general process. It may not be needed any more as IfcOpenShell is now distributed together with FreeCAD thanks to Conda.
 * IFC installation; discussion in the forum.
 * What pages link to this page.