Рассмотрим несколько простых сценариев и правил передачи геометрии из Rhino в Revit (в обратном направлении тоже часто нужно, но об этом мы как-нибудь отдельно поговорим). На данный момент самым оптимальным инструментом для решения этой задачи является плагин Rhino.Inside, все остальные варианты заметно уступают, поэтому будем рассматривать только его. Что вам понадобится для осуществления этой операции:
- установленный Revit 2019 и новее
- установленный Rhinoceros 7 и новее
Если вы передаёте геометрию в файл для совместной работы, то первым действием создайте рабочие наборы (один или много, я создаю для каждого слоя, что есть в модели Rhino), в которые будут помещены новые элементы. Названия рабочих наборов должны быть понятными и легко сопоставимыми с объектами Rhino, рекомендую принять для себя одинаковую систему названий слоёв Rhino и наборов Revit, так вы сможете легко ориентироваться в обоих моделях.
Сценарий работы зависит от того, есть ли у нас в Rhino уже готовая геометрия в том виде, как она должна быть представлена в Revit, или же мы планируем генерировать геометрию через семейства Revit. Второй случай предполагает множество вариаций, зависящих от конфигурации и категории семейств, но общий смысл таков, что мы работаем в Revit, а в Rhino, а скорее даже в Grasshopper, всего лишь создаем примитивы для размещения объектов Revit, например, контуры плит перекрытия или точки размещения пользовательских семейств. В этом случае нам нужно использовать ноды из группы Build и кое что из группы Model (в частности оси и уровни).
В этом посте я подробно хочу рассмотреть ситуацию, когда основным рабочим инструментом на проекте является Rhino, и в Revit мы передаем уже готовую геометрию, например, для координации со смежниками. Для подобного сценария нам потребуется нод Add Geometry DirectShape. Direct Shape - это такой специальный тип элементов в Revit, который, по большей части, для хранения импортированной геометрии и используется. Среди свойств, которые мы можем определить для подобных элементов непосредственно через нод, присутствуют Категория, Материал и Имя. С именем всё просто - это текстовый параметр, куда мы можем записать любое уникальное имя, и влияет это больше на то, как передаваемый элемент будет запомнен самой программой, ни в спецификациях, ни где-то ещё данный атрибут не может быть использован. Категория и Материал - для этих параметров выбираем из списка, через соответствующие ноды, подходящие категорию и материал, при этом материал должен быть заранее настроен в файле Revit. Это простой случай. В качестве примера откройте скипт 02_ExportToRevit_SimpleTemplate.gh из папки с файлами к этой статье (дальше эту папку мы ещё будем использовать, и я буду упоминать файлы из неё). Эти файлы были разработаны, как шаблоны для типовых задач экспорта геометрии в Coop Himmelb(l)au.
Рабочий набор и дополнительные параметры (если они нужны) назначаются на элемент уже после формирования Direct Shape в Revit. Внутри файла Grasshopper даны все необходимые подсказки, но отдельно всё же упомяну, что если вы подаете сразу много геометрических объектов в нод Add Geometry DirectShape, и хотите, чтобы эти объекты были представлены по отдельности в Revit, то их надо раскидать по разным веткам дерева, например, используя Graft.
Чуть более сложный вариант шаблона 02_ExportToRevit_ComplexTemplate.gh связан с ситуацией, когда на геометрию в Rhino назначена пара десятков, а то и сотен материалов (например, какой-нибудь хитрый цветовой градиент), и подобное количество материалов, во-первых, сложно будет создать вручную в Revit, а, во-вторых, будет также сложно сопоставить определенный материал с определенной геометрией, поэтому проще создать все необходимые материалы прямо через Grasshopper.
Несколько простых правил, которые следует соблюдать, чтобы геометрия в Revit передавалась корректно:
- не используйте в именах символы \ / : * ? " < > I { } [ ] ; ' Ill
- при использовании указанных в статье шаблонов следует размещать геометрию разного типа (mesh, brep, curve...) в разные слои Rhino
- не следует использовать блоки в Rhino
- не следует отправлять геометрию очень небольших размеров в Revit
- если ваш проект представляет собой достаточно большое здание с несколькими корпусами или функциональными зонами, в Revit следует использовать отдельные файлы для каждой такой зоны, иначе проект будет чрезмерно загружать ваш компьютер
- если фасад вашего здания разделен на панели, следует выполнить это разделение в Rhino физически перед отправкой геометрии в Revit. То есть вариант, когда панелизация представлена благодаря инструменту Contour, тут не подойдёт
- не должно быть самопересечений у экспортируемой геометрии
Теперь посмотрим на примеры проектов Coop Himmelb(l)au, где этот подход применялся. Таких проектов много, но я здесь покажу два - это хоккейная арена в Санкт-Петербурге и парк рядом с этой ареной.
Модель хоккейной арены передавалась в несколько отдельных файлов Revit, так как это достаточно большое здание, таким образом были сформированы файлы для фасада, кровли, внешней конструкции, стилобата и отеля. Использовалась ровно та методология, что описана в этом посте.
В случае с парком, помимо прямого экспорта геометрии, использовался также и метод размещения готовых семейств, так например были расставлены деревья, в Rhino они представлены простыми шарами с атрибутом, в который записана порода дерева, в Revit вместо шара подставлено определенное семейство в соответствие с атрибутом породы. Кроме этого топоповерхности также сгенерированы в Revit, как нативная геометрия по существующей в Rhino mesh сетке, что даёт больше возможностей для отображения графики, например, можно разместить горизонтали на таких элементах, для Direct Shape это было бы невозможно.