Расскажу, что такое макросы, как они работают, как их включить в своём проекте или перенести из другого в свой.

Что это

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

Макросы в Ревите пишут на разных языках программирования: C# (Си шарп), Ruby (Руби), VB.NET и Python (Питон). Это более сложный уровень, чем работа с Динамо. Если не умеете программировать, то будет тяжело разобраться и понять, как писать макросы. Лучше начните с Динамо и прочитайте статью о нём для новичков.

Но чтобы пользоваться уже готовыми, не нужны особые знания.

Макросы бывают двух типов: уровня приложения и уровня документа.

  • Макросы приложения — это макросы на уровне Ревита. Можно написать и прицепить макрос к Ревиту, в итоге эти макросы будут появляться во всех проектах, их можно будет запустить в любом документе.

    Если вы создали проект, попользовались макросами, а потом сохранили проект и передали кому-то другому или даже открыли на другом своём компьютере в Ревите, то никаких макросов вы не увидите и запустить не сможете. То есть макрос уровня приложения принадлежит той программе, где вы его создали.

  • Макросы уровня документа — это макросы, которые сидят прямо в файле проекта, их туда тоже можно добавить. В результате когда вы передадите свой файл проекта, то вместе с ним будут идти и макросы, другой человек на другом компьютере спокойно сможет их запустить.

Если коротко: макросы приложения — закреплены за Ревитом, а не проектом, а макросы документа — за проектом и хранятся внутри его.

Как включить макросы

В Ревите можно глобально управлять включением и отключением макросов. Для этого нажмите на кнопку «R» или «Файл» (зависит от версии Ревита) и выберите «Параметры». Откроется окно, нажмите слева на «Макросы».

Параметры Ревита
Параметры Ревита
Раздел параметров для управления макросами
Раздел параметров для управления макросами

Здесь два блока. Первый позволяет включить или отключить макросы на уровне приложений. Если отключить макросы приложения, то их список будет отображаться в Диспетчере, но будут неактивными кнопки «Выполнить» и «Войти в блок». Можно будет редактировать макрос, но нельзя запустить в текущем документе.

Во втором блоке мы выбираем, что делать, если Ревит при открытии файла увидит в нём макросы документа.

Спрашивать перед включением макросов документа — при открытии каждого проекта, в котором есть макросы, Ревит будет показывать такое окошко:

Диалоговое окошко про макросы
Диалоговое окошко про макросы

Отключить макросы документа — макросы из любых проектов запускаться не будут.

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

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

Как запустить макрос

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

Зайдите в Диспетчер макросов, в нём будут вкладки. Одна вкладка для макросов приложения, а другие, их может быть одна или несколько, — для каждого открытого проекта, в котором есть макросы документа. Если использование каких-либо макросов запрещено, то вы увидите комментарий на вкладке:

В данном документе выключены макросы приложения, поэтому такая надпись
В данном документе выключены макросы приложения, поэтому такая надпись

Вот пример макросов документа на примере шаблона АДСК:

Макросы для уровне документа
Макросы для уровне документа

MacrosAutomation — это модуль, по сути такой набор из макросов. На деле всё это один макрос, просто внутри одного макроса можно сделать несколько подмакросов. Дальше буду говорить «макрос» и иметь в виду не весь модуль, а его «подмакросы».

AutoNumeratePos, CheckADSK и далее — это как раз отдельные части макроса, которые решают определённые задачи, обычно их и называют макросами. Подробнее конкретно об этих макросах расскажу в следующей подтеме статьи.

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

Запуск макроса
Запуск макроса

Обязательно сохраните проект перед тем, как запускать макрос.

Потому что Ревит может зависнуть или вылететь. Так что не забывайте сохраняться. Лично у меня Ревит регулярно вылетает при запуске макросов, но, возможно, это косяк именно моего ноутбука.

Макрос может выполниться и за полсекунды, и за пару минут. Ничего не трогайте, просто ждите. Бывает, что открытые виды и спецификации могут закрываться после исполнения макроса — это нормально, просто откройте их заново и проверьте, правильно ли сработал макрос.

В общем-то, всё, так они и запускаются.

Какие макросы есть в шаблонах АДСК

Важно! Макросы из шаблонов АДСК поддерживаются в Ревитах 2019 и 2020. Для версий 2021 и старше простое копирование из шаблонов 2019 версии не подойдёт. Адаптированные макросы можете взять из сообщения в Телеграме от Евгения Кондакова.

Ниже расскажу, какие макросы есть в шаблонах АДСК. Не обязательно в каждом шаблоне будут все они, например в шаблоне ВК нет макросов для созданиях схем воздуховодов и инженерных пространств. Макрос с воздуховодами — понятно, а вот инженерные пространства могли бы и пригодится. В следующей подтеме покажу, как можно копировать макросы между документами.

Макросы из шаблона АДСК для раздела ОВ
Макросы из шаблона АДСК для раздела ОВ

AutoNumeratePos — макрос, который автоматически проставляет позиции в спецификации. Открываете спецификацию, запускаете макрос и идёте пить чай: в это время макрос будет за вас вставлять 1, 2, 3, ... и так далее в столбец с позициями. При этом макрос спросит, как именно создать нумерацию: просто по строкам или с учётом вложенных семейств. В первом способе номера ставятся в том порядке, в каком идут строки спецификации, во втором — вложенные элементы получат номера так, чтобы идти вслед за родительскими семействами.

CheckADSK — макрос проверяет наличие общих параметров из ФОП Автодеска в семействах из указанной папки. Макрос нужен не для проверки семейств в текущем проекте, а именно в указанной папке.

CopyParameters — макрос копирует значения из второго столбца спецификации в третий. Он нужен, чтобы взять значения из столбца, в котором генерируются наименования для элементов, этот столбец должен идти вторым в спецификации, и скопировать значение в третий столбец — параметр «ADSK_Наименование». В результате наименования всех элементов будут в одном параметре, можно будет собрать сводную спецификацию.

Также макрос копирует значения длин для прямых и гибких труб и воздуховодов, площади изоляции, домножает на коэффициент запаса из глобального параметра «Запас» и записывает значения в параметр «ADSK_Количество».

CreateDuctSystemViews — макрос, который создаёт виды и применяет к ним фильтры. Лучше всего подходит под создание схем. Открываете 3Д-вид, ориентируете под нужным ракурсом, скрываете всё ненужное, оставляете только свои вентиляционные системы. Запускаете макрос, он делает три операции:

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

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

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

Пример фильтра для системы вентиляции
Пример фильтра для системы вентиляции

Иногда система может остаться не одна, связано это с тем, что оператор в фильтрах — «не содержит». Из-за этого на одном виде будут системы с именами П1 и П1x или В1 и В1x, где вместо x — какое-нибудь число. Если у вас много систем, например есть системы П1, П10, П11, П12, П13 и так далее, то это может стать проблемой, придётся корректировать фильтр для системы П1. Для П10 и остальных такой проблемы не будет.

Связано это с тем, что в системах может быть оборудование, например приточно-вытяжная установка, у которой имя системы состоит из перечня всех подключённых систем. В таком случае фильтр с оператором «не равно» скроет установку с вида.

Читайте мою статью, чтобы разобраться с тем, как работают фильтры и как их нужно создавать.

CreatePipeSystemViews — аналог CreateDuctSystemViews, но для трубопроводов.

CreateSpaces — макрос берёт помещения из связанного файла, который нужно будет указать после запуска макроса, создаёт по ним инженерные пространства и записывает в них имена и номера из помещений. Что такое пространства и как с ними работать — читайте в отдельной подробной статье.

Какие бывают ошибки

На данную тему есть отдельная статья. Читайте её, там больше вариантов.

При запуске макросов бывают ошибки, Ревит выдаёт окошко с описанием на английском языке.

Пример ошибки
Пример ошибки

В каждом случае нужно разбираться отдельно, однако самая частая ошибка как раз та, что на скриншоте выше. The parameter in read-only означает, что в каком-то семействе у вас вместо параметра экземпляра стоит параметр типа либо параметр заблокирован формулой и макрос не может вписать туда значение.

Например, есть параметр ADSK_Количество. В него макрос записывает длину трубы, изоляции и прочих системных семейств. Если этот параметр добавлен как параметр типа или значение определяется формулой, то поле становится нередактируемым, макрос не может его изменить и выдаёт ошибку.

Всё остальное — надо разбираться, причины бывают разными.

Как копировать макросы

Иногда нужно перенести макросы из одного документа в другой. Или вставить более новую версию макроса в проект, основанный на шаблоне со старой версией макроса. Расскажу, как это сделать.

Для начала проверьте, запускаются ли макросы в вашем исходном файле. Если всё норм, то можно копировать.

Зайдите в Диспетчер макросов в исходном файле. Выделите модуль или любой макрос и нажмите на кнопку «Редактировать». Откроется специальная оболочка для разработчиков — SharpDevelop. В ней программист пишет код, и отсюда мы его будем копировать. Выделите весь код — поставьте курсор и нажмите Ctrl+A — и нажмите Ctrl+C.

Диспетчер макросов
Диспетчер макросов
Среда Шарп Девелоп. Тут копируем код.
Среда Шарп Девелоп. Тут копируем код.

Код скопировали, теперь закрываем окно с ним и переходим в документ, куда хотим вставить макрос. Снова идём в Диспетчер макросов, переходим на вкладку конкретного проекта. Сбоку в блоке «Создать» нажимаем на «Модуль» — мы будем вставлять в документ весь модуль с макросами АДСК.

Появится окошко «Создание нового модуля». Сюда в «Имя модуля» лучше всего вписать то же самое имя, что было в исходном документе. Для примера я вобью другой текст, так как этот вариант чуть сложнее. Язык указываем тот, что был в исходном документе, чаще всего это C# . Описание можно не заполнять. Жмём ОК.

Создаём новый модуль
Создаём новый модуль
Имя модуля, ниже выбираем язык
Имя модуля, ниже выбираем язык
Создали модуль, теперь вставим в него код, нажимаем «Редактировать»
Создали модуль, теперь вставим в него код, нажимаем «Редактировать»

В итоге создаётся новый модуль. Выделите его и нажмите сбоку на Редактировать. Вы снова попадёте с оболочку Шарп Девелоп. В ней уже будет кое-какой код, но он нам не нужен: выделите весь и удалите. Вместо него вставьте тот код, что скопировали из исходного документа.

После вставки слева возле номеров строк появится жёлтая полоса. Это предупреждение, что код не собран. Прежде, чем его собрать, нужно убедиться, что имя модуля отражено в коде макроса. Для этого поднимаемся на самый верх и ищем строку, где написано:

namespace имя-макроса

Вместо имя-макроса должно быть имя вашего модуля. Я назвал модуль «MacrosADSK», а в исходном документе модуль назывался «MacrosAutomation». Поэтому мне нужно заменить старое имя на новое.

Проверьте, чтобы имя вашего модуля было правильно указано в начале кода
Проверьте, чтобы имя вашего модуля было правильно указано в начале кода

Теперь нужно собрать код. Для чего наверху есть кнопка «Построить все проекты в текущем решении». Рядом есть кнопка «Собрать текущий проект». В принципе, если у вас открыта только одна вкладка, то можно нажать любую, но для верности можете жать на первую.

Кнопка «Собрать проект»
Кнопка «Собрать проект»

Дальше могут быть разные варианты. Первый — всё успешно получилось, в этом случае внизу под кодом на вкладке «Вывод» увидите текст, что сборка выполнена и время, за которое она была собрана. Пример скриншота будет в самом конце.

Второй — полезут ошибки. Часто встречается ошибка с таким текстом:

Ошибка CS0234: Имя типа или пространства имен "Forms" отсутствует в пространстве имен "System.Windows" (пропущена ссылка на сборку?)

У меня именно такая и возникла. Вот как я решил проблему.

Если раскрыть слева содержимое макроса, то там окажется список ссылок:

Ссылки в новом документе
Ссылки в новом документе

При сравнении со списком ссылок в исходном документе, окажется, что не хватает как раз-таки ссылки System.Windows.Forms. Я не разбираюсь, но насколько понимаю, это элементы Виндоуз, который отвечает за создание окон. Когда макрос выдаёт вам окно с запросом или ошибкой, в самом макросе нет кода для создания и отрисовки окошка, но макрос ссылается на этот код, он подтягивается и создаёт окошко в стиле вашей версии Виндоуз.

Чтобы добавить эту ссылку, нажмите наверху на «Проект» → «Добавить ссылку» → появится окно, здесь найдите в списке System.Windows.Forms, выделите → нажмите Выбрать, убедитесь, что System.Windows.Forms появилось в блоке «Выбранные ссылки». Нажмите ОК.

Добавление ссылки в макрос
Добавление ссылки в макрос

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

Сообщение об успешной сборке
Сообщение об успешной сборке

Всё, теперь в вашем проекте есть макросы. Закрывайте оболочку Шарп Девелоп и можете перекладывайте на плечи кода вашу работу.

Полезные материалы

Видео Дмитрия Талалаева, в котором он рассказывает про макросы в Ревит

Подборочка статей для тех, кто хочет научиться создавать макросы (надо уметь программировать, программировать тут не учат)

Обновления статей удобно получать в Телеграм-канале «Блог Муратова про Revit MEP» . Подписывайтесь и приглашайте коллег. Можно обсудить статью и задать вопросы в специальном чате канала.

Читайте методичку для проектировщиков: полезный материал, в котором последовательно рассказываю, как создавать модель.

Бесплатные обзоры ваших моделей

Раз в две недели провожу «Ревит-линчи» — разбираю файлы семейств и проектов пользователей и отвечаю на вопросы по Ревиту и БИМ-технологиям. Дату и ссылку на Ревит-линч публикую в Телеграм-канале. Приходите, там интересно.

Отблагодарить автора

Я много времени уделяю блогу и разработке семейств. Если хотите отблагодарить меня, то можете сделать небольшой подарок (именно подарок, такой перевод не облагается налогом).