Найти в Дзене
give BIM

Revit. Dynamo скрипт. Как добавить семействам в проекте значения из уровня

При использовании/создании скриптов с «прямым» копированием значения из параметра в параметр экземпляра обычно у проектировщика не возникает вопросов. Но довольно часто возникает ситуация, когда необходимо, чтобы у каждого семейства в модели проекта был заполнен какой-либо параметр уровня – либо это является одним из требований к модели, либо необходимо самому проектировщику для поэтажной или общей спецификации. Когда параметр текстовый (возьмем для примера ADSK_Этаж) и достаточно, чтобы его значение совпадало с именем уровня, то после получения уровня элемента просто используют стандартный нод получения текстового значения имени уровня (1) и записывают в ADSK_Этаж: Но если нужно, чтобы в параметре было не просто имя уровня (например: не «Этаж 01», а «01_Этаж_на отм. 0.000») или нужно записать номер этажа в числовой параметр, то проектировщик или вбивает значения в параметр «ручками» или начинает усложнять скрипт – вытаскивать из имени уровня номер этажа, преобразовывать в число и про

При использовании/создании скриптов с «прямым» копированием значения из параметра в параметр экземпляра обычно у проектировщика не возникает вопросов. Но довольно часто возникает ситуация, когда необходимо, чтобы у каждого семейства в модели проекта был заполнен какой-либо параметр уровня – либо это является одним из требований к модели, либо необходимо самому проектировщику для поэтажной или общей спецификации.

Когда параметр текстовый (возьмем для примера ADSK_Этаж) и достаточно, чтобы его значение совпадало с именем уровня, то после получения уровня элемента просто используют стандартный нод получения текстового значения имени уровня (1) и записывают в ADSK_Этаж:

Но если нужно, чтобы в параметре было не просто имя уровня (например: не «Этаж 01», а «01_Этаж_на отм. 0.000») или нужно записать номер этажа в числовой параметр, то проектировщик или вбивает значения в параметр «ручками» или начинает усложнять скрипт – вытаскивать из имени уровня номер этажа, преобразовывать в число и прочее.

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

Допустим, что у нас есть проект здания со светильниками на разных уровнях(этажах) и по требованию заказчика нам нужно записать номер этажа в числовой параметр «!_Номер этажа» из некого ФОП, предоставленного заказчиком в соответствии с тем что для уровня «Подвал» = -1, для «Этаж 01» = 1, для «Этаж 02» = 2 и т.п. Также предположим, что числовой параметр «!_Номер этажа» уже добавлен из ФОП для категории светильники и мы создали вот такую спецификацию на светильники:

-2

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

Берем на редакцию наш параметр и добавляем его к категории Уровни:

-3

Создаем спецификацию для категории уровни и заполняем номера в параметре в соответствии с ТЗ:

-4

Теперь в скрипте (показанном на самом первом скрине) заменим нод Level.Name на Element.GetParameterValueByName и изменим имя параметра на «!_Номер этажа»:

-5

После запуска скрипта убедимся, что в спецификации светильников появились значения в «!_Номер этажа :

-6

Т.к. значение параметра номера этажа у уровней уже заполнено, то для записи значения в параметр номера этажа для элементов других категорий, у которых есть параметр «Уровень», то достаточно в скрипте либо сменить категорию и запустить скрипт еще раз или сделать выборку по нескольким категориям. Но для категорий лотков, коробов, труб или воздуховодов уровень берется из параметра «Базовый уровень» и заменить «Уровень» на «Базовый уровень» при выборе этих категорий:

-7

Менять категории и «Уровень» на «Базовый уровень» неудобно. Можно сделать выборку по всем категориям, которые используются в модели определенного раздела,– для электрики это будет выглядеть как то так:

-8

Чтобы не создавать свой скрипт для каждого раздела и сделать скрипт универсальным произведем в нем изменения:

- будем выбирать элементы не по категории, а на активном виде с помощью нода «All Elements In Active View»;

- потом отфильтруем семейства, у которых есть параметр «Уровень» или «Базовый уровень», получим из них уровень и запишем значение параметра «!_Номер этажа» из уровня в параметр «!_Номер этажа» семейств.

Получится вот такой скрипт: скрипт

Теперь получается, что общая последовательность/алгоритм действий, для того чтобы заполнить параметр из уровня состоит из:

- добавляем в проект параметр и назначаем его не только своим категориям, но и категории «Уровни»;

- создаем спецификацию для категории «Уровни» и для каждого уровня заполняем значения;

- открываем скрипт и вписываем имя параметра;

- открываем вид, на котором есть все элементы нашей модели (например Navisworks);

- запускаем скрипт;

- проверяем, что значения заполнились для всех элементов из активного вида