IfcPlusPlus
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:
- Den Quellcode von IFC++ aus dem Haupt-Repository beziehen.
- 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.
cmakeausführen, um einMakefilezu generieren, und dann die Kompilierung mitmakestarten.- Die Bibliotheken
libIfcPlusPlus.aundlibcarve.soim 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
- IFC++-Projekt-Seite
- ifcquery/ifcplusplus Repository
- Alternatives Repository, speziell für Debian:berndhahnebach/ifcplusplus
- Forum-Faden: IFC- Viewer ifcplusplus (2013 bis 2020)
- IfcPlusPlus compiled on Gentoo - questions and alternatives?
- Deutscher Faden: IfcQuery / IfcPlusPlus selber kompilieren
- 2D Drafting: Sketch, Line, Polyline, Rectangle, Arc, Arc From 3 Points, Circle, Ellipse, Polygon, B-Spline, Bézier Curve, Cubic Bézier Curve, Point, Fillet
- 3D/BIM: Site, Building, Level, Space, Wall, Curtain Wall, Column, Beam, Slab, Door, Window, Covering, Pipe, Connector, Stairs, Roof, Panel, Frame, Fence, Truss, Equipment
- Reinforcement Tools: Custom Rebar, Straight Rebar, U-Shape Rebar, L-Shape Rebar, Stirrup, Bent-Shape Rebar, Helical Rebar, Column Reinforcement, Beam Reinforcement, Slab Reinforcement, Footing Reinforcement
- Generic 3D Tools: Profile, Box, Shape Builder, Facebinder, Objects Library, Component, External Reference
- Annotation: Aligned Dimension, Horizontal Dimension, Vertical Dimension, Text, Leader, Label, Hatch, Axis, Axis System, Grid, Section Plane, 2D Drawing, Section View, Section Cut, New Page, New View
- Snapping: Snap Lock, Snap Endpoint, Snap Midpoint, Snap Center, Snap Angle, Snap Intersection, Snap Perpendicular, Snap Extension, Snap Parallel, Snap Special, Snap Near, Snap Ortho, Snap Grid, Snap Working Plane, Snap Dimensions, Toggle Grid, Working Plane Front, Working Plane Top, Working Plane Side, Working Plane
- Modify: Move, Rotate, Scale, Mirror, Clone, Make Link, Copy, Simple Copy, Compound, 2D Offset, Offset, Trimex, Join, Split, Stretch, Draft to Sketch, Upgrade, Downgrade, Add Component, Remove Component, Array, Path Array, Polar Array, Point Array, Cut With Plane, Extrude, Union, Difference, Intersection
- Manage: BIM Setup, Setup Project, Manage Doors and Windows, Manage IFC Elements, Manage IFC Quantities, Manage IFC Properties, Manage Classification, Manage Layers, Material, BIM Report, Schedule, Preflight Checks, Annotation Styles
- Utils: Move to Trash, Working Plane View, Select Group, Set Slope, Working Plane Proxy, Add to Construction Group, Split Mesh, Mesh to Shape, Select Non-Manifold Meshes, Remove Shape From BIM, Close Holes, Merge Walls, Check, Toggle IFC B-Rep Flag, Toggle Subcomponents, Survey, IFC Diff, IFC Explorer, New IFC Spreadsheet, Image Plane, Unclone, Rewire, Glue, Re-Extrude
- Panel Tools: Panel, Panel Cut, Panel Sheet, Nest
- Structure Tools: Structure, Structural System, Multiple Structures
- IFC Tools: IFC Project, IFC Diff, IFC Expand, Convert to IFC Project, IfcOpenShell Update
- Nudge: Nudge Switch, Nudge Up, Nudge Down, Nudge Left, Nudge Right, Nudge Rotate Left, Nudge Rotate Right, Nudge Extend, Nudge Shrink
- Additional: Preferences, Fine tuning, Import Export Preferences, IFC, DAE, OBJ, JSON, 3DS, SHP
- Materials: Solid Material, Fluid Material, Non-Linear Mechanical Material, Reinforced Material (Concrete); Material Editor
- Element Geometry: Beam Cross Section, Beam Rotation, Shell Plate Thickness, Fluid Section for 1D Flow
- Electromagnetic Boundary Conditions: Electrostatic Potential Boundary Condition, Current Density Boundary Condition, Magnetization Boundary Condition, Electric Charge Density
- Fluid Boundary Conditions: Initial Flow Velocity Condition, Initial Pressure Condition, Flow Velocity Boundary Condition
- Geometrical Analysis Features: Plane Multi-Point Constraint, Section Print Feature, Local Coordinate System
- Mechanical Boundary Conditions and Loads: Fixed Boundary Condition, Rigid Body Constraint, Displacement Boundary Condition, Contact Constraint, Tie Constraint, Spring Boundary Condition, Force Load, Pressure Load, Centrifugal Load, Gravity Load
- Thermal Boundary Conditions and Loads: Initial Temperature, Heat Flux Load, Temperature Boundary Condition, Body Heat Source
- Overwrite Constants: Constant Vacuum Permittivity
- Mesh: Mesh From Shape by Netgen, Mesh From Shape by Gmsh, Mesh Boundary Layer, Mesh Refinement, Mesh Group, Erase Elements, FEM Mesh to Mesh
- Solve: Solver CalculiX, Solver Elmer, Solver Mystran, Solver Z88; Mechanical Equations: Elasticity Equation, Deformation Equation; Electromagnetic Equations: Electrostatic Equation, Electricforce Equation, Magnetodynamic Equation, Magnetodynamic 2D Equation, Static Current Equation; Flow Equation, Flux Equation, Heat Equation, Solver Job Control, Run Solver
- Results: Purge Results, Show Result, Apply Changes to Pipeline, Post Pipeline From Result, Pipeline Branch, Warp Filter, Scalar Clip Filter, Function Cut Filter, Region Clip Filter, Contours Filter, Glyph Filter, Line Clip Filter, Stress Linearization Plot, Data at Point Clip Filter, Calculator Filter; Filter Functions: Plane, Sphere, Cylinder, Box; Data Visualizations: Create Lineplot, Create Histogram, Create Table
- Utilities: Clipping Plane on Face, Remove All Clipping Planes, FEM Examples; Clear FEM Mesh, Display Mesh Info
- Additional: Preferences; FEM Install, FEM Mesh, FEM Solver, FEM CalculiX, FEM Concrete; FEM Element Types
- Erste Schritte
- Installation: Herunterladen, Windows, Linux, Mac, Zusätzliche Komponenten, Docker, AppImage, Ubuntu Snap
- Grundlagen: Über FreeCAD, Graphische Oberfläche, Mausbedienung, Auswahlmethoden, Objektname, Voreinstellungseditor, Arbeitsbereiche, Dokumentstruktur, Objekteigenschaften, FreeCAD unterstützen, Spenden
- Hilfe: Anleitungen, Videoanleitungen
- Arbeitsbereiche: Std Base, Arch, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework