Скрипт для печати по форматам

С своё время я облегчал печать разных форматов из Revit при помощи Dynamo, но после этого уважаемый Wrath выложил макрос на C#, сразу формирующий наборы листов по форматам.

Я немного модифицировал код — теперь он дополнительно разделяет листы по комплектам чертежей:
Скачать модифицированный макрос: яндекс, гугл.

Подробнее по работе и установке — ниже.

UPD: была обнаружена проблема с определением размеров листа (все листы сваливаются в Unknown format даже с корректным семейство основной надписи). Подробности в конце статьи.

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

%PROGRAMDATA%AutodeskRevitMacros2015RevitAppHookup

 
Перезапустите Ревит и перейдите Управление — Диспетчер макросов:
В окне на вкладке «Приложение» найдите наш макрос:
В окне ничего нет — где-то косяк :)

Но можно код вставить принудительно. Также это пригодится, если у вас на рабочем компьютере нет прав доступа к папке «ProgramData». Нажмите в окне «Создать — Модуль»:

Укажите имя «PrintList» — Ok.  Наш язык — C#. Через несколько секунд будет открыто окно SharpDevelop с заготовкой кода макроса.
Откройте из архива папку «Исходный код.txt», скопируйте из него весь код. Перейдите обратно в SharpDevelop. Установите курсор после строки «Revit Macros Generated Code»:

И вставьте скопированный текст:

 

Вверху на панели инструментов выберите «Собрать текущее решение». Если всё было сделано правильно — в нижней части окна появится «Сборка успешно завершена». Либо появятся ошибки (здесь я не скопировал первую строчку с объявлением класса):

 

Кстати, вот мой добавленный участок кода:

Два вложенных цикла — еще больше индусского кода! Ну, работает — и ладно :)

«Орг.РазделПроекта» — замените на параметр, который у вас используется для группирования листов в комплекты.

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

Несмотря на тяжеловесность кода, работает быстро —  10 секунд на 1200 листов.
Как обычно — небольшое кино:

 

Ну собственно и всё. Удачи!

UPD: в случае, если семейство основной надписи корректное, но листы все равно сваливаются в «Unknown format» — отредактируйте код макроса, замените строчку 33:

string s_format =  s_complect + «: » + GetSheetFormat(s_height.AsValueString(), s_width.AsValueString());

На вот такой код:


int d_height = (int)Math.Round(304.799472 * s_height.AsDouble());
int d_width = (int)Math.Round(304.799472 *s_width.AsDouble());
string s_format =  s_complect + «: » + GetSheetFormat(d_height.ToString(), d_width.ToString());

Далее нужно «Собрать текущее решение», закрыть окно Sharp Develop и запустить макрос заново.
Проблема была в методе «AsValueString()», который мог выдавать не «594», а «594,0» — и «GetSheetFormat» выполнялся некорректно. Теперь код получает число, округляет до целого, и только после этого превращает в строку.
Спасибо Данилу Медведеву за указание на проблему.