Что в сумочке у BIM-щика? Скрипты.
Всем привет, в данной статье хочу поделиться с вами своими небольшими победами и наработками в Dynamo, а также расскажу, как три нода закрывают 80% запросов
Скрипты
Так как это все-таки статья из рубрики где я делюсь теми инструментами, которые помогают мне в работе, сегодня расскажу о скриптах которые помогают мне и моим проектировщикам (хочется в это верить) на практике
После каждого описания скрипта прикреплена ссылка, по которой вы можете их скачать
Первый скрипт, это скрипт который позволяет разбить спецификацию с определенным шагом для переноса ее на листы (Рисунок 1)
Для этого необходимо знать ID спецификации, определить количество строк которое вы хотите размещать на листах и убедиться, что в спецификации, параметр ADSK_Позиция идет первым во вкладке "Поля" (Рисунок 2)
После запуска скрипта мы наблюдаем следующую картину, спецификация разбита на несколько, согласно шагу указанному в скрипте (Рисунок 3)
Скрипт создает фильтры где ADSK_Позиция больше какого-то числа и строго меньше первого+шаг таблицы, это экономит достаточно времени, особенно когда у вас это не одна модель
Ссылка для скачивания : Ссылка
Да, в последних версиях Revit данный скрипт заменяется инструментом внутри ПО и он более удобен, но я работаю на 20 и 21 версии, а требования заказчика и адекватная работа с моделью требует подобных решений
Второй скрипт, которым я хочу поделиться, очень давно был разработан Вадимом Муратовым. Данный скрипт используется для заполнения параметра ADSK_Наименование у категории "Воздуховоды", он работает лучше чем макросы, так как стандартные макросы выдают наименование, которое не соответствует ГОСТу и выглядит это так:
- Воздуховод из оцинк. стали класса герметичности «В», s=0,8 мм, 400х300 мм
- Воздуховод из оцинк. стали класса герметичности «В», s=0,8 мм, 300х400 мм
Первое, в спецификации это выглядит как две разные строки, что не позволит подсчитать корректно кол-во и тд
Второе, это то, что при наименовании воздуховодов, размер воздуховода указывается с большей стороны
Используя предлагаемый скрипт мы избегаем такой проблемы.
Что было добавлено?
Изначально в данном скрипте не было разделения по системам, что в принципе позволяет работать с информацией более гибко, а мне это не позволяло автоматически указать толщину воздуховода, которая не зависит от размера, а зависит от имени системы, поэтому в данный скрипт был добавлен небольшой нод написанный на python (Рисунок 4)
Он работает как фильтр, имя системы содержит - "(ВД)", соответственно все элементы в имени системы которых содержатся сочетания этих букв, будут отделены от общего числа, а для того, чтобы, наоборот, выбрать исключенные элементы исключенной системы, ниже есть нод "Boolean", при переключении которого на "True" будут учитываться только те элементы, в имени системы которых, есть сочетание "ВД"
Ссылка для скачивания : Ссылка
Третий скрипт, этот скрипт помогает заполнить параметр ADSK_Этаж получая информацию из имени уровня. Для чего это необходимо?
Посмотрите свой EIR, я уверен, что данное требование есть в 9 из 10 требований заказчика, а данный скрипт работает элементарно, он просто переносит значение из одного параметра в другой (Рисунок 5)
Ссылка для скачивания : Ссылка
Dynamo и три нода, которые, могут выручить
Как раз третий скрипт и состоит из тех самых "трех нодов", которые позволяют решить 80% запросов при работе с параметрами (Рисунок 6)
Code Block - Это нод позволяющий использовать DesignScript, чаще я его использую как способ добавления переменной или для ввода необходимой информации
Element.GetParameterValueByName - Нод позволяющий получить значение из параметра по экземпляру
Element.SetParameterByName - Нод позволяющий передать значение в параметр
Данные ноды очень выручают когда нужно заполнить какой-либо параметр по тому или иному принципу, они используются и во втором скрипте из этой статьи и в третьем и во многих других, при помощи Code Block можно создать маску для заполнения параметра и останется только передать значение (Рисунок 7, 9). В общем этими скриптами можно пользоваться так, как вам позволит ваша фантазия
При помощи данной маски мы заполнили параметр ADSK_Позиция, сделано это для демонстрации, помним, что данный параметр у нас используется для сквозной нумерации спецификации, но по подобию мы можем заполнять другие необходимые параметры
Итог отработанного скрипта выглядит следующим образом (Рисунок 7), мы получили заполненный параметр по необходимой нам маске
Следующий пример очень похож на предыдущий, но тут добавляется вид информации "Число" - Диаметр (Рисунок 9)
После запуска скрипта мы получаем много нулей после запятой (Рисунок 10)
Удаление нулей в Dynamo при выводе числа в текст
Чтобы избежать подобную проблему, я нашел такой способ, необходимо добавить нод Python Script, и в нем добавить следующий код (Рисунок 11)
Для тех кто хочет вставить его к себе:
a = IN[0]
sp=[]
for i in a:
if i%1==0:
sp.append(str(int(i)))
else:
sp.append(str(i))
OUT = sp
После добавления данного кода, мы получаем нужный нам вид параметра (Рисунок 12)
На этом данная статья походит к концу, в ближайшем будущем поделюсь с вами еще одним интересным плагином, который работает в связке с Dynamo. Спасибо за внимание!