Берем документацию (2x3 или 4x3) и открываем через блокнот нашу модель. Я пользуюсь Notepad ++, кто-то Visual Studio Code (я пока не доросла) - выбирайте сами. Но совместно с Open IFC Viewer (для продвинутого пользователя: можно посмотреть все параметры и связи, но через отдельное окно) и Larix.Manager (для простого пользователя: отображает все нужные параметры элемента и материалов в свойствах).
Итак, давайте сперва откроем через Notepad ++
Чтение IFC через блокнот
Всё-на английском, да ещё и в кодировке. Например, Наименование проектта "FILE NAME". Как декодировать и сделать файл более наглядным писала в вводной статье по IFC (ищите по слову "кириллицы")
И вот что получается, уже лучше)
HEADER - основная часть про файл, где можно узнать про файл и его экспорт.
- ISO-10303-21 - файл записан в формате STEP (основа IFC).
- FILE_DESCRIPTION(...) включает:
Определение модельного вида ViewDefinition ReferenceView_V1.2
подробнее (https://t.me/bimspoint/48)
- Схема IFC IFC4
Благодаря этой информации можно убедиться в корректности базовых настроек экспорта.
А дальше уже капнем глубже, где и как записывается информация об элементах модели.
Чтение IFC через Open IFC Viewer
Например, хотим узнать всё про выборочный элемент модели:
- Выделяем в окне Визуализации или в дереве модели элемент
- ПКМ вызываем контекстное меню
- Tree View
Давайте разбираться, что тут написано.
#154=IFCWALL('3I61EuYrT5wfnJ$oBYREqo',$,'constituent-set',$,$,#179,#160,$,.MOVABLE.)
Кратко: это стена, без указанных метаданных, имеющая имя "constituent-set", с геометрией в #160, размещением в #179 и типом MOVABLE, то есть мобильная/перемещаемая стена. А если подробно и по полочкам:
$ означает, что значение не указано
Едем дальше, а какие тут есть связи?
Object Placement
#179=IFCLOCALPLACEMENT(#66,#178);
IfcLocalPlacement — это способ задать положение объекта (в данном случае стены) в пространстве относительно другого объекта или системы координат.
Положение стены описывается этажом со смещением согласно строчке #178. Положение этажа, на котором расположена стена описывается зданием со смещением согласно строчке #65. и тд
Стена #179 = IfcLocalPlacement(#66, #178)
Этаж #66 = IfcLocalPlacement(#60, #65)
Здание #60 = IfcLocalPlacement(#54, #59)
Площадка #54 = IfcLocalPlacement($, #53) ← глобальная система ($)
#54 — корневая локальная система, она не привязана ни к чему. То есть она стоит непосредственно в глобальной системе координат проекта.
#53 = IfcAxis2Placement3D(#50, #51, #52)
Итого: Стена стоит в определённом месте модели, которое вычисляется через 4 вложенных преобразования координат.
Representation
#160=IFCPRODUCTDEFINITIONSHAPE($,$,(#161));
IfcProductDefinitionShape - определяет всю информацию о форме (геометрии), которая относится к IfcProduct. Что означают значения через запятую:
#161=IFCSHAPEREPRESENTATION(#15,'Body','Tessellation',(#162));
IFCShapeRepresentation — это контейнер геометрии. Что означают значения через запятую:
Tessellation — это тип геометрического представления, где поверхность, представленная только через тесселяцию — то есть сетку из полигонов (чаще всего треугольников или квадов)
Итого: стена имеет ровно одно геометрическое представление, а если быть точнее геометрия объекта представлена полигонизированной сеткой.
HasAssociations
IfcRelAssociatesMaterial - это связь, которая назначает материал (или набор материалов) объекту.
#171=IFCRELASSOCIATESMATERIAL('2wlWdQBjL7CfO$0swdh_G6',$,$,$,(#154),#170)
2wlWdQBjL7CfO$0swdh_G6 (GUID)
$,$,$, (не заданы OwnerHistory, Name, Description)
#154 (список объектов с данным материалом, в данном случае одна стена)
#170 сам материал (Бывает разных типов IfcMaterial / IfcMaterialList / IfcMaterialLayerSet / IfcConstituentSet / IfcProfileSet)
В данном примере 1 ассоциация, а может быть больше, например:
- IfcRelAssociatesClassification → классификатор (OmniClass, UniClass, ГОСТ)
- IfcRelAssociatesDocument → документы
- IfcRelAssociatesLibrary → библиотеки
Подробнее про типы читай в статье:
Итого: на стену назначен перечень материалов (почему-то в этой модели тип для сложных составных объектов, а должен быть IfcMaterialLayerSet) без доп. свойств материала.
IfcMaterialProperties
Набор свойств материала. В примере выше он отсутствует. А вот пример объекта, где заполнены свойства материала:
IfcRelContainedInSpatialStructure
Связь, которая определяет, в каком пространственном элементе находится объект.
#154=IFCWALL('3I61EuYrT5wfnJ$oBYREqo',$,'constituent-set',$,$,#179,#160,$,.MOVABLE.) -> ContainedInStructure (1) -> #68=IFCRELCONTAINEDINSPATIALSTRUCTURE('0R09gE1zT6EO5XPEuFreHI',$,$,$,(#67,#102,#154,#196,#239),#43)
Итого: у стены есть ровно одна пространственная ассоциация, 5 элементов содержатся в одном и том же пространстве на таком-то этаже.
Другие атрибуты и связи
Казалось бы всё, но только для данного примера, ещё несколько примеров:
и т.д.
Полезные шпаргалочки от клуба IFC - на десерт
Как просто проверить структуру модели?
Открываем любой вьювер, ПО для просмотра ЦИМ. Например, Larix.Manager.
И смотрим, как построилось дерево модели. В данном проекте отсутствует IFcSite и у части элементов нет привязки к уровню (выделены желтым). Это ошибка и требует корректировки.
Если мы возьмем BIM Vision, то ошибок там мы не найдем, даже если данных нет, он сам определяет отметки элементов и прочую информацию, распределяю информацию про классической структуре IFC. Но это может ввести в заблуждение.
Заключение
На первый взгляд всё выглядит очень пугающе, но если посидеть и покопаться, вооружившись нужными инструментами, то всё уже не так страшно!
Особого вывода нет, так как статья по факту не закончена, ведь столько всего не раскрыто ещё! Пиши в комментариях, про что ещё написать