Dynamo и печать из Revit

Мне очень интересно, как Автодеск вообще представляет себе печать листов разных форматов из Revit. Никакого аналога автокадовской «Пакетной печати» нет, фактически приходится вручную определять формат каждого листа и отправлять на нужный принтер — как в Autocad 2000!

Правильно созданное семейство автоматически указывает правильное название формата в углу листа, но толку-то — этот параметр нельзя использовать ни в окне печати, ни в спецификации листов.

Все мои знакомые перед печатью просматривают листы, записывают форматы на бумажку, потом выбирают эти листы во время печати, либо экспортируют в DWF и печатают через Design Review (способ тоже так себе).

Ну уж нет, тут точно надо что-то делать.

ВНИМАНИЕ ЧИТАТЕЛЯМ: для печати мы уже изобрели более совершенный способ, читайте вот здесь.

Часть 1 — Заменяем бумажку спецификацией

Первое, что можно сделать — это создать общий параметр (например, «ФорматЛистаТекст)», текстовый. Добавить его через «Параметры проекта» к Листам, а также сделать «Метку» в семействе основной надписи, выводящую этот параметр:

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

Сделать спецификацию листов, сгруппировать ее по параметру «ФорматЛистаТекст»:

Затем зайти в окно печати, переместить его в сторону (чтобы было видно спецификацию) и отметить листы одного формата:

Затем указать для листов нужный формат, настройки и отправить на принтер.

Конечно, если формат листа изменился — значение параметра нужно изменить вручную:

Да, этот способ — тоже ерунда. Фактически, мы просто заменили записывание форматов на бумажке записыванием в Ревите.

Часть 2 — Dynamo — всегда хорошая идея

Dynamo точно подходит под определение инструмента «малой механизации» труда проектировщика. Я уже давно леплю небольшие скрипты, облегчающие работу, но все они сугубо специфичны. Первый раз получилось сделать что-то универсальное — вот и делюсь идеей.

Что нам нужно? Возьмем за основу метод из части 1, но попробуем сделать так, чтобы параметр формата переносился из семейства в лист автоматически:

Вначале я попробовал выбирать все элементы на каждом листе, отфильтровывать из них только семейство штампа, получать из него имя формата и записывать в «лист», но ничего не получилось (слишком глубоко нужно лезть в API).

Решил сделать по-другому: собрать список семейств штампов, получить из него список имен форматов и передать в список листов. Но не тут-то было — эти списки не будут совпадать, и мы получим хаос.

Идея пришла неожиданно. Системные параметры «Номер листа» и «Имя листа» доступны как через «Лист», так и через семейство — уж не знаю, для чего добавили такую функцию, но мы этим воспользуемся!

«Имя листа» нам не очень интересно, а вот «Номер» — гораздо полезнее, ведь он уникален в рамках проекта. Значит, нам просто надо упорядочить список семейств и список листов по этому параметру — и все должно получиться:

Но нет! Почему-то «GetParameterValue» не всегда корректно считывает параметр «Номер листа» (но только для «Листов», с семейств считывается нормально), и при сортировке получается ерунда:

Ну ничего, недолгое гугление подсказало, что для получения номера листа есть штатный нод «Sheet.Number»:

И все работает отлично!

Позже решил сделать так, чтобы скрипт работал не только для моего семейства штампа (которое достаточно хитрое), но и для любого другого. Для этого воспользуемся тем, что у семейства основной надписи, загруженного в проект, появляются еще два системных параметра, определяемых автоматически — «Ширина листа» и Высота листа»:

Нужно только составить список размеров всех используемых форматов листов:

И забить все это в Питон через цепочку elif-ов:

Так как системные параметры размера листа могут оказаться немного больше размеров формата — добавил параметр допуска d.

Привел скрип в более опрятный вид:

Теперь перед печатью нужно только запустить скрип Динамо, значения в параметр «ФорматЛистаВручную» будут вписаны на всех листах. Затем переходим в спецификацию листов и дальше делаем также, как в способе 1.

Конечно, и теперь листы нужно выбирать вручную, но самое трудоемкое — автоматизировано.

Видео работы:

( в видео я использую семейства из своего шаблона, где формат листа задается параметрами «по экземпляру», но в данном случае непринципиально)

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

Спасибо Альберту за помощь с нодом «Sort by key».

Удачи!