IfcOpenShell/pl

Opis

IfcOpenShell to biblioteka oprogramowania typu open source (LGPL 3), która pomaga programistom pracować z formatem plików industry foundation classes (IFC). Format pliku IFC może być używany do opisywania danych budowlanych. Format ten jest powszechnie używany do modelowania informacji o budynku (BIM), na przykład do analizy obciążeń mechanicznych oraz badań termicznych i efektywności energetycznej. IfcOpenShell jest przede wszystkim zbiorem bibliotek C++, jednak ponieważ posiada powiązania ze środowiskiem Python, może być zintegrowany z programami takimi jak FreeCAD i Blender.

IfcOpenShell używa OpenCASCADE wewnętrznie do konwersji niejawnej geometrii w plikach IFC na geometrię jawną, którą mogą zrozumieć inne pakiety CAD, na przykład STEP, OBJ i DAE.

Od wersji 0.19 program FreeCAD potrafi importować pliki IFC, o ile w systemie dostępny jest moduł ifcopenshell Pythona. Podobnie środowisko pracy BIM umożliwia eksport modelu budynku do formatu IFC, dzięki czemu może on być używany w innych aplikacjach.

Aby sprawdzić, czy IfcOpenShell jest zainstalowany w systemie, spróbuj zaimportować go z poziomu konsoli Pythona. Biblioteka jest poprawnie zainstalowana, jeśli nie pojawi się żaden komunikat o błędzie.

import ifcopenshell

Instalacja

IfcOpenShell można zainstalować na różne sposoby w zależności od systemu operacyjnego i środowiska Python. W przeszłości instalacja IfcOpenShell była dość trudna, ponieważ należało skompilować go dla konkretnego systemu; jednak w chwili pisania tego tekstu (2020) rozpoczęcie pracy z nim jest łatwiejsze, ponieważ w wielu dystrybucjach FreeCAD jest on już dołączony do FreeCAD. Ogólnie zaleca się korzystanie z jednej z takich wstępnie skompilowanych dystrybucji, a samodzielną kompilację pozostawić jedynie zaawansowanym użytkownikom.

Z IfcOpenShell

Strona instalacyjna IfcOpenShell: https://docs.ifcopenshell.org/ifcopenshell-python/installation.html

Pip

Najłatwiejszym sposobem instalacji IfcOpenShell jest użycie pip. Gdy pip jest już zainstalowany w systemie, możesz zainstalować IfcOpenShell w prosty sposób, wydając w oknie terminala polecenie:

pip install ifcopenshell

Conda

W systemach Windows i MacOS dystrybucje FreeCAD przygotowane z menedżerem pakietów Conda zazwyczaj zawierają już IfcOpenShell, więc dodatkowa instalacja nie jest konieczna. Pobierz odpowiednią dystrybucję ze strony Pobieranie.

AppImage dla systemu Linux również jest oparty na Conda i także zawiera IfcOpenShell.

Linux

Jeśli jest dostępny, możesz zainstalować IfcOpenShell za pomocą menedżera pakietów swojej dystrybucji.

sudo apt install ifcopenshell

Należy jednak zauważyć, że pakiety udostępniane w wielu repozytoriach Linuksa bywają stare i mogą nie zawierać najnowszych zmian w oprogramowaniu. Jeśli chcesz mieć pewność, że używasz najnowszej wersji, skorzystaj z dystrybucji FreeCAD opartej na Conda, wstępnie skompilowanej dystrybucji IfcOpenShell lub skompiluj IfcOpenShell samodzielnie.

Kompilacja

Kompilacja IfcOpenShell jest zalecana tylko dla zaawansowanych użytkowników. Proces jest podobny do kompilacji FreeCAD w systemie Linux, więc jeśli robiłeś to wcześniej, prawdopodobnie masz już niezbędne elementy, takie jak pliki developerskie OpenCASCADE. Proces wykorzystuje narzędzie konfiguracyjne CMake do wygenerowania niestandardowego Makefile do użycia z narzędziem Make.

Ogólne instrukcje znajdują się w repozytorium IfcOpenShell i przedstawiają się następująco:

  1. Pobierz kod źródłowy IfcOpenShell 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, libxml2, OpenCASCADE, SWIG, Python i OpenCOLLADA (opcjonalnie). Większość z tych komponentów jest ściśle opcjonalna, jednak do użycia z FreeCAD powinny być wszystkie zainstalowane. OpenCOLLADA jest opcjonalne, ponieważ zapewnia jedynie obsługę DAE dla binarnego programu IfcConvert.
  3. Uruchom cmake, aby wygenerować Makefile, a następnie rozpocznij kompilację, wydając polecenie make.
  4. Zainstaluj moduł ifcopenshell Pythona w odpowiednim katalogu site-packages/, tak aby został wykryty przez FreeCAD.

Uwaga: poniższe przykłady zakładają system oparty na Debian/Ubuntu, ale ogólna procedura powinna działać również w innych systemach operacyjnych. Na przykład w Debianie biblioteki współdzielone zwykle znajdują się w /usr/lib/x86_64-linux-gnu/, podczas gdy w innych dystrybucjach może to być /usr/lib64/, więc ścieżki należy dostosować odpowiednio.

Wymagania wstępne

Zainstaluj podstawowe narzędzia kompilacyjne.

sudo apt install git cmake gcc g++ libboost-all-dev

Uzyskaj kod źródłowy projektu i umieść go w katalogu użytkownika, w którym masz pełne prawa do zapisu.

Na dzień pisania tego tekstu (2020) gałąź master projektu IfcOpenShell nie zawiera najnowszego kodu, dlatego należy sklonować konkretną gałąź.

git clone https://github.com/IfcOpenShell/IfcOpenShell -b v0.6.0 IfcOpenShell-source

OpenCASCADE

Zainstaluj pliki deweloperskie OpenCASCADE.

sudo apt install libocct*-dev

Co rozszerza się na

sudo apt install libocct-data-exchange-dev libocct-draw-dev libocct-foundation-dev libocct-modeling-algorithms-dev libocct-modeling-data-dev libocct-ocaf-dev libocct-visualization-dev

Można również użyć edycji społecznościowej (OCE) OpenCASCADE, jednak należy pamiętać, że ta wersja jest przestarzała i od 2020 roku nie jest już zalecana przez FreeCAD.

OpenCOLLADA

Zainstaluj pliki deweloperskie OpenCOLLADA.

sudo apt install opencollada-dev

Jeżeli pliki w twojej dystrybucji są zbyt stare, możesz także skompilować biblioteki samodzielnie. Procedura jest opisana w głównym repozytorium, KhronosGroup/OpenCOLLADA, i jest bardzo prosta, ponieważ wymaga jedynie plików deweloperskich libpcre3 i libxml2.

sudo apt install libpcre3-dev libxml2-dev
git clone https://github.com/KhronosGroup/OpenCOLLADA OpenCOLLADA-source

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

make -j 3
sudo make install

Wrapper Pythona

Do użycia z FreeCAD potrzebny jest wrapper Pythona, który wykorzystuje SWIG do wygenerowania odpowiednich interfejsów z klas C++.

sudo apt-get install python-all-dev swig

Konfiguracja CMake

Zaleca się wykonywanie konfiguracji i kompilacji w osobnym katalogu build, oddzielonym od katalogu źródłowego.

mkdir -p IfcOpenShell-build
cd IfcOpenShell-build

cmake ../IfcOpenShell-source/cmake/

Należy pamiętać, że plik CMakeLists.txt, który steruje pracą CMake, znajduje się w podkatalogu cmake/ w katalogu źródłowym.

W zależności od używanej dystrybucji Linuksa i sposobu instalacji zależności, może być konieczne zdefiniowanie niektórych zmiennych CMake, aby biblioteki zostały poprawnie odnalezione.

Określanie bibliotek OpenCASCADE

Jeżeli samodzielnie skompilowałeś OpenCASCADE lub biblioteki nie znajdują się w standardowym katalogu, może być konieczne ustawienie odpowiednich zmiennych.

cmake \
    -DOCC_INCLUDE_DIR=/usr/include/opencascade \
    -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
    ../IfcOpenShell-source/cmake/

Domyślnie system kompilacji oczekuje edycji społecznościowej (OCE) OpenCASCADE (/usr/include/oce/), jednak należy pamiętać, że ta wersja jest przestarzała i od 2020 roku nie jest już zalecana przez FreeCAD. Z tego powodu zaleca się instalację plików developerskich głównej wersji OpenCASCADE (OCCT).

Bez OpenCOLLADA

Jeżeli nie potrzebujesz obsługi OpenCOLLADA (plików DAE), należy ją wyłączyć jawnie za pomocą zmiennej COLLADA_SUPPORT.

cmake \
    ...
    -DCOLLADA_SUPPORT=FALSE \
    ../IfcOpenShell-source/cmake/

Z OpenCOLLADA

Jeżeli samodzielnie skompilowałeś OpenCOLLADA lub biblioteki nie znajdują się w standardowym katalogu, może być konieczne ustawienie odpowiednich zmiennych dla OpenCOLLADA oraz biblioteki libpcre.

cmake \
    ...
    -DOPENCOLLADA_INCLUDE_DIR=/usr/include/opencollada \
    -DOPENCOLLADA_LIBRARY_DIR=/usr/lib/opencollada \
    -DPCRE_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu \
    ../IfcOpenShell-source/cmake/

Określanie bibliotek libxml2

Jeżeli biblioteki libxml2 nie zostaną znalezione podczas kompilacji i linkowania, lub jeśli znajdują się w niestandardowym katalogu, może być konieczne ustawienie odpowiednich zmiennych.

cmake \
    ...
    -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 \
    -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so \
    ../IfcOpenShell-source/cmake/

Określanie instalacji w katalogu domowym użytkownika

Domyślnie moduł Python ifcopenshell zostanie zainstalowany w systemowym katalogu site-packages/, co wymaga uprawnień administratora. Ustawiając zmienną USERSPACE_PYTHON_PREFIX, instalacja modułu Python zostanie przeprowadzona w katalogu domowym użytkownika.

cmake \
    ...
    -DUSERSPACE_PYTHON_PREFIX=ON \
    ../IfcOpenShell-source/cmake/

Określanie wersji Pythona

Jeżeli chcesz wygenerować powiązanie dla konkretnej wersji Pythona, ustaw zmienną PYTHON_EXECUTABLE na odpowiedni plik wykonywalny. Pamiętaj, że wersja ta musi być taka sama, jak wersja Pythona, względem której skompilowano FreeCAD.

cmake \
    ...
    -DPYTHON_EXECUTABLE=/usr/bin/python3.6 \
    ../IfcOpenShell-source/cmake/

Pojedyncza linia konfiguracji

W typowym systemie Debian/Ubuntu możesz użyć tej linii do skonfigurowania kompilacji. Dostosuj ją w razie potrzeby.

cmake -DOCC_INCLUDE_DIR=/usr/include/opencascade -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so -DUSERSPACE_PYTHON_PREFIX=ON ../IfcOpenShell-source/cmake/

Bez OpenCOLLADA:

cmake -DOCC_INCLUDE_DIR=/usr/include/opencascade -DOCC_LIBRARY_DIR=/usr/lib/x86_64-linux-gnu -DCOLLADA_SUPPORT=FALSE -DLIBXML2_INCLUDE_DIR=/usr/include/libxml2 -DLIBXML2_LIBRARIES=/usr/lib/x86_64-linux-gnu/libxml2.so -DUSERSPACE_PYTHON_PREFIX=ON ../IfcOpenShell-source/cmake/

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.

Rozwiązywanie problemów i inne opcje

Wszystkie opcje konfiguracji znajdują się w pliku CMakeLists.txt w katalogu IfcOpenShell-source/cmake/. Jeśli pojawią się problemy podczas uruchamiania CMake lub Make, zajrzyj tam, aby sprawdzić inne opcje, które mogą wymagać ustawienia.

We wszystkich powyższych instrukcjach zamiast cmake można użyć graficznego interfejsu cmake-gui. Pozwoli to szybko zobaczyć dostępne opcje konfiguracji.

cmake-gui ../IfcOpenShell-source/cmake/

Testowanie kompilacji w katalogu build

Jeżeli kompilacja zakończyła się sukcesem, powinien powstać podkatalog examples/ z nowo skompilowanym plikiem wykonywalnym IfcOpenHouse. Uruchom to narzędzie z katalogu build, aby wygenerować przykładowy plik IFC.

example/IfcOpenHouse

Przykładowy plik IFC powinien pojawić się w katalogu build i może być użyty jako wejście dla również nowo skompilowanego pliku wykonywalnego IfcConvert. To narzędzie przyjmuje jako wejście plik IFC i generuje na wyjściu różne formaty, w tym OBJ, DAE (jeśli włączono obsługę OpenCOLLADA), STEP, IGS, XML, SVG lub inny plik IFC.

./IfcConvert IfcOpenHouse.ifc

Jeżeli nie zostanie podany plik wyjściowy, domyślnie zostanie utworzony plik OBJ wraz z odpowiadającą mu tabelą materiałów (MTL).

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/IfcConvert
/usr/local/bin/IfcGeomServer
/usr/local/include/ifcparse/*.h
/usr/local/include/ifcgeom/*.h
/usr/local/include/ifcgeom_schema_agnostic/*.h
/usr/local/include/serializers/{*.h,*.cpp}
/usr/local/include/serializers/schema_dependent/{*.h,*.cpp}
/usr/local/lib/libIfcGeom*.a
/usr/local/lib/libIfcParse.a
/usr/local/lib/libSerializers*.a

Moduł Pythona ifcopenshell, wymagany przez FreeCAD, nie znajduje się faktycznie w katalogu build; pakiet ten jest tworzony dopiero po uruchomieniu make install. Powstały pakiet jest umieszczany w katalogu site-packages/ lub w katalogu dist-packages/ w dystrybucjach Debian/Ubuntu.

/usr/lib/python3/dist-packages/ifcopenshell/

Jeżeli zmienna USERSPACE_PYTHON_PREFIX została ustawiona podczas konfiguracji CMake, moduł ifcopenshell zostanie umieszczony w katalogu site-packages/ użytkownika.

$HOME/.local/lib/python3.6/site-packages/ifcopenshell/

Usuwanie skompilowanych bibliotek

Aby usunąć zainstalowane biblioteki, wystarczy usunąć odpowiadające im pliki oraz katalog ifcopenshell/ wraz ze wszystkimi modułami w nim zawartymi.

sudo rm -rf /usr/local/bin/IfcConvert
sudo rm -rf /usr/local/bin/IfcGeomServer
sudo rm -rf /usr/local/include/ifcparse/
sudo rm -rf /usr/local/include/ifcgeom/
sudo rm -rf /usr/local/include/ifcgeom_schema_agnostic/
sudo rm -rf /usr/local/lib/libIfcGeom*
sudo rm -rf /usr/local/lib/libIfcParse*
sudo rm -rf /usr/local/lib/libSerializers*
sudo rm -rf /usr/lib/python3/dist-packages/ifcopenshell/

Lub, jeśli zmienna USERSPACE_PYTHON_PREFIX była ustawiona.

sudo rm -rf $HOME/.local/lib/python3.6/site-packages/ifcopenshell/

Instalacja ręczna

Kompilacja całej dystrybucji IfcOpenShell generuje pliki wykonywalne, takie jak IfcConvert i IfcGeomServer, a także wiele bibliotek statycznych (lib*.a) w katalogu build. Jednak dla FreeCAD potrzebny jest jedynie moduł Python ifcopenshell. Moduł ten nie jest pojedynczym plikiem, lecz "pakietem", czyli katalogiem zawierającym różne pliki. Pakiet ifcopenshell jest tworzony z wrapperów Pythona zbudowanych w katalogu IfcOpenShell-build/ifcwrap/ oraz z modułów Pythona znajdujących się w oryginalnym katalogu źródłowym IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/.

../IfcOpenShell-build/ifcwrap/ifcopenshell_wrapper.py
../IfcOpenShell-build/ifcwrap/_ifcopenshell_wrapper.so
../IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/

Moduł ifcopenshell jest tworzony poprzez skopiowanie oryginalnego katalogu źródłowego i dodanie do niego dwóch plików *ifcopenshell_wrapper*.

cp -rt . ../IfcOpenShell-source/src/ifcopenshell-python/ifcopenshell/
cp -t ifcopenshell/ ifcwrap/ifcopenshell_wrapper.py ifcwrap/_ifcopenshell_wrapper.so

Teraz ten katalog można przenieść do katalogu site-packages/ użytkownika lub systemowego (dist-packages/ w Debian/Ubuntu), aby był dostępny dla wszystkich aplikacji Python.

mv -t $HOME/.local/lib/python3.6/site-packages/ ifcopenshell/

Lub dla instalacji dla całego systemu:

sudo mv -t /usr/lib/python3/dist-packages/ ifcopenshell/

Teraz moduł ifcopenshell powinien być dostępny do zaimportowania z konsoli Pythona.

>>> import ifcopenshell
>>> print(ifcopenshell.version)
0.6.0b0
>>> print(ifcopenshell.__path__)
['/home/user/.local/lib/python3.6/site-packages/ifcopenshell']

Aplikacja przeglądarki IFC

Biblioteka IfcOpenShell zawiera w rzeczywistości mały graficzny przeglądarka plików IFC, która wykorzystuje PyQt5 oraz PythonOCC.

Aby uruchomić tę przeglądarkę z poziomu konsoli Python, należy utworzyć instancję klasy application i ją uruchomić:

from ifcopenshell.geom.app import application
application().start()

Jeżeli biblioteka jest już zainstalowana, cały moduł można również uruchomić z terminala:

python3 /home/user/.local/lib/python3.6/site-packages/ifcopenshell/geom/app.py

W chwili pisania tego tekstu (2020) obsługiwana była jedynie wersja PythonOCC skompilowana dla edycji społecznościowej OpenCASCADE (OCE).

Przeglądarka IFC online

Projekt IfcOpenShell opracował również "IFC Pipeline", samodzielny program do przetwarzania i wizualizacji plików IFC. Udostępnia on także małą aplikację webową, która przyjmuje przesyłane pliki i może być używana przez każdego. Oznacza to, że do wizualizacji danych IFC nie jest konieczne lokalne zainstalowanie IfcOpenShell ani innych przeglądarek - wystarczy załadować plik IFC do tego systemu, aby zobaczyć wynik.

Więcej informacji