IfcPlusPlus/de

Beschreibung

IFC++ oder IfcPlusPlus ist eine C++-Open Source (MIT Lizenz)-Bibliothek des IfcQuery-Projekts zum Lesen, Schreiben und Betrachten von IFC-Dateien.

Die IFC++-Bibliothek kann für allgemeine Zwecke verwendet werden und enthält auch eine Beispielanwendung zur IFC-Visualisierung. Dieser Viewer basiert auf Qt 5 und OpenSceneGraph (OSG) und kann große IFC-Dateien sehr schnell laden. Daher kann er zum Vergleich der Leistung anderer IFC-Viewer wie Blender und FreeCAD verwendet werden, die intern die Bibliothek IfcOpenShell verwenden.

Der in der Quelldistribution der IfcQuery/IFC++-Bibliotheken enthaltene IFC-Viewer.

Hinweis: Im allgemeinen Sprachgebrauch können die Bezeichnungen "IfcQuery", "IFC++" und >"IfcPlusPlus" synonym verwendet werden, um dasselbe zu bezeichnen, nämlich die C++-Bibliothek oder genauer gesagt den kostenlosen IFC-Betrachter.

Installieren

Die IFC++-Distribution wird als Quellcode bereitgestellt. Um die Bibliothek und den Viewer nutzen zu können, muss der Code daher kompiliert werden.

IFC++ wurde hauptsächlich auf einer Windows-Plattform entwickelt und enthält daher Lösungs- (.snl) und Projektdateien (.vcxproj), um die dynamische Bibliothek IfcPlusPlus.dll mit Visual Studio zu kompilieren. Mit CMake kann auch eine statische Bibliothek libIfcPlusPlus.a für Linux erstellt werden.

Hinweis: Es gibt einen umfassenderen Betrachter, der vorkompilierte IFC++-Bibliotheken für Windows verwendet. Dieser Betrachter ist kostenlos, aber nicht Open Source. Er kann heruntergeladen werden, indem man das Paket SimpleViewerExampleQt.zip von http://www.ifcquery.com/ herunterlädt und SimpleViewerExampleQt.exe ausfüht. Dieser Betrachter ist in sich geschlossen, alles, was für seine Ausführung erforderlich ist, ist im .zip-Archiv enthalten.

Kompilieren unter Windows

Die Anweisungen im offiziellen ifcplusplus Verzeichnis befolgen.

Kompilieren unter Linux

The general instructions are as follows:

  1. Get the source code of IFC++ from its main repository.
  2. Gather all dependencies for compiling, including a C++ compiler, CMake, and Make, and the development files for Boost, Qt 5, as well as the OpenSceneGraph (OSG) library for visualization.
  3. Run cmake to generate a Makefile, then start the compilation by running make.
  4. Install the libIfcPlusPlus.a and libcarve.so libraries to the appropriate library path so that they are found by the IFC++ sample viewer.

Voraussetzungen

In einer auf Debian/Ubuntu basierenden Distribution ist es in der Regel einfach, die erforderlichen Entwicklungsdateien zu erhalten.

sudo apt install git cmake gcc g++ libboost-all-dev
sudo apt install qt5-qmake qtbase5-dev qttools5-dev libqt5widgets5 libqt5opengl5-dev

Den Quellcode des Projekts holen und ihn in einem eigenen Verzeichnis ablegen, auf das man vollen Schreibzugriff hat.

git clone https://github.com/ifcquery/ifcplusplus ifcplusplus-source

OpenSceneGraph

OpenSceneGraph (OSG) ist eine Sammlung von C++-Bibliotheken, die OpenGL für die 3D-Visualisierung verwenden. Sie kann in Spielen, Virtual Reality, wissenschaftlicher Visualisierung und Modellierung eingesetzt werden.

sudo apt install libopenscenegraph-3.4-dev

Wenn die Dateien in der Distribution zu alt sind, können die Bibliotheken auch selbst kompiliert werden. Die Vorgehensweise ist im Haupt-Repository openscenegraph/OpenSceneGraph beschrieben. Die Kompilierung ist unkompliziert, allerdings benötigt man möglicherweise verschiedene Abhängigkeiten wie Qt 5, Freetype, Inventor, OpenEXR, COLLADA, ZLIB, GDAL, FFmpeg, Gstreamer, SDL, Cairo und Poppler.

git clone https://github.com/openscenegraph/OpenSceneGraph OpenSceneGraph-source

mkdir -p OpenSceneGraph-build
cd OpenSceneGraph-build
cmake ../OpenSceneGraph-source

make -j 3
sudo make install

Carve

Carve ist eine C++-Bibliothek für Konstruktive Festkörpergeometrie (CSG), die für die Durchführung boolescher Operationen zwischen zwei beliebigen Polygonnetzen entwickelt wurde. Zusammen mit der IFC++-Bibliothek libIfcPlusPlus.a wird Carve vom IFC++-Beispiel-Betrachter zum Öffnen und Anzeigen von IFC-Dateien verwendet.

Da das Projekt nun unter einer MIT-Lizenz steht, sind Kopien der Carve-Quelldateien nun im IFC++-Repository enthalten. Das bedeutet, dass beim Kompilieren von IFC++ auch libcarve.so kompiliert wird. Diese Bibliothek muss im System verfügbar sein, damit der IFC++-Beispiel-Betrachter ordnungsgemäß funktioniert.

CMake-Konfiguration

Es wird empfohlen, die Konfiguration und Kompilierung in einem speziellen Bauverzeichnis getrennt vom Quellverzeichnis durchzuführen.

mkdir -p ifcplusplus-build
cd ifcplusplus-build

cmake ../ifcplusplus-source/

Standardmäßig ist der Build-Typ Release, er kann jedoch auch auf Debug gesetzt werden.

cmake -DCMAKE_BUILD_TYPE=Debug ../ifcplusplus-source/

Aktuelle Kompilierung

Wenn es bei der Konfiguration mit CMake keine Fehlermeldungen gab, sollte eine Makefile im Bauverzeichnis erstellt worden sein, so dass du mit der Kompilierung der Bibliotheken durch Ausführen von make fortfahren kannst.

make -j N

N ist die Anzahl der Prozessoren, die du dem Kompilierungsprozess zuweist; wähle mindestens einen weniger als die Gesamtzahl der CPU Kerne, die du hast.

Testen der Kompilierung im Bau-Verzeichnis

Wenn der Build erfolgreich war, sollte man ein Unterverzeichnis Release/ mit den neu kompilierten Bibliotheken haben.

Release/libcarve.so
Release/libIfcPlusPlus.a
Release/SimpleViewerExample

Die ausführbare Datei SimpleViewerExample kann mit einer IFC-Datei als Eingabe gestartet werden.

Release/SimpleViewerExample IfcOpenHouse.ifc

Wenn der Build-Typ auf Debug gesetzt wurde, werden die kompilierten Bibliotheken stattdessen im Unterverzeichnis Debug/ angezeigt.

Installation der kompilierten Bibliotheken

Wenn die Kompilierung keine Fehler meldet, kann man make install ausführen, um die Header, kompilierten Bibliotheken und Binärdateien in ihre entsprechenden Installationsverzeichnisse zu kopieren.

sudo make install

Standardmäßig ist der CMAKE_INSTALL_PREFIX /usr/local/, so dass alle kompilierten Dateien unter diesem Verzeichnis abgelegt werden, was normalerweise erhöhte Rechte erfordert.

/usr/local/bin/SimpleViewerExample
/usr/local/lib/libcarve.so
/usr/local/lib/libIfcPlusPlus.a
/usr/local/include/carve/*.{h, hpp}
/usr/local/include/ifcpp/geometry/*.h
/usr/local/include/ifcpp/geometry/Carve/*.h
/usr/local/include/ifcpp/geometry/OCC/*.h
/usr/local/include/ifcpp/IFC4/*.h
/usr/local/include/ifcpp/IFC4/include/*.h
/usr/local/include/ifcpp/model/*.h
/usr/local/include/ifcpp/reader/*.h
/usr/local/include/ifcpp/writer/*.h
/usr/local/share/IFCPP/cmake/*.cmake

Bibliothekspfad

Sobald SimpleViewerExample in /usr/local/bin abgelegt ist, steht die ausführbare Datei im gesamten System zur Verfügung. Auf bestimmten Plattformen kann es jedoch vorkommen, dass libcarve.so nicht gefunden wird, wenn es im Standardverzeichnis /usr/local/lib installiert ist.

SimpleViewerExample: error while loading shared libraries: libcarve.so: cannot open shared object file: No such file or directory

In diesem Fall kann es ausreichend sein, den Cache des Bibliotheksladers ld.so durch Aufruf von ldconfig zu aktualisieren:

sudo ldconfig

Oder man muss die Bibliothek möglicherweise zuerst in das richtige Verzeichnis verschieben:

sudo mkdir -p /usr/local/lib/x86_64-linux-gnu/
sudo mv /usr/local/lib/libcarve.so /usr/local/lib/x86_64-linux-gnu/libcarve.so
sudo ldconfig

Alternativ kann vor dem Starten der ausführbaren Datei die Variable LD_LIBRARY_PATH auf das Verzeichnis gesetzt werden, das libcarve.so enthält:

LD_LIBRARY_PATH=/usr/local/lib SimpleViewerExample

Um diesen Effekt dauerhaft zu machen, kann diese Umgebungsvariable in der Shell-Ressourcendatei, beispielsweise .bashrc, festgelegt werden, sodass sie beim Start an alle Terminalinstanzen weitergegeben wird:

export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

Entfernen der kompilierten Bibliotheken

Um die installierten Bibliotheken zu entfernen, löscht man einfach die entsprechenden Dateien, die installiert wurden.

sudo rm -rf /usr/local/bin/SimpleViewerExample
sudo rm -rf /usr/local/lib/libcarve.so
sudo rm -rf /usr/local/lib/libIfcPlusPlus.a
sudo rm -rf /usr/local/include/carve
sudo rm -rf /usr/local/include/ifcpp
sudo rm -rf /usr/local/share/IFCPP/cmake/

Korrekturen für Linux

Die IFC++-Bibliothek wurde von ihrem Autor auf einem Windows-System entwickelt. Das bedeutet, dass der Code, auch wenn er von plattformübergreifenden Bibliotheken wie Boost, Qt und OpenSceneGraph abhängt, größtenteils für die Kompilierung und Ausführung unter Windows getestet wurde. Dennoch haben andere Entwickler im Laufe der Jahre Korrekturen für das Projekt bereitgestellt, sodass IFC++ nun auch unter Linux-Distributionen kompiliert und ausgeführt werden kann.

Insbesondere wird ein Fork des Hauptprojekts mit kleinen Korrekturen gepflegt, damit es unter Debian besser kompiliert und läuft.

If the code of the official repository does not work or seems to have issues in Linux, try following the same compilation instructions but using the sources from this alternative repository. This repository is often some commits behind the main distribution, but it aims to remain up to date, and at the same time provide some Linux specific fixes. These improvements are normally submitted back to the main repository in order to make the official branch compile on Linux without issues.

The main developer of IFC++ does not support Linux directly, so Linux developers should be prepared to troubleshoot problems, fix them, and submit patches when using IFC++ in Linux.

Unsichtbare Symbole

For the SimpleViewerExample, there are two buttons in the main interface which are invisible if the custom style sheet is not found.

QIODevice::read (QFile, ":styles.css"): device not open

Der Stil muss in der CMake-Konfiguration im Abschnitt für die Qt-Bibliotheken enthalten sein:

# ifcplusplus-source/examples/SimpleViewerExampleQt/CMakeLists.txt
...
ADD_DEFINITIONS(${Qt5Widgets_DEFINITIONS})

SET(viewer_dir ${IFCPP_SOURCE_DIR}/examples/SimpleViewerExampleQt)
SET(RESOURCES ${viewer_dir}/Resources/ifcplusplus.qrc)
QT5_ADD_RESOURCES(SimpleViewerExample_RESOURCES_RCC ${RESOURCES})

Weitere Informationen