Jump to content

IfcPlusPlus

From FreeCAD Documentation
This page is a translated version of the page IfcPlusPlus and the translation is 100% complete.

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

Die allgemeinen Anweisungen lauten wie folgt:

  1. Den Quellcode von IFC++ aus dem Haupt-Repository beziehen.
  2. Alle für die Kompilierung erforderlichen Abhängigkeiten bereitstellen, darunter einen C++-Compiler, CMake und Make sowie die Entwicklungsdateien für Boost, Qt 5 und die OpenSceneGraph (OSG)-Bibliothek für die Visualisierung.
  3. cmake ausführen, um ein Makefile zu generieren, und dann die Kompilierung mit make starten.
  4. Die Bibliotheken libIfcPlusPlus.a und libcarve.so im entsprechenden Bibliothekspfad installieren, damit sie vom IFC++-Beispiel-Betrachter gefunden werden können.

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.

  • Original Verzeichnis: carve, GPL2, von 2009 bis 2011.
  • Neues Verzeichnis: folded/carve, ab 2011; das Projekt wurde im Oktober 2015 auf die MIT-Lizenz umgestellt.

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.

Wenn der Code aus dem offiziellen Repository unter Linux nicht funktioniert oder Probleme zu verursachen scheint, befolgt man bitte die gleichen Kompilierungsanweisungen, verwendet jedoch die Quellen aus diesem alternativen Repository. Dieses Repository hinkt der Hauptdistribution oft um einige Commits hinterher, ist jedoch bestrebt, auf dem neuesten Stand zu bleiben und gleichzeitig einige Linux-spezifische Korrekturen bereitzustellen. Diese Verbesserungen werden in der Regel an das Haupt-Repository zurückgemeldet, damit der offizielle Zweig unter Linux ohne Probleme kompiliert werden kann.

Der Hauptentwickler von IFC++ bietet keinen direkten Support für Linux. Daher sollten Linux-Entwickler darauf vorbereitet sein, Probleme zu beheben, Fehler zu korrigieren und Patches einzureichen, wenn sie IFC++ unter Linux verwenden.

Unsichtbare Symbole

Für das SimpleViewerExample gibt es zwei Schaltflächen in der Hauptoberfläche, die unsichtbar sind, wenn das benutzerdefinierte Stylesheet nicht gefunden wird.

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