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

С своё время я облегчал печать разных форматов из 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" выполнялся некорректно. Теперь код получает число, округляет до целого, и только после этого превращает в строку.
Спасибо Данилу Медведеву за указание на проблему.