Industry Foundation Classes (IFC), jak już mogłeś przeczytać w innych miejscach na tym blogu lub ogólnie w Internecie, to standard, który istotnie ułatwia wymianę danych pomiędzy różnymi stronami w projekcie. Jest to uniwersalny schemat danych, zaprojektowany w celu ułatwienia przesyłania informacji projektowych między różnymi systemami.
W niniejszym artykule skupimy się na analizie różnorodnych typów właściwości. Dodatkowo, przyjrzymy się im bliżej i postaramy odpowiedzieć na pytanie, które z nich warto wybrać do zapisania informacji w Twoim projekcie.
Zapraszam do artykułu.
Jeśli interesuje Cię temat IFC 4.3, nie zapomnij sprawdzić innych artykułów poświęconych temu tematowi na naszym blogu.
- Infrastruktura drogowa w schemacie IFC 4.3
- IFC 4.3 w projekcie drogowym (CASE STUDY)
- Relacje w infrastrukturalnym modelu IFC 4.3
- Przestrzenny podział projektu infrastrukturalnego w IFC
- IFC 4.3 na budowie
- Webinar o IFC 4.3
- Ticket to openBIM
- Export IFC 4.3
- 7 najważniejszych zmian w IFC kształtujących openBIM dla infrastruktury
- Przesyłanie Danych z Civil 3D do Quadri i Eksport do IFC 4.3
- Pięć skutecznych narzędzi do zapewnienia jakości danych w modelach BIM
Typy właściwości
W standardzie IFC, każdy obiekt BIM jest przyporządkowany do określonej klasy (Entity), a każda klasa posiada swoje atrybuty. Przykładowe atrybuty obejmują Name, Description, PredefinedType, ObjectType oraz Tag. Choć te atrybuty pomagają w identyfikacji obiektu, często nie są wystarczające do pełnego opisu.
W celu bardziej precyzyjnego charakteryzowania obiektów stosuje się właściwości. Właściwości mogą przyjmować różne wartości i są reprezentowane za pomocą różnych typów danych. Właściwości mogą być zróżnicowane, obejmując zarówno podstawowe, jak i bardziej zaawansowane parametry.
Grupę właściwości o podobnych cechach nazywamy zestawem właściwości. Standard IFC oferuje predefiniowane zestawy właściwości, oznaczone przedrostkiem Pset_.
W standardzie IFC 4×3 dostępnych jest 645 zestawów właściwości. Te standardowe zestawy są dostępne dla różnych branż, faz projektu lub typów odbiorców.
Listę wszystkich “Psetów” możesz znaleźć tutaj: LINK
Połączenie właściwości z obiektem
Technicznie rzecz biorąc, zestawy właściwości (“Psety”) są połączone z obiektem, a nie bezpośrednio z właściwościami. Oznacza to, że każda właściwość, nawet jeśli jest tylko jedna, musi być częścią zestawu właściwości.
Jeśli znasz chociaż trochę schemat IFC, wiesz, że oprócz obiektów i właściwości istnieją także relacje. Relacje służą do łączenia obiektów z obiektami, obiektu z klasyfikacjami, obiektów z materiałem.
Nie inaczej jest w tym przypadku. Do połączenia obiektu z zestawem właściwości służy relacja ifcRelDefinesByProperties.
Typy właściwości
Zestaw właściwości może zawierać różne typy właściwości, te z mogą mieć różne typy danych. Ale po kolei.
Poniżej krótki opis poszczególnych typów właściwości:
IfcPropertySingleValue
- Jedna wartość właściwości.
- Może przyjmować różne typy danych pojedynczych wartości, takie jak liczby, ciągi znaków (tekst), daty itp.
- Przykład: Właściwość o nazwie “Waga” z wartością liczbową 100.2 kg.
/* Name, Specification, NominalValue, Unit */
#116 = IFCPROPERTYSINGLEVALUE('WEIGHT', $, IFCREAL('100.2'), $);
IfcPropertyBoundedValue
- Wartość właściwości z określonymi granicami.
- Często używany do opisania właściwości, które mają ograniczenia, na przykład zakres wartości.
- Przykład: Właściwość “Powierzchnia” z wartością między 100 a 250 metrów kwadratowych.
/* Name, Specification, UpperBoundValue, LowerBoundValue, Unit, SetPointValue */
#132 = IFCPROPERTYBOUNDEDVALUE('AREA', $, IFCINTEGER('250'), IFCINTEGER('150'), #140, $);
/* Dimensions, UnitType, Prefix, Name */
#140 = IFCSIUNIT(*,.AREAUNIT., $,.SQUARE_METRE.);
IfcPropertyEnumeratedValue
- Właściwość, która może przyjmować jedną z ograniczonej listy wartości.
- Stosowane, gdy właściwość można przyporządkować do jednej z predefiniowanych opcji.
- Przykład: Właściwość “Kolor” z opcjami: czerwony, niebieski, zielony.
/* Name, Specification, EnumerationValues, EnumerantionReference */
#133 = IFCPROPERTYENUMERATEDVALUE('COLOR', $, (IFCLABEL('RED')), #134);
/* Name, EnumerationValues, Unit */
#134 = IFCPROPERTYENUMERATION('ePENUM_COLOR', (IFCLABEL('RED'), IFCLABEL('GREEN'), IFCLABEL('BLUE')), $);
IfcPropertyListValue
- Wartość właściwości reprezentowana jako lista.
- Może zawierać różne typy danych w formie listy.
- Przykład: Właściwość “Materiały” jako lista zawierająca drewno, stal, beton.
/* Name, Specification, ListValues, Unit */
#135 = IFCPROPERTYLISTVALUE('MATERIAL_LIST', $, (IFCLABEL('WOOD'), IFCLABEL('STEEL'), IFCLABEL('CONCRETE')), $);
IfcPropertyReferenceValue
- Wartość właściwości reprezentowana jako odniesienie do innego obiektu lub encji.
- Często używane, gdy właściwość jest związana z innym obiektem w modelu danych.
- Przykład: Właściwość “Matariał” jako odniesienie do obiektu reprezentującego rodzaj materiału.
/* Name, Specification, UsageName, PropertyReference */
#136 = IFCPROPERTYREFERENCEVALUE('MATERIAL_NAME', $, $, #139);
/* Name, Description, Category */
#139 = IFCMATERIAL('Brick',$,$);
IfcPropertyTableValue
- Właściwość zorganizowana w formie tabeli.
- Używane, gdy właściwość wymaga struktury tabelarycznej do opisania.
- Przykład: Tabela z właściwościami chemicznymi różnych substancji.
/* Name, DefiningValues, DefinedValues, Expression, DefiningUnit, DefinedUnit, CurveInterpolation */
#137 = IFCPROPERTYTABLEVALUE('TABLE', $, (IFCLABEL('Property1'),IFCLABEL('Property2')), (IFCTEXT('Value1'),IFCTEXT('Value2')), $, $, $, $);
Typy danych
Rozumiemy teraz, że istnieją różne rodzaje właściwości, a te właściwości są łączone w zestawy, z którymi każdy obiekt jest powiązany poprzez relację ifcRelDefinesByProperties.
Przechodzimy teraz do opisu typów danych, które stanowią nieodłączny element każdej właściwości. Wyróżniamy trzy główne grupy wartości: IfcSimpleValue, IfcMeasureValue oraz IfcDerivedMeasureValue.
W niniejszym artykule skupię się jednak na pierwszej grupie.
Rozróżniamy następujące typy danych (IfcSimpleValue, IFC 4×3):
- IfcInteger:
- Definicja: Typ danych reprezentujący liczby całkowite bez miejsc po przecinku.
- Przykład: Może być używany do określenia liczby pięter w budynku.
- IfcReal:
- Definicja: Typ danych reprezentujący liczby rzeczywiste, pozwalający na miejsca po przecinku.
- Przykład: Stosowany do określania dokładnych wymiarów elementów konstrukcyjnych, na przykład długości ściany.
- IfcBoolean:
- Definicja: Typ danych reprezentujący wartości logiczne, takie jak prawda/fałsz.
- Przykład: Może być używany do określenia stanu, na przykład, czy drzwi są zamknięte (true) czy otwarte (false).
- IfcLogical:
- Definicja: Typ danych reprezentujący wartości logiczne, podobnie jak IfcBoolean.
- Przykład: Stosowany do reprezentowania warunków logicznych w specyfikacjach projektu, na przykład, czy materiał jest ognioodporny (true) czy nie (false).
- IfcIdentifier:
- Definicja: Typ danych reprezentujący ciągi znaków używane w celach identyfikacyjnych.
- Przykład: Może być używany do nadawania unikalnych identyfikatorów poszczególnym elementom konstrukcyjnym.
- IfcLabel:
- Definicja: Typ danych reprezentujący ciągi znaków używane w celach nazewniczych.
- Przykład: Stosowany do nadawania czytelnych nazw elementom, na przykład, “Ściana główna”.
- IfcText:
- Definicja: Typ danych reprezentujący ciągi znaków używane w celach opisowych.
- Przykład: Używany do dostarczania dodatkowych informacji opisowych o konkretnym elemencie budowlanym.
- IfcDateTime:
- Definicja: Typ danych reprezentujący datę i godzinę.
- Przykład: Stosowany do określania momentu w czasie, kiedy został wykonany konkretny pomiar budowlany.
- IfcDate:
- Definicja: Typ danych reprezentujący informacje o dacie.
- Przykład: Może być używany do określania daty rozpoczęcia budowy danego obiektu.
- IfcTime:
- Definicja: Typ danych reprezentujący informacje o czasie.
- Przykład: Używany do określania czasu trwania konkretnej fazy budowy, na przykład, czasu potrzebnego do ukończenia fundamentów.
- IfcDuration:
- Definicja: Typ danych reprezentujący okres czasu lub interwał czasowy.
- Przykład: Stosowany do określania czasu trwania całego projektu budowlanego.
- IfcTimeStamp:
- Definicja: Typ danych reprezentujący punkt w czasie, liczony w sekundach od 1970 roku.
- Przykład: Może być używany do reprezentacji daty i godziny ostatniej aktualizacji modelu 3D.
- IfcURIReference:
- Definicja: Typ danych reprezentujący unikalny ciąg znaków identyfikujący zasób logiczny lub fizyczny używany w technologiach internetowych.
- Przykład: Stosowany do odwoływania się do zewnętrznych materiałów, na przykład specyfikacji technicznych przechowywanych online.
Wybór Właściwości i Typów Wartości
Różnorodność typów właściwości oraz danych w środowisku BIM jest niezaprzeczalna. Niemniej jednak, w praktyce wykorzystuje się jedynie wybraną część z tej bogatej gamy. Dodatkowo, niektóre rodzaje właściwości napotykają na trudności związane z brakiem wsparcia ze strony przeglądarek IFC, co skutecznie ogranicza ich praktyczne zastosowanie. Przykładem właściwości, z którymi mają problem przeglądarki IFC są IfcPropertyBoundedValue oraz IfcPropertyTableValue.
Bez wątpienia królem wśród właściwości jest ifcPropertySingleValue. Jego prostota implementacji oraz wsparcie ze strony wszystkich narzędzi pracujących z IFC sprawiają, że stanowi on fundament dla efektywnej pracy zarówno przy tworzeniu, jak i przetwarzaniu modeli BIM.
Podobna sytuacja ma miejsce w przypadku typów danych. Nie wszystkie są powszechnie stosowane, a najbardziej utrwalone są te podstawowe, obecne już w standardzie IFC 2×3. Mowa tutaj o ifcInteger, ifcReal, ifcLabel, ifcText i ifcBoolen. Korzystając z tych fundamentalnych typów danych, możemy mieć pewność, że nasze informacje zostaną poprawnie odczytane przez różnorodne narzędzia.
Odpowiadając na postawione na początku artykułu pytanie dotyczące sposobu zapisu naszych informacji BIM przy użyciu standardu IFC, jestem przekonany, że właśnie ta (wspomniana powyżej) kombinacja nie tylko zapewnia zgodność naszych danych z normą, ale także gwarantuje łatwy dostęp i czytelność w każdym narzędziu obsługującym format IFC.
Jak dodać właściwości do obiektu?
Przechodząc do praktycznej części artykułu, przedstawię teraz prosty sposób dodawania informacji do modelu bez konieczności korzystania z drogich programów czy języków programowania. Jest to szczególnie przydatne, gdy chcemy dodać niewielką ilość właściwości do konkretnego obiektu, na przykład ifcBuildingElementProxy, lub gdy chcemy uzupełnić zestaw właściwości dla obiektów przestrzennych, takich jak ifcRoad, ifcSite czy ifcRailway.
Jak już dowiedzieliśmy się z poprzedniej części artykułu, aby połączyć obiekt z właściwościami, właściwość musi być częścią zbioru, który z kolei musi być powiązany z obiektem za pomocą relacji.
Zacznijmy od określenia, jakie właściwości chcemy dodać do naszego projektu i jakie wartości one reprezentują. W tym przypadku użyję zestawu właściwości składającego się z:
1. Author: Marcin Pszczółka (String)
2. Blog name: BIMCORNER (String)
3. Title of article: Properties in IFC (String)
4. Number of article: 201 (Number)
Posiadając już te właściwości, musimy utworzyć zestaw właściwości o nazwie “Common”. Zestaw ten musi posiadać unikalne ID, odniesienie do właściwości oraz do relacji. Zestaw właściwości znajduje się w linii #111.
Do połączenia obiektu z zestawem właściwości użyjemy relacji ifcRelDefinesProperties, która w naszym przypadku znajduje się w linii #110.
Następnie lokalizujemy obiekt, do którego chcemy przypisać właściwości. W moim przypadku interesujący obiekt znajduje się w linii #109.
Widzisz, że znając podstawowe zasady, możemy łatwo połączyć te elementy ze sobą.
Poniżej znajdziesz pełen przykład, ilustrujący w szczegółowy sposób, jak dodawać informacje do obiektu.
/* GlobalId, OwnerHistory, Name, Description, ObjectType, ObjectPlacement, Representation, Tag, PredefinedType */
#109 = IFCBUILDINGELEMENTPROXY('1M06J4V4v2wOkLDqTQEOYI', #6, 'TopSurface', $, 'PROXYOBJECT', #20, #122, $, 'USERDEFINED');
/* GlobalId, OwnerHistory, Name, Description, RelatedObjects, RelatingPropertyDefinition */
#110 = IFCRELDEFINESBYPROPERTIES('0rqbV$QVbEXuK__P05wmBy', #6, $, $, (#109), #111);
/* GlobalId, OwnerHistory, Name, Description, HasProperties */
#111 = IFCPROPERTYSET('3oOx18zQXElPN3IlOR6gau', #6, 'Common', $, (#112, #113, #114, #115));
/* Name, Specification, NominalValue, Unit */
#112 = IFCPROPERTYSINGLEVALUE('Blog name', $, IFCLABEL('BIMCORNER'), $);
#113 = IFCPROPERTYSINGLEVALUE('Author', $, IFCTEXT('Marcin Pszczolka'), $);
#114 = IFCPROPERTYSINGLEVALUE('Title of article', $, IFCTEXT('Properties in IFC'), $);
#115 = IFCPROPERTYSINGLEVALUE('Number of article', $, IFCREAL('201'), $);
Podsumowanie
Jak mogłeś przeczytać powyżej, w niniejszy, artykule głęboko przeanalizowałem właściwości w standardzie IFC dla projektów BIM.
Tak więc podsumowując, W IFC każdy obiekt ma przyporządkowane właściwości, a standard oferuje różnorodne typy, takie jak ifcPropertySingleValue czy ifcPropertyEnumeratedValue.
W praktyce polecam korzystanie z ifcPropertySingleValue oraz podstawowych typów danych, np. IfcInteger czy IfcLabel, ze względu na ich prostotę i wsparcie w narzędziach IFC.
Podsumowując, mam nadzieję, że ten artykuł rzucił świerze spojrzenie na właściwości w IFC, podkreślając praktyczne aspekty dodawania informacji do modelu BIM.