IfcPlusPlus/pl

Opis

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.

Instalacja

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.

Kompilacja w systemie Windows

Skorzystaj z instrukcji w oficjalnym repozytorium ifcplusplus.

Kompilacja w systemie Linux

Ogólne instrukcje przedstawiają się następująco:

  1. Pobierz kod źródłowy IFC++ z jego głównego repozytorium.
  2. Zgromadź wszystkie zależności potrzebne do kompilacji, w tym kompilator C++, CMake, Make oraz pliki developerskie dla Boost, Qt 5, a także bibliotekę OpenSceneGraph (OSG) do wizualizacji.
  3. Uruchom cmake, aby wygenerować Makefile, a następnie rozpocznij kompilację, wydając polecenie make.
  4. Zainstaluj biblioteki libIfcPlusPlus.a i libcarve.so w odpowiedniej ścieżce bibliotek, aby były wykrywane przez przykładową przeglądarkę IFC++.

Wymagania wstępne

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

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

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.

Konfiguracja CMake

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/

Właściwa kompilacja

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.

Testowanie kompilacji w katalogu build

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/.

Instalacja skompilowanych bibliotek

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

Ścieżka biblioteki

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

Usuwanie skompilowanych bibliotek

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/

Poprawki dla systemu Linux

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.

Niewidoczne ikony

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ęcej informacji