IFC++ lub IfcPlusPlus to biblioteka open source w języku C++ (licencja MIT) z projektu IfcQuery służąca do odczytu, zapisu i przeglądania plików IFC.
Biblioteka IFC++ może być używana do celów ogólnych, a dodatkowo zawiera przykładową aplikację do wizualizacji plików IFC. Przeglądarka ta oparta jest na Qt 5 i OpenSceneGraph (OSG) i potrafi bardzo szybko wczytywać duże pliki IFC, dzięki czemu może być używana do porównywania wydajności innych przeglądarek IFC, takich jak Blender czy FreeCAD, które wewnętrznie korzystają z biblioteki IfcOpenShell.
Przykładowa przeglądarka IFC dołączona do dystrybucji źródłowej bibliotek IfcQuery/IFC++.
Uwaga: w powszechnym użyciu nazwy "IfcQuery", "IFC++" i "IfcPlusPlus" mogą być stosowane wymiennie, odnosząc się do tego samego: biblioteki C++ lub, bardziej precyzyjnie, darmowej przeglądarki IFC.
Dystrybucja IFC++ jest udostępniana jako kod źródłowy, więc aby korzystać z biblioteki i przeglądarki, kod musi zostać skompilowany.
IFC++ jest rozwijany głównie na platformie Windows, dlatego zawiera pliki rozwiązania (.sln) i projektu (.vcxproj), umożliwiające kompilację biblioteki dynamicznej IfcPlusPlus.dll przy użyciu Visual Studio. Bibliotekę statyczną libIfcPlusPlus.a można również wygenerować dla systemu Linux za pomocą CMake.
Uwaga: istnieje bardziej rozbudowana przeglądarka, która wykorzystuje wstępnie skompilowane biblioteki IFC++ przeznaczone na Windows. Przeglądarka ta jest darmowa w użyciu, ale nie jest open source. Można ją pobrać, pobierając pakiet SimpleViewerExampleQt.zip ze strony http://www.ifcquery.com/ i uruchamiając SimpleViewerExampleQt.exe. Przeglądarka jest samodzielna - wszystko, co potrzebne do jej uruchomienia, jest zawarte w archiwum .zip.
Skorzystaj z instrukcji w oficjalnym repozytorium ifcplusplus.
Ogólne instrukcje przedstawiają się następująco:
cmake, aby wygenerować Makefile, a następnie rozpocznij kompilację, wydając polecenie make.libIfcPlusPlus.a i libcarve.so w odpowiedniej ścieżce bibliotek, aby były wykrywane przez przykładową przeglądarkę IFC++.
W dystrybucjach opartych na Debian/Ubuntu uzyskanie wymaganych plików developerskich zwykle jest proste.
sudo apt install git cmake gcc g++ libboost-all-dev
sudo apt install qt5-qmake qtbase5-dev qttools5-dev libqt5widgets5 libqt5opengl5-dev
Uzyskaj kod źródłowy projektu i umieść go w katalogu użytkownika, w którym masz pełne prawa do zapisu.
git clone https://github.com/ifcquery/ifcplusplus ifcplusplus-source
OpenSceneGraph (OSG) to zbiór bibliotek C++, który wykorzystuje OpenGL do wizualizacji 3D; może być używany w grach, rzeczywistości wirtualnej, wizualizacji naukowej i modelowaniu.
sudo apt install libopenscenegraph-3.4-dev
Jeżeli pliki w twojej dystrybucji są zbyt stare, możesz także skompilować biblioteki samodzielnie. Procedura jest opisana w głównym repozytorium, openscenegraph/OpenSceneGraph. Kompilacja jest stosunkowo prosta, chociaż mogą być potrzebne różne zależności, takie jak Qt 5, Freetype, Inventor, OpenEXR, COLLADA, ZLIB, GDAL, FFmpeg, Gstreamer, SDL, Cairo oraz 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 to biblioteka C++ do geometrycznej budowy brył (CSG), przeznaczona do wykonywania operacji boolowskich między dowolnymi siatkami wielokątnymi. Wraz z biblioteką IFC++ (libIfcPlusPlus.a), Carve jest używana przez przykładową przeglądarkę IFC++ do otwierania i wyświetlania plików IFC.
Ponieważ projekt jest obecnie objęty licencją MIT, kopie plików źródłowych Carve są dołączone do repozytorium IFC++. Oznacza to, że podczas kompilacji IFC++ zostanie również skompilowana biblioteka libcarve.so. Biblioteka ta musi być dostępna w systemie, aby przykładowa przeglądarka IFC++ działała poprawnie.
Zaleca się wykonywanie konfiguracji i kompilacji w osobnym katalogu build, oddzielonym od katalogu źródłowego.
mkdir -p ifcplusplus-build
cd ifcplusplus-build
cmake ../ifcplusplus-source/
Domyślnie typ kompilacji to Release, ale można go również ustawić na Debug.
cmake -DCMAKE_BUILD_TYPE=Debug ../ifcplusplus-source/
Jeżeli podczas konfiguracji za pomocą CMake nie pojawiły się żadne komunikaty o błędach, w katalogu build powinien zostać utworzony Makefile, dzięki czemu możesz przystąpić do kompilacji bibliotek, wydając polecenie make.
make -j N
N to liczba procesorów przypisana do procesu kompilacji; wybierz co najmniej o jeden mniej niż całkowita liczba rdzeni CPU, które posiadasz.
Jeżeli kompilacja zakończyła się sukcesem, powinien powstać podkatalog Release/ z nowo skompilowanymi bibliotekami.
Release/libcarve.so
Release/libIfcPlusPlus.a
Release/SimpleViewerExample
Możesz uruchomić plik wykonywalny SimpleViewerExample, podając jako wejście plik IFC.
Release/SimpleViewerExample IfcOpenHouse.ifc
Jeżeli typ kompilacji został ustawiony na Debug, skompilowane biblioteki pojawią się w podkatalogu Debug/.
Jeżeli kompilacja nie zgłosiła żadnych błędów, możesz uruchomić make install, aby skopiować nagłówki, skompilowane biblioteki oraz pliki wykonywalne do odpowiednich katalogów instalacyjnych.
sudo make install
Domyślnie CMAKE_INSTALL_PREFIX jest ustawiony na /usr/local/, więc wszystkie skompilowane pliki zostaną umieszczone w tym katalogu, co zazwyczaj wymaga uprawnień administratora.
/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
Gdy SimpleViewerExample zostanie umieszczony w /usr/local/bin, plik wykonywalny będzie dostępny w całym systemie. Jednak na niektórych platformach libcarve.so może nie zostać odnaleziony, jeśli jest zainstalowany w domyślnym katalogu /usr/local/lib.
SimpleViewerExample: error while loading shared libraries: libcarve.so: cannot open shared object file: No such file or directory
Jeżeli tak jest, może wystarczyć zaktualizowanie pamięci podręcznej loadera bibliotek ld.so poprzez wywołanie ldconfig:
sudo ldconfig
Lub może być konieczne najpierw przeniesienie biblioteki do właściwego katalogu:
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
Alternatywnie możesz ustawić zmienną LD_LIBRARY_PATH na katalog zawierający libcarve.so przed uruchomieniem pliku wykonywalnego:
LD_LIBRARY_PATH=/usr/local/lib SimpleViewerExample
Aby efekt ten był trwały, tę zmienną środowiskową można ustawić w pliku zasobów powłoki, na przykład w .bashrc, tak aby była propagowana do wszystkich instancji terminala podczas uruchamiania:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
Aby usunąć zainstalowane biblioteki, wystarczy usunąć odpowiadające im pliki, które zostały zainstalowane.
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/
Biblioteka IFC++ jest rozwijana przez jej autora na systemie Windows. Oznacza to, że choć kod zależy od bibliotek wieloplatformowych, takich jak Boost, Qt i OpenSceneGraph, w większości testowany jest pod kątem kompilacji i działania na Windows. Niemniej jednak, z biegiem lat inni deweloperzy wprowadzili poprawki do projektu, dzięki czemu IFC++ można kompilować i uruchamiać również w dystrybucjach Linuxa.
W szczególności utrzymywany jest fork głównego projektu, zawierający drobne poprawki umożliwiające lepszą kompilację i działanie w Debianie.
Jeżeli kod z oficjalnego repozytorium nie działa lub wydaje się mieć problemy w systemie Linux, spróbuj postępować zgodnie z tymi samymi instrukcjami kompilacji, używając źródeł z tego alternatywnego repozytorium. Repozytorium to często pozostaje kilka commitów w tyle za główną dystrybucją, ale jego celem jest pozostanie aktualnym oraz wprowadzenie poprawek specyficznych dla Linuksa. Ulepszenia te są zwykle przesyłane z powrotem do głównego repozytorium, aby oficjalna gałąź kompilowała się w systemie Linux bez problemów.
Główny deweloper IFC++ nie wspiera bezpośrednio systemu Linux, więc deweloperzy korzystający z IFC++ na Linuksie powinni być przygotowani na rozwiązywanie problemów, ich naprawianie oraz przesyłanie poprawek do projektu.
W przypadku SimpleViewerExample w głównym interfejsie znajdują się dwa przyciski, które są niewidoczne, jeśli nie zostanie odnaleziony niestandardowy arkusz stylów.
QIODevice::read (QFile, ":styles.css"): device not open
Styl musi być uwzględniony w konfiguracji CMake w sekcji poświęconej bibliotekom Qt:
# 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})
Wiązania