2.1. Очевидное лежит на поверхности
Вы уже, наверное, обращали внимание, что при экспорте из Renga в IFC любого стандартного оборудования (задается через стандартные типы объектов Renga, уже имеющих точки присоединения, т.е. порты, а также собственное УГО для обозначения их на планах и аксонометрических видах) и дальнейшего его импорта в Renga через IFC (просто выбираем в меню "Открыть" не файл проекта или шаблона Renga, а файл в формате *.ifc) можно увидеть, что Renga замечательно отображает данное оборудование сразу с портами.
Наблюдали? Причем данное оборудование можно использовать далее в проекте (оно также отображается в стилях оборудования), но лишь с одним неудобством - оно всегда попадает в "Прочие системы" (находится в параметрах систем) и нет возможности это изменить, так как кнопка заблокирована (данную тему я отдельно распишу по итогу всей публикации).
Или все-таки нет? Не отображаются порты (точки присоединения) при обратном импорте IFC в Renga? Значит вам надо просто научиться "готовить блюдо" так, чтобы Renga была "сыта и довольна". Идем дальше....
2.2. "Предрасположенность" Renga к распознаванию в импортируемом файле IFC оборудования только с определенной геометрией
Вначале попробуем разобраться, как Renga экспортирует/импортирует объекты через IFC (с какой геометрией, параметрами/свойствами и портами). Версия импорта у Renga - IFC4. И нам эта информация чуть позже пригодиться для пояснения.
Подготовка к экспериментам
Создаем новый проект в Renga (используем шаблон по умолчанию, в нем уже есть различные стили оборудования). Далее вставляем в модель три элемента оборудования (из настроенных стилей):
2.2.1. Эксперимент № 1 (почему некоторые из вас не видят то, о чем я написал выше)
Проверяем вначале, чтобы настройки экспорта геометрического представления объектов в Renga были по умолчанию (Reference View 1.2) + файл сопоставления типов также не изменялся (не буду перечислять, смотрим раздел "Настройки экспорта в международный обменный формат IFC"). Делаем экспорт в IFC и загружаем обратно данный файл. Выделяем объекты и видим.....
Renga не смогла распознать через реэкспорт IFC свои же объекты? При чем информация по портам у оборудования корректно записана в файл IFC (пока поверьте мне.... до момента, когда научитесь работать с IFC). Ну как же так?
Пока не будем торопиться с выводами, а просто возьмем себе на заметку: включение тесселяции (создание полигональных или треугольных мешей/сеток) нам не помогло.
Сразу отмечу на возможный вопрос от коллег: анализ файлов при экспорте в IFC с включенной тесселяцией показывает, что Renga корректно записывает данные о портах оборудования!
Т.е. в файле экспорта в IFC они присутствуют, но при обратном импорте (открытии) IFC Renga их игнорирует!.
Хорошо, давайте теперь попробуем по другому сделать. Ведь у нас же сейчас основная задача - это не экспорт в IFC, чтобы геометрия корректно отображалась в прочем ПО, а получение обратно объектов через IFC для последующего распознания их самой Renga!
2.2.2. Эксперимент № 2 (истина где-то рядом)
Меняем настройки экспорта геометрического представления объектов следующим образом:
отключаем тесселяцию, включаем твердотельный нередактируемый Brep. ВАЖНО!!! Почему отключаем тесселяцию?
Начнем с того, что в Букваре Renga (раздел "Проектирование инженерных систем") нам сказано: "Порядок приоритетности выбора программой Renga трехмерного представления объекта при экспорте основан на правиле «от сложного к простому» (т.е. от максимально возможной для математического воспроизведения и редактирования геометрии объектов к упрощенной и нередактируемой): • SweptSolid -> Brep -> Tesselation".
Т.е. при включенных двух настройках "Tesselation" и "Brep" Renga при невозможности выгрузки в Brep должна использовать Tesselation. Да, Renga при выгрузке учитывает это приоритет.
Но при обратной загрузке файла IFC Renga на объектах, геометрия которых сохранена через тесселяцию, не определяет порты (хотя они есть в файле IFC). Это показано ранее в эксперименте №1.
Поэтому мы намеренно отключаем Tesselation, так как она нам теперь уже не помощница при создании геометрии нестандартного оборудования. Ведь мы должны видеть результаты экспорта геометрии именно в Brep.
Суть ясна?
Повторяем действия экспорта/импорта через IFC. Смотрим.....
Ситуация прояснилась! Но куда-то же пропал вентилятор? Скажу откровенно, я специально поставил данное оборудование в модель, так как изначально его геометрию легко увидеть в Renga, когда данная геометрия сформирована тесселяцией при экспорте в IFC (мы уже убедились выше в эксперименте №1).
Все так плохо? Да нет! Все нюансы будут отражены далее в эксперимент №3. А пока небольшое примечание:
Различные эксперименты показали, что на самом деле и более сложная геометрия, чем у указанного вентилятора, нормально отображается в Brep. Нам осталась лишь совсем немного понять и принять подход Renga к отображению объектов, полученных через импорт IFC.
2.2.3. Эксперимент № 3 ("поэзия" о Brep или возвращение "блудного" вентилятора)
В IFC Brep представлен двумя классами: IfcFacetedBrep и более продвинутым, появившимся в версии IFC4, классом IfcAdvancedBrep. Именно последний класс может работать с NURBS-кривыми для описания граней.
И Renga его замечательно распознает (читает), так как работает с IFC4...... но не всегда.....местами.... только с определенной геометрией..... логика не выявлена.....почему так?
:((
Не буду вас, коллеги, дальше пугать. Но мой мозг был реально "взорван" этой аналитикой. Ответ в конце эксперимента.....
Теперь скажу прямо "в лоб": геометрия вентилятора никуда не пропала. Она была нормально сохранена программой Renga в IFC файле, но при обратном открытии (импорте) IFC Renga вдруг отказалась отображать (загружать) данную геометрию.
Проведем отдельно эксперимент с указанным ранее вентилятором:
1). Создаем новый проект (все также используем шаблон по умолчанию, где уже имеются ряд настроенных стилей различного оборудования), далее ставим в модель элемент вентиляционного оборудования "вентилятор радиальный №5".
2). Вооружаемся Notepad++ для изучения полученных IFC файл с вентилятором. Сейчас нас будут интересовать следующие классы IFC:
- важный (главный в своем роде) класс IFCSHAPEREPRESENTATION, отвечающий за геометрическое представление объектов в IFC;
3). А теперь начинаем делать импорт проекта с вентилятором-"невидимкой" в IFC, работая только с настройкой Brep.
Файл IFC №1: при экспорте у Brep включены все опции FacetedBrep и AdvancedBrep
Нахожу следующие строки:
#336= IFCADVANCEDBREP(#335);
#364= IFCFACETEDBREP(#363);
#416= IFCADVANCEDBREP(#415);
>#417= IFCSHAPEREPRESENTATION(#41,'Body','SolidModel',(#336,#364,#416));
Смотрим.... Индексы сущностей в IFCSHAPEREPRESENTATION соответствуют. Тип представления SolidModel включает в себя Brep и AdvancedBrep, так что значение 'SolidModel' тоже корректно указано. Беглый просмотр задания геометрии в классах IFCFACETEDBREP и IFCADVANCEDBREP тоже ничего не выявил.
Но Renga НЕ ОТОБРАЖАЕТ данный объект при импорте/открытии IFC файла! Прочие вьюверы IFC ОТОБРАЖАЮТ!
Исключаем в IFCSHAPEREPRESENTATION геометрию улитки (убираю индекс сущности #336). Получаем: #417= IFCSHAPEREPRESENTATION(#41,'Body','SolidModel',(#364,#416));
Renga ОТОБРАЖАЕТ объект (без улитки у вентилятора).
Файл IFC №2: при экспорте у Brep включена опция AdvancedBrep
Нахожу следующие строки:
#336= IFCADVANCEDBREP(#335);
#388= IFCADVANCEDBREP(#387);
#389= IFCSHAPEREPRESENTATION(#41,'Body','AdvancedBrep',(#336,#388));
Смотрим.... Индексы сущностей также соответствуют, тип представления - корректный. Беглый просмотр задания геометрии в классах IFCADVANCEDBREP снова ничего не выявил.
Но Renga СНОВА НЕ ОТОБРАЖАЕТ данный объект при импорте/открытии IFC файла! Прочие вьюверы IFC ОТОБРАЖАЮТ!
Видно, что геометрия сейчас разделена на две части. Исключаем в IFCSHAPEREPRESENTATION индекс сущности #336. Получаем: #389= IFCSHAPEREPRESENTATION(#41,'Body','AdvancedBrep',(#388));
Renga ОТОБРАЖАЕТ объект (без улитки и основания, только двигатель).
Файл IFC №3: при экспорте у Brep включена только опция FacetedBrep
И вот тут Renga "повернулась к нам лицом":
Прям чудеса какие-то... Причем обратите внимание: появились грани именно на простой геометрии цилиндра. А вот на улитке вентилятора ничего такого нет!
Может какой-то "глюк" из-за геометрии объекта?
Хорошо! Создаю специально свой "вентилятор радиальный №5":
делаю нужные профили для балок, далее моделирую балками + перекрытием. Делаю необходимые этапы импорта/экспорта (в конце статьи будет дано пояснение, как и для чего вообще это нужно) с включенными "FacetedBrep", "AdvancedBrep" и отключенной "Tesselation".
Открываю полученный IFC файл в Renga и.....
Лезу в IFC файл и нахожу следующие строки:
#111= IFCADVANCEDBREP(#110);
#112= IFCSHAPEREPRESENTATION(#41,'Body','AdvancedBrep',(#111));
#271= IFCADVANCEDBREP(#270);
#272= IFCSHAPEREPRESENTATION(#41,'Body','AdvancedBrep',(#271));
#338= IFCADVANCEDBREP(#337);
#339= IFCSHAPEREPRESENTATION(#41,'Body','AdvancedBrep',(#338));
#387= IFCFACETEDBREP(#386);
#388= IFCSHAPEREPRESENTATION(#41,'Body','Brep',(#387));
Заодно проверяю индексы сущностей в классе IFCREPRESENTATIONMAP. Хм... Получается, что сейчас геометрия разделена на 4 элемента ( у меня при построении также использовано 4 элемента: балка + балка + балка + перекрытие). Может в этом вся суть? Геометрия, корректно разбитая на части, при записи Renga в файл IFC, далее нормально отображается в Renga?
Я помню, что обещал вам дать ответ по данной ситуации, описанной ранее фразой "...... но не всегда.....местами.... только с определенной геометрией..... логика не выявлена.....почему так?" в конце данного эксперимента. Ну так вот....
Ответа нет! Я до сих не вычислил полную логику работы Renga при ее отказе отображать некоторые объекты после экспорта/импорта их через IFC с включенным Brep.
Походу об этом надо будет писать в тех. поддержку Аскон (создавать запрос).
А пока продолжим дальше......
2.3. Использование объекта Renga "Элемент" для создания геометрии нестандартного оборудования, а также наличие "подводных камней" благодаря стороннему 3D ПО
Анализ показал, что единственно верный подход по созданию нестандартного оборудования, это задание (переопределение) класса IFC у вставленного в модель "Элемента" через значение свойства IfcEntityType. Почему?
Нам нужна единая геометрия в пределах одного класса IFC!
А теперь пройдемся по этапам создания геометрии нестандартного (пользовательского) оборудования через "Элемент".
2.3.1. Одно оборудование - один файл проекта. Создаем геометрию
Первоначальная задача сводится к тому, чтобы мы в одном проекте создали нужную геометрию своего оборудования с комбинацией двух способов или каждым по отдельности:
- моделированием геометрии стандартными объектами Renga. Можете также использовать точки трассировки с трассами для создания геометрии поворотов, врезок и т.д. (если это нужно для геометрии оборудования).
- импортом сторонней геометрии из твердотельных форматов через создание нового стиля "Элемент" и дальнейшая вставка соответствующего экземпляра "Элемента" в пространство модели. Но здесь обязательно надо делать предварительную выгрузку геометрии "Элемента" в IFC через Brep, чтобы увидеть корректность геометрии. Так как из некоторых файлов в формате твердотельной геометрии (возьму для примера *.step) можно реально получить неожиданный результат!
При необходимости, в модельном виде могут содержаться линии модели, размеры, штриховки, трассы, точки трассировки и текст. Тут все лаконично: при экспорте в формат *.c3d (о нем пишу далее) данные типы объектов не будут экспортироваться.
2.3.2. Промежуточное преобразование в твердотельный формат перед экспортом в IFC
Теперь мы экспортируем созданную модель оборудования целиком в 3D формат *.c3d (рекомендую после проведенного анализа) путем выбора в выпадающем меню команды "Экспортировать в формат 3D", а далее выбираем нужный нам 3D формат файла *.c3d.
Далее создаем новый проект, создаем новый стиль "Элемента" и импортируем туда полученную твердотельную геометрию из файла *.c3d. Вставляем полученный "Элемент" в модель и делаем предварительный экспорт в IFC с включенной настройкой геометрического представления "Brep" (нюансы обсудили выше). Почему предварительный экспорт?
Нам надо вначале убедиться в качестве созданной геометрии оборудования через экспорт/импорт IFC. Т.е. все ли ее части/элементы Renga корректно отобразила в модели после открытия файла IFC.
Не все отображается? Читаем следующий пункт.....
2.3.3. "Большой привет" от твердотельной геометрии, созданной в ином ПО и импортируемой далее в Renga
Дело в том, что при определенном импорте твердотельных форматов в "Элемент" и дальнейшей выгрузки геометрического представления объектов через Brep вы все равно можете столкнуться с тем, что будет отображаться полигональная/треугольная сетка благодаря IfcFacetedBrep.
Но хуже всего то, вы можете столкнуться вообще с отсутствием нормального отображения импортированной геометрии. Эксперименты показали, что при выгрузке из иного 3D ПО в твердотельный формат (возьму для примера *.step) можно реально получить неожиданный результат.
Точно? А может я просто ошибаюсь?
Я просто покажу вам один из своих маленьких экспериментов. Работаем, как уже определились ранее, только с включенным Brep и отключенной Tesselation. Смотрим.....
А теперь подведем итог нашего анализа! По результатам различных экспериментов, а не только вышеуказанного, можно четко выделить два момента:
1. Renga очень хорошо экспортирует твердотельную геометрию, сделанную непосредственно стандартными объектами в Renga.
2. Не вся геометрия, полученная из твердотельных форматов 3D файлов, будет корректно отображаться в итоговом IFC файле. И тут есть вопросы как к стороннему 3D ПО, которое данные файлы генерирует. Так и к Renga, которая пытается эту геометрию записать в IFC.
ОБЩИЙ ИТОГ части № 2 (принципы создания нужной геометрии):
- Моделируем нужную геометрию стандартными средствами в Renga или создаем ее через вставку элемента, содержащего импортированную твердотельную геометрию. Также можно использовать одновременно два этих способа: что-то подгрузили через Элемент, а что-то смоделировали средствами Renga.
- Не забываем, что применение из внешнего файла геометрии в твердотельном формате в стилях Элемента не всегда гарантирует нужный результат при выгрузке/загрузке через IFC. Т.е. при обычной работе с "Элементом" в проекте у вас вполне ожидаемо будет нормально отображаться геометрия, импортированная из твердотельной. Но нам нужно корректное отображение геометрии именно после открытия файла IFC в Renga. Поэтому предварительно проверяем такую твердотельную геометрию, импортированную в "Элемент", на корректность выгрузки через Brep.
- Все корректно отображается? Теперь выгружаем целиком готовую геометрию из проекта в 3D файл формата *.c3d (один файл - одна модель оборудования).
- Подгружаем обратно данный файл формата *.c3d в новый стиль "Элемента". Вставляем данный "Элемент в модель".
Обязательно центрируем его относительно начала координат (точка вставки "Элемента", которая видна при выделении объекта, должна находиться строго в точке начала координат). Это нужно для того, чтобы вам далее было удобно вычислять/задавать координаты портов (ручным способом или через плагин.... о нем я упомяну в самом конце цикла статей). Более конкретно поймете эту необходимость, когда будете работать с шаблоном по созданию порта в статье № 4.
- Выгружаем проект в IFC только с включенным Brep (экспериментируйте FacetedBrep и AdvancedBrep) и отключенной Tesselation.
- Повторно проверяем корректность геометрии через открытие в Renga полученного файла IFC. Если все нормально - оставляем проект для следующего этапа работы. Если нет - "допиливаем" геометрию всеми возможными способами (стандартными объектами Renga или корректировкой импортированной твердотельной геометрии из иного 3D ПО и повторной загрузкой ее в "Элемент"), пока не получим нужный нам результат.
Переходим к следующей статье только после получения корректного отображения геометрии оборудования в Renga (в виде твердотельной).