понедельник, 6 июля 2015 г.

Dynamo и печать из Revit

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


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

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

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

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



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


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


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

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


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


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

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



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

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


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

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


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

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

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



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



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


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



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

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


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


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


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

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



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

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

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


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

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

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

Удачи!

16 комментариев:

  1. Здравствуйте! Конечно, как новичку в Ревите систематизация всех процессов в динамо выглядит коллосально интересным и пока непонятным занятием, попытался вникнуть в суть процессов поверхностно хотя бы с интересующей меня точки зрения и не совсем уловил следующего момента, как Вы печатаете допустим лист А2 на форматах А3 (максимальный формат принтера)? Вы писали выше, что при других способах печати можно оставить комментарий, вот и решил немного засорить по хорошему темку). У меня есть лист формата А2 с вкинутым на него планом, экспликацией и еще чем-то с двумя рамками А3 (один со штампом), при печати удаляю одну рамку, выбираю лист и печатаю, потом возвращаю удаленное, удаляю другую рамку и все вкинутое на лист не попадающее в оставшуюся рамку - и также печать, достаточно долго и без автоматизации зато более-менее надежно.

    ОтветитьУдалить
    Ответы
    1. Ничего не понял. Вы печатаете один лист на двух А3, и затем склеиваете?

      Удалить
  2. Да, что принтер позволяет - от того и отталкиваюсь)

    ОтветитьУдалить
    Ответы
    1. Написал про печать листа А2 на принтере А3 :)
      Смотрите новые сообщения в блоге.

      Удалить
  3. Есть еще один способ автоматизации печати: через публикации. Там есть свои тонкости, но в целом процесс рабочий. Если интересно, то можно пост об этом сделать.

    ОтветитьУдалить
    Ответы
    1. Интересно! Ждём пост.

      Удалить
    2. Комментарий ниже вообщем то описал этот способ) Только я и не знал что можно через экспорт так сделать.
      Фишка в том что встроенный DWF конвертер умеет по форматам распихивать.
      И design review тоже

      Удалить
  4. да проблема есть с пакетной печатью. Довольно актуально. Те, кто на подписке сидит, говорят про какое-то приложение batch print. К сожалению информации я по нему так и не нашёл. Сегодня обнаружил для себя способ выводить пакетно в pdf "разнолистную" документацию (он же может служить основой для вывода на один принтер-плоттер, если например все листы А2, А1, А0 печатаются в одном устройстве):
    1. Экспортируем в dwf
    2. Открываем в design review - (после экспорта - проверяем)
    3. Печатаем в pdf принтер листы с обязательной опцией "выбрать источник бумаги по формату листа dwf"
    4. Окрываем и проверяем

    ОтветитьУдалить
    Ответы
    1. Ну, Америку вы точно не открыли - я ведь в начале статьи написал, что в курсе про экспорт в DWF. Вот только Design Review позволяет отсортировать листы по размеру, но в окне печати все равно приходится вписывать номер листов вручную. А еще в DWF могут быть проблемы с наложением штриховок и просто не открывающимся файлом^ http://weandrevit.blogspot.ru/2015/03/dwf-was-problem-displaying-file.html

      Удалить
    2. Кстати, у меня почему-то "Источник бумаги по формату листа" не срабатывал не при печати на плоттер, ни в PDF, приходилось формат указывать вручную. Каким PDF-принтером вы пользовались?

      Удалить
    3. Такой алгоритм у меня cрабатывает с Adobe PDF и с PDFill PDF. Чтобы не вписывать листы (несколько альбомов-файлов) можно воспользоваться пакетной печатью

      Удалить
  5. Александр, большое спасибо! Печать – всегда актуальная тема для Revit! С Вашим решением станем чуть ближе к автоматизации!
    И отдельное спасибо за семейство основной надписи (ОН) (из шаблона КЖ, КМ)! Здорово придумали: менять размеры формата по его названию и кратности и его отображение в углу ОН. Как раз последнее время пытался автоматизировать запись формата листа в угол ОН через Dynamo. А тут двух зайцев!

    ОтветитьУдалить
    Ответы
    1. Ну, в данном случае с печатью семейство основной надписи не имеет значения. К изменение размера через "Экземпляр" я пришел, чтобы удобно управлять "Электронными подписями" в штампе, остальное - бонус.

      Удалить
  6. Перевод разноформатных листов revit в pdf в один клик!
    http://www.bluebeam.com/us/bluebeam-university/training-archives/archive-revit-plugin.asp

    ОтветитьУдалить
  7. Александр Зуев, Здравствуйте! Как думаете, такое возможно?:
    Сделать в Dynamo скрипт для автоматической верстки на листах огромных спецификаций,иначе их приходится через ексель в пдф печатать, что неудобно..

    ОтветитьУдалить