UPD: ДАННАЯ ИНФОРМАЦИЯ УСТАРЕЛА! Плагин для полностью автоматической пакетной печати здесь: https://bim-starter.com/plugins/batchprint/
Мне очень интересно, как Автодеск вообще представляет себе печать листов разных форматов из Revit. Никакого аналога автокадовской «Пакетной печати» нет, фактически приходится вручную определять формат каждого листа и отправлять на нужный принтер — как в Autocad 2000!
Правильно созданное семейство автоматически указывает правильное название формата в углу листа, но толку-то — этот параметр нельзя использовать ни в окне печати, ни в спецификации листов.
Все мои знакомые перед печатью просматривают листы, записывают форматы на бумажку, потом выбирают эти листы во время печати, либо экспортируют в DWF и печатают через Design Review (способ тоже так себе).
Ну уж нет, тут точно надо что-то делать.
Часть 1 — Заменяем бумажку спецификацией
Первое, что можно сделать — это создать общий параметр (например, «ФорматЛистаТекст)», текстовый. Добавить его через «Параметры проекта» к Листам, а также сделать «Метку» в семействе основной надписи, выводящую этот параметр:
Заполнять этот параметр вручную — тогда на листе будет два названия формата (один из семейства, другой из параметров проекта). Второй параметр можно сделать светло-серого цвета, чтобы не бросался в глаза.
Сделать спецификацию листов, сгруппировать ее по параметру «ФорматЛистаТекст»:
Затем зайти в окно печати, переместить его в сторону (чтобы было видно спецификацию) и отметить листы одного формата:
Затем указать для листов нужный формат, настройки и отправить на принтер.
Конечно, если формат листа изменился — значение параметра нужно изменить вручную:
Да, этот способ — тоже ерунда. Фактически, мы просто заменили записывание форматов на бумажке записыванием в Ревите.
Часть 2 — Dynamo — всегда хорошая идея
Dynamo точно подходит под определение инструмента «малой механизации» труда проектировщика. Я уже давно леплю небольшие скрипты, облегчающие работу, но все они сугубо специфичны. Первый раз получилось сделать что-то универсальное — вот и делюсь идеей.
Что нам нужно? Возьмем за основу метод из части 1, но попробуем сделать так, чтобы параметр формата переносился из семейства в лист автоматически:
Вначале я попробовал выбирать все элементы на каждом листе, отфильтровывать из них только семейство штампа, получать из него имя формата и записывать в «лист», но ничего не получилось (слишком глубоко нужно лезть в API).
Решил сделать по-другому: собрать список семейств штампов, получить из него список имен форматов и передать в список листов. Но не тут-то было — эти списки не будут совпадать, и мы получим хаос.
Идея пришла неожиданно. Системные параметры «Номер листа» и «Имя листа» доступны как через «Лист», так и через семейство — уж не знаю, для чего добавили такую функцию, но мы этим воспользуемся!
«Имя листа» нам не очень интересно, а вот «Номер» — гораздо полезнее, ведь он уникален в рамках проекта. Значит, нам просто надо упорядочить список семейств и список листов по этому параметру — и все должно получиться:
Но нет! Почему-то «GetParameterValue» не всегда корректно считывает параметр «Номер листа» (но только для «Листов», с семейств считывается нормально), и при сортировке получается ерунда:
Ну ничего, недолгое гугление подсказало, что для получения номера листа есть штатный нод «Sheet.Number»:
И все работает отлично!
Позже решил сделать так, чтобы скрипт работал не только для моего семейства штампа (которое достаточно хитрое), но и для любого другого. Для этого воспользуемся тем, что у семейства основной надписи, загруженного в проект, появляются еще два системных параметра, определяемых автоматически — «Ширина листа» и Высота листа»:
Нужно только составить список размеров всех используемых форматов листов:
И забить все это в Питон через цепочку elif-ов:
Так как системные параметры размера листа могут оказаться немного больше размеров формата — добавил параметр допуска d.
Привел скрип в более опрятный вид:
Теперь перед печатью нужно только запустить скрип Динамо, значения в параметр «ФорматЛистаВручную» будут вписаны на всех листах. Затем переходим в спецификацию листов и дальше делаем также, как в способе 1.
Конечно, и теперь листы нужно выбирать вручную, но самое трудоемкое — автоматизировано.
Видео работы:
( в видео я использую семейства из своего шаблона, где формат листа задается параметрами «по экземпляру», но в данном случае непринципиально)
Качайте скрипт Динамо с гугл-диска и яндекс-диска. Создадите параметр проекта, добавите его к семейству, а также сделаете спецификацию — своими силами :)
Только имейте в виду, что количество листов и количество основных надписей должно совпадать — сопоставление списков сработает неверно, если в проекте будут присутствовать листы с удаленным штампом.
Спасибо Альберту за помощь с нодом «Sort by key».
Удачи!