Как стать автором
Обновить

IFC-Ассоциации или как подружить элементы и документы пятью строками кода

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров738

Формат IFC (Industry Foundation Classes) широко используется в строительстве для обеспечения интероперабельности между различными программными продуктами в области архитектуры, проектирования и строительства. Он позволяет обмениваться данными о моделях, что особенно важно для крупных и сложных проектов.

Применение формата IFC продолжает расширятся. Некоторые IFC-Вьюверы после недавнего обновления обрели возможность указывать документ со списком элементов модели, которые этот документ охватывает. Вторая интересная возможность – увидеть процедуру согласования вместе с элементами модели, которые её проходят.

IFC без ассоциаций

Если мы посмотрим на модель, в которой ассоциации не созданы, то увидим пустые разделы "Документы" и "Согласования".

IFC без Ассоциаций
IFC без Ассоциаций

Это не удивительно, ведь в STEP-коде IFC-файла должны быть строки, которые у определённых элементов устанавливают ассоциации с конкретным документом и/или процессом согласования. Пока таких отношений не создано. Сделаем это.

Откроем в блокноте IFC-файл и добавим в конец всего 5 строк.

Документы

Для создания ассоциаций в разделе "Документы" воспользуемся тремя IFC-Сущностями.

1. IfcDocumentInformation

Согласно семантическому определению IfcDocumentInformation получает метаданные внешнего документа. Ссылку же на сам документ будем передавать в атрибуте Location.

Итак, создадим первую строку, чтобы определить сам документ. Порядковый номер строки #1000 условный.

#1000=IFCDOCUMENTINFORMATION('Doc_1 (Идентификатор Документа)', 'ДОКУМЕНТ', 'Описание документа/содержания', 'Документ.pdf', 'Назначение документа: Для Строительства', 'Использование документа: Для Конструктора', 'Область применения: Расчеты нагрузок', 'Идентификатор версии документа: v.1.0', $, $,'Создан: 2024-02-13 10:20:15', 'Изменение редакции: 2024-02-14', 'Формат: Документ/pdf','Дата вступления документа в силу: 2025-02-16','Дата окончания действия документа: 2026-12-31', .PUBLIC., .FINAL.);

Рассмотрим атрибуты и их наполнение подробнее.

Атрибуты IfcDocumentInformation

  1. Identification. Идентификатор, который однозначно идентифицирует документ.

  2. Name. Имя документа. Присваивается пользователем.

  3. Description. Описание документа и его содержания.

  4. Location. Ссылка на документ. Ссылка может быть URL, прямая или отностительная. Например 'Документ.pdf'. В данном случае документ должен лежать в папке с IFC-файлом.

  5. Purpose. Цель/назначение документа.

  6. IntendedUse. Предполагаемое использование этого документа.

  7. Scope. Область применения документа.

  8. Revision. Описание редакции/версии документа.

  9. DocumentOwner. Информация о лице и/или организации-владельце документа.

  10. Editors. Лица и/или организации, которые создали/изменили документ.

  11. CreationTime. Дата и время первоначального создания документа.

  12. LastRevisionTime. Дата и время создания данной редакции/версии документа.

  13. ElectronicFormat. Описывает тип документа. Например, image/png или application/pdf.

  14. ValidFrom. Дата вступления документа в силу.

  15. ValidUntil. Дата, до которой документ остается действительным.

  16. Confidentiality. Уровень конфиденциальности документа. Указывается не произвольной строкой в одинарных кавычках 'string', а берется строго из перечисления и записывается между двух точек. Например, .CONFIDENTIAL. , .PUBLIC. и прочее.

  17. Status. Текущий статус документа. Берётся из этого перечисления. Например, .DRAFT. , .FINAL. и прочее.

Для символов кириллицы IFC и STEP-формат используют символы BMP (Basic Multilingual Plane). Слова передаются последовательностями вида '/X2/коды символов кириллицы/X0/' Однако в примере сделано отступление от этого порядка. Для удобства восприятия.

Не лишним будет упомянуть следующее: если какая-то информация о документе не нужна, то вместо атрибута следует писать знак $.

Теперь нужно создать ссылку на этот документ. Воспользуемся другой IFC-сущностью.

2. IfcDocumentReference

IfcDocumentReference  это по сути ссылка на документ. Заполнять атрибуты у данной IFC-сущности не обязательно. Однако для удобства чтения человеком сделаем это.

#2000=IFCDOCUMENTREFERENCE($, $, 'СПИСОК ЭЛЕМЕНТОВ, охваченных документом', 'Описание списка', $, $, $, #1000);

Теперь всё готово, чтобы создать ассоциацию.

3. IfcRelAssociatesDocument

Что умеет данная IFC-сущность? Именно она создаёт ассоциации между элементами модели, например стенами и документом. Другими словами, устанавливает отношения между элементами и документом.

Одна ссылка на документ может быть применена к нескольким элементам.

Найдем в STEP-коде элементы класса IfcWall, чтобы получить номера их строк. На эти номера мы создадим ассоциацию.

#67=IFCWALL......;
#150=IFCWALL......;
#110=IFCWALL......;
#274=IFCWALL......;

Стены найдены. Напишем ассоциацию, чтобы подружить элементы и документ.

#4000=IFCRELASSOCIATESDOCUMENT('Doc_1_Association', $, $, $, (#1000, #67, #150, #274), #2000);

В результате IFC-Вьювер видит метаданные документа и список стен, которые этот документ охватывает.

IFC Ассоциация документа с элементами
IFC Ассоциация документа с элементами

Теперь посмотрим, как создать ассоциацию элемента с каким-нибудь процессом согласования.

Согласования

Здесь нам потребуется две оставшиеся IFC-сущности.

4. IfcApproval

IfcApproval создает информацию о процедурах согласования. Мы можем использовать ее для утвердждения чертежей, изменений в проекте, рассмотрения технических предложений и так далее. Процедура может быть связана не только с проектированием, но и со строительством, эксплуатацией и другими периодами жизненного цикла здания.

Напишем код описания процедуры согласования.

#5000=IFCAPPROVAL('Идентификатор процедуры', 'СПИСОК ЭЛЕМЕНТОВ НА УТВЕРЖДЕНИЕ', 'Описание Процедуры', 'Дата/время получения результата: 2025-02-15', 'Статус: Одобрено', 'Стадия: Предпроектная проработка', 'Условие для утверждения: Согласование у ГИП/ГАП');

Рассмотрим атрибуты и их значения более детально.

Атрибуты IfcApproval

  1. Identifier. Идентификатор процедуры согласования.

  2. Name. Наименование процедуры согласования.

  3. Description. Описание проекта, конструкции, элементов и т. д., которые проходят процедуру согласования.

  4. TimeOfApproval. Дата и время получения результата процедуры.

  5. Status. Статус процедуры согласования. Например «Одобрено», «Не одобрено».

  6. Level. Стадия/фаза, в которой находится процедура согласования. Например «Эскиз», «Проект».

  7. Qualifier. Условие, при выполнении которого процедура согласования будет официально и положительно завершена. Например «Требуется проверка на соответствие СП__п.1.9».

  8. RequestingApproval. Организация или лицо, запросившие процедуру согласования.

  9. GivingApproval. Организация или лицо, выдающие согласование. Например ГИП, утверждающий чертежи, или надзорный орган, подтверждающий соответствие нормативам.

Теперь создадим ассоциацию нескольких стен с данной процедурой.

5. IfcRelAssociatesApproval

Не будем усложнять код. Просто перечислим номера строк со стенами (IfcWall) и укажем номер строки процедуры согласования.

#110=IFCWALL......;
#274=IFCWALL......;
#5000=IFCRELASSOCIATESAPPROVAL($, $, $, $, (#110, #274),#4000);

В результате наш IFC-Вьювер видит, что две стены проходят процедуру утверждения.

IFC Ассоциация согласования с элементами
IFC Ассоциация согласования с элементами

Заключение

Итак, всего пятью строками кода мы ассоциируем конкретные элементы IFC-Модели с выбранным документом или процедурой согласования.

Конечно, мы можем расширить функционал ассоциации, задействовав неиспользованные атрибуты. Например, добавить, информацию о физическом или юридическом лице — владельце документа. Для этого перед нашим кодом для создания ассоциации вставим строку с информацией о какой-нибудь организации.

#999=IFCORGANIZATION('Id (Идентификатор организации)','Гос.Экспертиза','Описание организации',$,$);

В конечном виде наш STEP-код выглядит следущим образом:

#67=IFCWALL......;
#150=IFCWALL......;
#110=IFCWALL......;
#274=IFCWALL......;


#999=IFCORGANIZATION('Id (Идентификатор организации)','Владелец документа: OOO "Застройщик"','Описание организации',$,$);

#1000=IFCDOCUMENTINFORMATION('Doc_1 (Идентификатор Документа)', 'ДОКУМЕНТ', 'Описание документа/содержания', 'Документ.pdf', 'Назначение документа: Для Строительства', 'Использование документа: Для Конструктора', 'Область применения: Расчеты нагрузок', 'Идентификатор версии документа: v.1.0', #999, $,'Создан: 2024-02-13 10:20:15', 'Изменение редакции: 2024-02-14', 'Формат: Документ/pdf','Дата вступления документа в силу: 2025-02-16','Дата окончания действия документа: 2026-12-31', .PUBLIC., .FINAL.);
#2000=IFCDOCUMENTREFERENCE($, $, 'СПИСОК ЭЛЕМЕНТОВ, охваченных документом', 'Описание списка', $, $, $, #1000);
#3000=IFCRELASSOCIATESDOCUMENT('Doc_1_Association', $, $, $, (#1000, #67, #150, #274), #2000);

#4000=IFCAPPROVAL('Идентификатор процедуры', 'СПИСОК ЭЛЕМЕНТОВ НА УТВЕРЖДЕНИЕ', 'Описание Процедуры', 'Дата/время получения результата: 2025-02-15', 'Статус: Одобрено', 'Стадия: Предпроектная проработка', 'Условие для утверждения: Согласование у ГИП/ГАП');
#5000=IFCRELASSOCIATESAPPROVAL($, $, $, $, (#110, #274),#4000);

Могу предположить, что осталось много вопросов. Например, как создавать ассоциации не в блокноте, а напрямую в BIM-софте.

Но это, как вы понимаете, совсем другая история.

IFC Ассоциации
IFC Ассоциации

Список ссылок на документацию IFC 4.3.2.0

Документы

8.6.3.3 IfcDocumentInformation
8.6.3.5 IfcDocumentReference
5.1.3.31 IfcRelAssociatesDocument

Согласования

8.2.3.1 IfcApproval
5.2.3.2 IfcRelAssociatesApproval

Перечисления

8.6.2.3 IfcDocumentConfidentialityEnum
8.6.2.5 IfcDocumentStatusEnum

Теги:
Хабы:
Всего голосов 2: ↑2 и ↓0+2
Комментарии4

Публикации

Истории

Работа

Ближайшие события

4 – 5 апреля
Геймтон «DatsCity»
Онлайн
8 апреля
Конференция TEAMLY WORK MANAGEMENT 2025
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань
20 – 22 июня
Летняя айти-тусовка Summer Merge
Ульяновская область