В прошлой статье я описала какие параметры нужно заполнить у IFC арматуры в проекте Revit на шаблонах ADSK, чтобы получить верные значения в спецификациях. В этой статье покажу как можно автоматизировать эту задачу и расскажу как написать скрипт Dynamo для решения этой задачи.
Подготовка
Перед началом работы проверяем, чтобы был заполнен параметр марки у основы. Для примера я создала несколько плит с маркой П-1 и П-2
Для плиты П-2 я использовала конструкцию, состоящую из двух частей (Часть главная и Часть составная) для того, чтобы при написании скрипта сразу учесть такой случай тоже.
Открываем динамо и создаем скрипт.
Получаем IFC арматуру
Для работы нам нужна только IFC арматура, так как у системной арматуры параметры метки основы и количества основы вычисляются автоматически. Для этого создадим следующую конструкцию из нодов.
- Получаем все экземпляры в категории Несущая арматура с помощью нодов Categories и All Elements of Category
- Переводим их в типоразмеры с помощью нода Element.ElementType
- Берем у типоразмеров значения параметра ADSK_Арматура семейством нодом Element.GetParameterValueByName
- В код-блоке сравниваем равно ли это значение единице
- Полученный список значений true/false передаем в маску для нода List.FilterByBoolMask.
Присваиваем значение параметру ADSK_Метка основы
Дальше нам нужно для полученных элементов получить список элементов-основы. Для этого используем нод из пакета GeniusLoci ElementHost.
- Получаем список элементов-основы (ElementHost.)
- Берем у них значение параметра Марка с помощью нода Element.GetParameterValueByName
- Записываем это значение в параметр ADSK_Метка основы экземплярам арматуры IFC нодом Element.SetParameterByName
Присваиваем значение параметру ADSK_Колчиество основы
Перед тем как присвоить количество основы, его нужно посчитать.
У нас есть конструкция, которая состоит из нескольких элементов (часть главная и часть составная) каждая из которых является элементом-основой. Если мы будем просто считать количество всех основ, то получим не верное значение (для плиты П-2 их будет в два раза больше, так как она состоит из двух элементов). Отличительной особенностью и параметром, на который ориентируется спецификация при подсчете количества основы является параметр ADSK_Масса элемента. Для монолитных конструкций он равен 0. Для главных частей этот параметр равен -1, а для составных -2. Учтем это при составлении скрипта и отфильтруем элементы-основы, у которых ADSK_Масса элемента равна -2(минус двум).
- Получаем уникальные элементы-основы с помощью нода List.UniqueItems
- Переводим их в типоразмеры с помощью нода Element.ElementType
- Берем значение параметра ADSK_Масса элемента нодом Element.GetParameterValueByName
- В код блоке сравниваем полученные значения со значением -2.
- Полученный список значений true/false передаем в маску для нода List.FilterByBoolMask и получаем на выходе OUT элементы-основы у которых значение параметра ADSK_Масса элемента равно нулю или единице.
- У всех элементов на выходе OUT берем у них значение параметра Марка с помощью нода Element.GetParameterValueByName
- Группируем элементы с помощью нода List.GroupByKey по полученным ключам (значение параметра марка)
- Нодом List.Count подсчитываем количество элементов в каждой группе, используя уровни списка
Теперь значения количества основы для плиты П-1 и П-2 получены (3 и 4) и можно приступать к присвоению этих значений параметру ADSK_Количество основы IFC арматуры.
- Элементы, полученные в блоке присвоения параметра ADSK_Метка основы, группируем по ключам (ключами будут марки из того же блока)
- С помощью нода Element.SetParameterByName присваиваем значение параметру ADSK_Количество основы IFC арматуры
- В слот Element подаем сгруппированные экземпляры IFC арматуры
- В слот value подаем значения из нода List.Count
Сохраняем скрипт и используем в проекте.
Видео
Для тех, кто не очень любит читать можно посмотреть
Итоги
В этой статье пошагово рассмотрели как получить с помощью Dynamo значения параметров ADSK_Метка основы и ADSK_Количество основы
При составлении кода использовали нод из пакета GeniusLoci . Если интересно как обойти использование пользовательских пакетов или хотите получить готовый скрипт, пишите в комментарии или в группе канала в телеграмме.
Всем успехов в работе!
Связаться со мной можно на странице контактов
Добавить комментарий