IfcOpenShell
Descripción
IfcOpenShell es una biblioteca de software de código abierto (LGPL 3) que ayuda a los desarrolladores a trabajar con el formato de archivo industry foundation classes (IFC). El formato de archivo IFC puede utilizarse para describir datos de construcción y edificación. El formato se utiliza habitualmente para building information modelling (BIM), por ejemplo, para el análisis de cargas mecánicas y para los estudios de eficiencia térmica y energética. IfcOpenShell es principalmente una colección de librerías C++, sin embargo, como tiene enlaces Python, puede integrarse con programas como FreeCAD y Blender.
IfcOpenShell utiliza OpenCASCADE internamente para convertir la geometría implícita de los archivos IFC en geometría explícita que otros paquetes CAD pueden entender, por ejemplo, STEP, OBJ, y DAE.
As of v0.19, FreeCAD is able to import IFC files as long as the ifcopenshell
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.
import ifcopenshell
Instalación
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 your specific system; however, as of this writing (2020) it is easier to start using it, as it is now included together with FreeCAD in many FreeCAD distributions. In general, it is advisable to use one of these pre-compiled distributions, 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
If it is available, you may install IfcOpenShell using your distribution's package manager.
sudo apt install ifcopenshell
However, please notice that packages provided by many Linux repositories 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.
Utilizar un paquete IfcOpenShell precompilado
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).
- 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.
- 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,
v0.6.0
. - Click on the commit number, which will take you to the list of commits for the branch, for example,
IfcOpenBot/IfcOpenShell/commits/v0.6.0
. - 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.
- 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.
- 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.
Note: 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
ifcopenshell/
folder.
- Unzipping the downloaded package creates an
unzip ifcopenshell-python-36-v0.6.0-4baec57-linux64.zip
- The search path can be found by inspecting the
sys.path
variable in the Python console.
- The search path can be found by inspecting the
import sys
print(sys.path)
- If you'd like to install the IfcOpenShell library only for your user, and not affect system directories, you should place the extracted
ifcopenshell/
folder in your own user's home directory.
- If you'd like to install the IfcOpenShell library only for your user, and not affect system directories, you should place the extracted
mv -t $HOME/.local/lib/python3.6/site-packages/ ifcopenshell/
- 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
site-packages/
directory, or adist-packages/
directory for Debian/Ubuntu distributions.
- 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
sudo mv -t /usr/local/lib/python3.6/dist-packages/ ifcopenshell/
If the directory is correctly moved, test that the ifcopenshell
module is accessible from the Python console.
>>> import ifcopenshell
>>> print(ifcopenshell.version)
0.6.0b0
>>> print(ifcopenshell.__path__)
['/home/user/.local/lib/python3.6/site-packages/ifcopenshell']
To remove the installed library, just remove the corresponding directory with all modules inside.
rm -rf $HOME/.local/lib/python3.6/site-packages/ifcopenshell/
sudo rm -rf /usr/local/lib/python3.6/dist-packages/ifcopenshell/
Compilación
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 Makefile
for use with the Make tool.
The general instructions are outlined in the IfcOpenShell repository, and are as follows:
- Get the source code of IfcOpenShell from its main repository.
- 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
IfcConvert
binary. - Run
cmake
to generate aMakefile
, then start the compilation by runningmake
. - Install the
ifcopenshell
Python module in the appropriatesite-packages/
directory so that it is found by FreeCAD.
Note: 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 /usr/lib/x86_64-linux-gnu/
while in other distributions this may be /usr/lib64/
so the paths should be adjusted accordingly.
Prerequisitos
Install the basic compilation tools.
sudo apt install git cmake gcc g++ libboost-all-dev
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.
git clone https://github.com/IfcOpenShell/IfcOpenShell -b v0.6.0 IfcOpenShell-source
OpenCASCADE
Install the development files of OpenCASCADE.
sudo apt install libocct*-dev
Which expands to
sudo apt install libocct-data-exchange-dev libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev
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.
sudo apt install opencollada-dev
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 the libpcre3
and libxml2
development files.
sudo apt install libpcre3-dev libxml2-dev
git clone https://github.com/KhronosGroup/OpenCOLLADA OpenCOLLADA-source
mkdir -p OpenCOLLADA-build
cd OpenCOLLADA-build
cmake ../OpenCOLLADA-source
make -j 3
sudo make install
Python wrapper
For usage with FreeCAD you need the Python wrapper which uses SWIG to generate the proper interfaces from the C++ classes.
sudo apt-get install python-all-dev swig
CMake configuración
It is recommended to perform the configuration and compilation in a specific build directory separate from the source directory.
mkdir -p IfcOpenShell-build
cd IfcOpenShell-build
cmake ../IfcOpenShell-source/cmake/
Notice that the CMakeLists.txt
file that drives CMake is inside the cmake/
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.
Especificación de las bibliotecas OpenCASCADE
If you manually compiled OpenCASCADE, or if the libraries are not in a standard directory, you may have to set the proper variables.
cmake \
-DOCC_INCLUDE_DIR=/usr/include/opencascade \
-DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
../IfcOpenShell-source/cmake/
By default the build system expects the community edition (OCE) of OpenCASCADE (/usr/include/oce/
), 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.
Sin OpenCOLLADA
If you don't need OpenCOLLADA support (DAE files) you need to turn it off explicitly with the COLLADA_SUPPORT
variable.
cmake \
...
-DCOLLADA_SUPPORT=FALSE \
../IfcOpenShell-source/cmake/
Con 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 libpcre
library.
cmake \
...
-DOPENCOLLADA_INCLUDE_DIR=/usr/include/opencollada \
-DOPENCOLLADA_LIBRARY_DIR=/usr/lib/opencollada \
-DPCRE_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
../IfcOpenShell-source/cmake/
Especificación de las bibliotecas libxml2
If the libxml2
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.
cmake \
...
-DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 \
-DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so \
../IfcOpenShell-source/cmake/
Especificando la instalación en el directorio personal del usuario
By default, the Python module ifcopenshell
will be installed in a system site-packages/
directory, so it requires superuser privileges. By setting the USERSPACE_PYTHON_PREFIX
variable, the installation of the Python module will be done to the user's home directory.
cmake \
...
-DUSERSPACE_PYTHON_PREFIX=ON \
../IfcOpenShell-source/cmake/
Especificando la versión de Python
If you want to generate a binding for a particular Python version, set the PYTHON_EXECUTABLE
variable to the specific executable. Remember that this version must be the same Python version against which FreeCAD was compiled.
cmake \
...
-DPYTHON_EXECUTABLE=/usr/bin/python3.6 \
../IfcOpenShell-source/cmake/
Línea de configuración única
In a typical Debian/Ubuntu system you may use this line to configure the compilation. Adjust it as necessary.
cmake -DOCC_INCLUDE_DIR=/usr/include/opencascade -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so -DUSERSPACE_PYTHON_PREFIX=ON ../IfcOpenShell-source/cmake/
Without OpenCOLLADA:
cmake -DOCC_INCLUDE_DIR=/usr/include/opencascade -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu -DCOLLADA_SUPPORT=FALSE -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so -DUSERSPACE_PYTHON_PREFIX=ON ../IfcOpenShell-source/cmake/
Compilación actual
If there were no error messages during configuration with CMake, a Makefile
should have been created in the build directory, so you can proceed to compile the libraries by running make
.
make -j N
N
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.
Solución de problemas y otras opciones
All configuration options are available in the CMakeLists.txt
file located inside the IfcOpenShell-source/cmake/
directory. If there are problems when running CMake or Make, look here for other options that may need to be set.
In all instructions above, instead of cmake
, the graphical interface cmake-gui
can be used. This will quickly show the available options in the configuration.
cmake-gui ../IfcOpenShell-source/cmake/
Probar la compilación en el directorio de construcción
If the build was successful you should have an examples/
subdirectory with the newly compiled IfcOpenHouse
executable. Run this utility from the build directory to generate a sample IFC file.
example/IfcOpenHouse
The sample IFC file should appear in the build directory, and can be used as input to the also newly compiled IfcConvert
executable. This utility takes as input an IFC file, and produces as output a different format including OBJ, DAE if OpenCOLLADA support was enabled, STEP, IGS, XML, SVG, or another IFC.
./IfcConvert IfcOpenHouse.ifc
If no output file is specified, by default it will create an OBJ file and its accompanying material table (MTL).
Instalación de las bibliotecas compiladas
If the compilation doesn't report any errors, you may run make install
to copy the headers, compiled libraries, and binaries to their corresponding installation directories.
sudo make install
By default, the CMAKE_INSTALL_PREFIX
is /usr/local/
, so all compiled files will be placed under this directory, which normally requires elevated privileges.
/usr/local/bin/IfcConvert
/usr/local/bin/IfcGeomServer
/usr/local/include/ifcparse/*.h
/usr/local/include/ifcgeom/*.h
/usr/local/include/ifcgeom_schema_agnostic/*.h
/usr/local/include/serializers/{*.h,*.cpp}
/usr/local/include/serializers/schema_dependent/{*.h,*.cpp}
/usr/local/lib/libIfcGeom*.a
/usr/local/lib/libIfcParse.a
/usr/local/lib/libSerializers*.a
The ifcopenshell
Python module that is required for FreeCAD is not actually present in the build directory; this package is created only when make install
is run. The resulting package is placed in a site-packages/
directory, or a dist-packages/
directory for Debian/Ubuntu distributions.
/usr/lib/python3/dist-packages/ifcopenshell/
If the USERSPACE_PYTHON_PREFIX
variable was set during the CMake configuration step, ifcopenshell
will be placed in the user's site-packages/
directory.
$HOME/.local/lib/python3.6/site-packages/ifcopenshell/
Eliminar las bibliotecas compiladas
To remove the installed libraries, just remove the corresponding files that were installed, and the ifcopenshell/
directory with all modules inside.
sudo rm -rf /usr/local/bin/IfcConvert
sudo rm -rf /usr/local/bin/IfcGeomServer
sudo rm -rf /usr/local/include/ifcparse/
sudo rm -rf /usr/local/include/ifcgeom/
sudo rm -rf /usr/local/include/ifcgeom_schema_agnostic/
sudo rm -rf /usr/local/lib/libIfcGeom*
sudo rm -rf /usr/local/lib/libIfcParse*
sudo rm -rf /usr/local/lib/libSerializers*
sudo rm -rf /usr/lib/python3/dist-packages/ifcopenshell/
Or if the USERSPACE_PYTHON_PREFIX
variable was set.
sudo rm -rf $HOME/.local/lib/python3.6/site-packages/ifcopenshell/
Instalación manual
Compilation of the entire IfcOpenShell distribution produces binaries like IfcConvert
and IfcGeomServer
, as well as many static libraries (lib*.a
) in the build directory. However, for FreeCAD we only need the ifcopenshell
Python module. This module is not a single file, but a "package", that is, a directory with various files. This ifcopenshell
package is put together from the Python wrappers built inside IfcOpenShell-build/ifcwrap/
, and from the Python modules in the original source directory IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/
.
- Produced by the compilation process:
../IfcOpenShell-build/ifcwrap/ifcopenshell_wrapper.py
../IfcOpenShell-build/ifcwrap/_ifcopenshell_wrapper.so
- Existing in the source directory:
../IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/
The ifcopenshell
module is created by copying the original source directory, and adding the two *ifcopenshell_wrapper*
files to it.
cp -rt . ../IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/
cp -t ifcopenshell/ ifcwrap/ifcopenshell_wrapper.py ifcwrap/_ifcopenshell_wrapper.so
Now this directory can be moved to the user-specific or system site-packages/
(dist-packages/
for Debian/Ubuntu) to make it available for all Python applications.
mv -t $HOME/.local/lib/python3.6/site-packages/ ifcopenshell/
Or for system-wide installation:
sudo mv -t /usr/lib/python3/dist-packages/ ifcopenshell/
Now the ifcopenshell
module should be available to be imported from a Python console.
>>> import ifcopenshell
>>> print(ifcopenshell.version)
0.6.0b0
>>> print(ifcopenshell.__path__)
['/home/user/.local/lib/python3.6/site-packages/ifcopenshell']
Aplicación del visor IFC
The IfcOpenShell library actually includes a small graphical viewer for IFC files that uses PyQt5 and PythonOCC.
To launch this viewer from the Python console, the application
class needs to be instantiated and started:
from ifcopenshell.geom.app import application
application().start()
If the library is already installed, the entire module can also be run from the terminal:
python3 /home/user/.local/lib/python3.6/site-packages/ifcopenshell/geom/app.py
At the time of writing (2020), only the PythonOCC version compiled for the OpenCASCADE community edition (OCE) was supported.
Visor en línea del IFC
The IfcOpenShell project has also developed "IFC Pipeline", a self-hosted IFC processing and visualization program. It also provides a small web application that accepts file uploads, which anybody can use. This means that to visualize IFC data you don't need to have IfcOpenShell, or other viewers, installed locally; you can just load your IFC file into this system to see the result.
- Online viewer: https://view.ifcopenshell.org/
- Repository: AECgeeks/ifc-pipeline
Más información
- Página web: ifcopenshell.org
- Repositorio de código: IfcOpenShell/IfcOpenShell
- Academia con ejemplos y artículos: academy.ifcopenshell.org
- Visor en línea de IfcOpenShell
- Comunidad OSArch con recursos para la arquitectura de código abierto: wiki.OSArch.org
- Instalación de IfcOpenShell; discusión principal en el foro.
- Instalación de IFC; discusión antigua en el foro.
- IfcPlusPlus compilado en Gentoo - ¿preguntas y alternativas?
- Compilación de IfcOpenShell para MacOS; una guía antigua que describe el proceso general. Puede que ya no sea necesaria ya que IfcOpenShell se distribuye ahora junto con FreeCAD gracias a Conda.
- Qué páginas enlazan con esta página.
- Elements: Wall, Structure, Curtain Wall, Window, Roof, Space, Stairs, Equipment, Frame, Fence, Truss, Profile, Pipe, Pipe Connector
- Reinforcements: Straight Rebar, U-Shape Rebar, L-Shape Rebar, Stirrup, Bent-Shape Rebar, Helical Rebar, Column Reinforcement, Beam Reinforcement, Slab Reinforcement, Footing Reinforcement, Custom Rebar
- Panels: Panel, Panel Cut, Panel Sheet, Nest
- Materials: Material, Multi-Material
- Organization: Building Part, Project, Site, Building, Level, External reference, Section Plane, Schedule
- Axes: Axis, Axes system, Grid
- Modification: Cut with plane, Add component, Remove component, Survey
- Utilities: Component, Clone component, Split Mesh, Mesh to Shape, Select non-manifold meshes, Remove Shape from Arch, Close Holes, Merge Walls, Check, Toggle IFC Brep flag, 3 Views from mesh, Create IFC spreadsheet, Toggle Subcomponents
- Additional: Preferences, Import Export Preferences (IFC, DAE, OBJ, JSON, 3DS, SHP), IfcOpenShell, IfcPlusPlus, Arch API
- Materials: Solid, Fluid, Nonlinear mechanical, Reinforced (concrete); Material editor
- Element geometry: Beam (1D), Beam rotation (1D), Shell (2D), Fluid flow (1D)
Constraints
- Electromagnetic: Electrostatic potential, Current density, Magnetization
- Geometrical: Plane rotation, Section print, Transform
- Mechanical: Fixed, Displacement, Contact, Tie, Spring, Force, Pressure, Centrif, Self weight
- Thermal: Initial temperature, Heat flux, Temperature, Body heat source
- Overwrite Constants: Constant vacuum permittivity
- Solve: CalculiX Standard, Elmer, Mystran, Z88; Equations: Deformation, Elasticity, Electrostatic, Electricforce, Magnetodynamic, Magnetodynamic 2D, Flow, Flux, Heat; Solver: Solver control, Solver run
- Results: Purge, Show; Postprocessing: Apply changes, Pipeline from result, Warp filter, Scalar clip filter, Function cut filter, Region clip filter, Contours filter, Line clip filter, Stress linearization plot, Data at point clip filter, Filter function plane, Filter function sphere, Filter function cylinder, Filter function box
- Additional: Preferences; FEM Install, FEM Mesh, FEM Solver, FEM CalculiX, FEM Concrete; FEM Element Types
- Getting started
- Installation: Download, Windows, Linux, Mac, Additional components, Docker, AppImage, Ubuntu Snap
- Basics: About FreeCAD, Interface, Mouse navigation, Selection methods, Object name, Preferences, Workbenches, Document structure, Properties, Help FreeCAD, Donate
- Help: Tutorials, Video tutorials
- Workbenches: Std Base, Assembly, BIM, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Hubs: User hub, Power users hub, Developer hub