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

Уровень сложности: дно-днище.

Время создания: максимум 10 минут.

Версия Ревита и Динамо: 2020.2 и 2.3.0 (на самом деле, тут любая норм).

Алгоритм

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

Например, у нас есть трубопроводы, нужно скопировать значение из «Имя системы» в параметр «Комментарии». Вот его как пример и рассмотрим. Для наглядности создам спецификацию, в которую выведу тип трубы, диаметр, имя системы и комментарии.

Пока что в  «Комментарии» пусто, но мы это исправим
Пока что в «Комментарии» пусто, но мы это исправим

Скрипт

Запускаем проект в Ревите и Динамо с вкладки «Управление». В проекте должны быть элементы, которые будет обрабатывать скрипт, чтобы сразу всё проверить, но в общем-то создать скрипт можно и без объектов, просто с ними удобнее.

В окне Динамо нажимаем «Создать». Откроется окно для нового скрипта. Слева внизу поставьте «Вручную». Это нужно, чтобы скрипт срабатывал тогда, когда мы ему скажем, а не применялся безостановочно.

Окно Динамо
Окно Динамо

Теперь накидываем ноды.

Сначала берём нод, который выбирает категорию. Для этого слева в библиотеке нодов в строке поиска пишем Categ... Целиком можно не писать. В результате у нас появится куча всяких нодов в списке, нам оттуда нужны два: Categories (Категории) и All Elements of Category (Все элементы в категории). Просто нажмите по ним левой кнопкой мыши, они добавятся в центральной пространство.

Добавил ноды из библиотеки
Добавил ноды из библиотеки

Нод Categories представляет собой выпадающий список. Поскольку мы работаем с трубами, то нужно выбрать из списка категорию «Трубы». Имена категорий подтягиваются на том языке, на каком у вас Ревит. Если вы работаете в англоязычной, то ищете «Pipes».

Совет: чтобы быстро перепрыгнуть в выпадающем списке к нужной строке, начните вбивать название того, что ищете. Например, «тру...», список быстро перелистнётся. Но пишите быстро, чтобы Динамо не подумал, что вы вбиваете отдельные буквы.

Выбираю категорию
Выбираю категорию

Теперь соединим выход нода Categories и вход нода All Elements of Category. Просто нажмите по выходу, появится «лапша», присоедините её ко входу второго нода. Выход одного нода и вход другого называется одинаковым именем, чтобы пользователи понимали, какие данные получат и какие нужно подавать на нод.

Соединил два нода
Соединил два нода

Если сейчас запустить скрипт, то Динамо обратится в Ревит и получит из него список всех элементов в категории «Трубы». Давайте запустим скрипт с помощью команды слева внизу «Запустить». Теперь наведём курсор на правый нижний угол нода All Elements of Category, под нодом появится строка с иголочкой, наведите курсор на неё, увидите список элементов. Чтобы его видеть всегда, можно нажать по иголке, тогда он останется и после того, как отведёте курсор в сторону.

В выпадающем списке видны все элементы, которые Динамо получил из Ревита
В выпадающем списке видны все элементы, которые Динамо получил из Ревита

В этом списке есть нумерация (начинается с 0, а не с 1) и общее количество (справа внизу списка), уровни списка @L2 и @L1, имя элемента (Pipe) и его ID. По этому ID вы можете найти элемент в Ревите через команду «Выбор по коду» на вкладке «Управление» и можете нажать прямо в Динамо на код, и в Ревите будет выбран элемент и показан по центру вида. Сейчас нам это не нужно, нужно идти дальше.

Мы получили список труб. У них у всех есть параметр «Имя системы», нам нужно его получить. Для этого используем нод GetParameterValueByName — Получить значение параметра по имени (параметра). Вбиваем Getparam и ищем его в библиотеке, добавляем.

Вот он
Вот он
У самого нода два входа и один выход
У самого нода два входа и один выход

Вход «Element» — сюда нужно подать список элементов. Вход «parameterName» — сюда нужно подать имя параметра. Список труб у нас уже есть, мы его получили ранее. Имя параметра тоже известно — «Имя системы». Остаётся только подать его на вход нода.

Чтобы создать текст, есть два пути: нод для текста String и универсальный нод Code Block (далее Код Блок). Текстовый нод можете так же найти в библиотеке, как и остальные, а Код Блок проще всего вызвать двойным кликом левой кнопкой мыши по рабочему пространству. Вот им и будем пользоваться.

Это нод для программного кода, в него можно вносить и текст, и числа, и код
Это нод для программного кода, в него можно вносить и текст, и числа, и код

Чтобы вписать в него текстовые данные, их нужно вносить в кавычках. Так как мне нужен текст «Имя системы», то я пишу "Имя системы". Если забыть кавычки, то Код Блок вспыхнет красным светом.

Не забывайте кавычки
Не забывайте кавычки

Теперь у нас есть список файлов и имя параметра. Присоединяем всё это к ноду для получения значений параметров.

Соединил лапшой ноды
Соединил лапшой ноды

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

154 куска трубы всего, для каждой нод выводит имя системы
154 куска трубы всего, для каждой нод выводит имя системы

Информацию получили. Теперь её нужно записать в другой параметр — в «Комментарии». Для этого есть другой нод — SetParameterByName — Задать значение параметра по имени (параметра). Вбиваем в строку поиска Setparam и добавляем нод на рабочее пространство.

Сэт Параметр
Сэт Параметр

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

Список элементов у нас есть — это наши трубы, они не изменились. Имя параметра для записи тоже известно — это «Комментарии». Значение мы уже получили с помощью нода Гет Параметр. Осталось только подать всё это на нод и запустить скрипт.

Готовый скрипт!
Готовый скрипт!

Так как список элементов тот же, то подаю его из уже имеющегося блока. Для имени параметра создал новый Код Блок, а значения подал из выхода Гет Параметра на вход Сэт Параметра. Теперь скрипт готов, можно запускать и смотреть в спецификацию, либо выбирать элемент на виде и смотреть его параметры.

Вуаля
Вуаля

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

Важно! В примере разобран случай, когда используются параметры экземляра. Чтобы в Динамо обратиться к параметрам типа, нужно сделать дополнительные действия, об этом читайте в отдельной статье.

Теперь можете дополнить резюме строкой «Пишу скрипты в Dynamo» и просить зарплату повыше.

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

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

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

Если вам нужен скрипт из статьи, можете скачать его по этой ссылке.