Фильтрация элементов по значению параметра
Главная › Форумы › Задать вопрос › Фильтрация элементов по значению параметра
- В этой теме 5 ответов, 4 участника, последнее обновление 6 лет, 8 месяцев назад сделано ИваСерж.
-
АвторСообщения
-
OlegУчастник
Приветствую.
Прошу помочь с решением задачи: нужной найти все элементы (я взял для одной категории, но в целом нужны все), которые содержат определенную часть значения в параметре элементов и записать этим элементам другое значение в другой параметр.
Например, есть инженерные системы, каждая из них содержит параметр “Имя системы” со значениями К1 1; К2 1; К3 1; К1 2; К2 2; К3 2; К1 3; К2 3; К3 3. Мне нужно собрать все элементы, которые содержат значение К2 ( а именно: К2 1; К2 2; К2 3) и назначить им текстовое значение в параметр группирование. Вот что получилось у меня:ания. Вот что получилось у меня:
Скрипт не фильтрует элементы, а просто записывает текстовый параметр во все элементы данной категории. Помогите, пожалуйста, заставить скрипт фильтровать элементы по значению “К2”
Олег, приложите файл и скрипт…
Не совсем понятно, что вы хотите фильтровать. Речь идет о поиске систем и записи в элементы имени системы? Тогда, возможно, следующее решение для вас:
Как вы сами говорите, в систему могут входить
семейства из разных категорий: фитинги, общие модели, смежные объекты…
Вы начинаете скрипт с поиска элементов. Впринципе, можно выбрать все-все элементы и искать к какой системе они относятся, но это слишком много работы для компьютера. Поскольку элементов тысячи, а инженерных систем не так уж и много, я предлагаю начинать скрипт исходя из инженерных систем. В этом нам поможет скрипт Лукап – иметь его обязательно для каждого программиста в Ревит.
Насколько я понял, у вас трубы. Значит для начала выберем все трубопроводные системы.
Итак предлагаю следующий порядок действий:
1. Выбираем все системы труб
2. Поочередно из каждой системы извлекаем элементы системы, а также название системы или любой другой необходимый параметр (у вас “Имя системы”)
3. В каждый элемент системы (не зависимо от категории), записываем в параметр “Группирование” “Имя системы”Я набросал рабочий черновик который извлекает имя системы и элементы системы. С записью в параметры, надеюсь, разберетесь.
https://www.dropbox.com/s/zi4b3jujelroz3f/2018.04.12%20PipeSystemElements.dyn?dl=0
П.С. Файл у меня на дропбоксе. Лежит там, пока мне не надоест. Если файл не скачивается – значит я его безвозвратно удалил.OlegУчастникСпасибо за дельный совет и скрипт.
По поводу фильтрации расскажу чуть подробнее. Мне нужно собрать спецификацию. Но сделать это не по имени системы, а по параметру “Тип системы”… В общем сначала я начал собирать категории, извлекал значение параметра “Сокращение для системы” (оно соответствует “Тип системы”), потом дописывал нужный мне префикс перед ним и горя не знал… пока не добрался до последней категории – Оборудование. Вспомнил, что у него нет параметров “Сокращение для системы” или “Тип системы”.
И тут начались бубны: мне нужно сгруппировать все системы одного типа и подсчитать их в спецификации. Если я соберу все имена систем в проекте (как я уже писал: К1 1; К2 1; К3 1; К1 2; К2 2; К3 2; К1 3; К2 3; К3 3 и много другого), мне нужно будет из этого списка отфильтровать каждую группу по отдельности, а именно все системы которые начинаются на К1, все системы К2 и К3, для этого я искал нод который позволит собрать значение параметра по первым буквам (как в Revit: “начинается с” или “содержит”) но не нашел.
Ах, при этом у меня будут системы типа К1н 1; К2н 1; К3н 1 и считаются они тоже отдельно, получается мне нужно будет исключить их из первичного списка в котором я получу все системы со значением К1, К2, К3. %-(
Дальше, как записать нужное значение в другой параметр я разобрался, а вот как фильтровать/группировать – нет.
Если я правильно понял задачу по группировке, то можно сделать таким нехитрым образом:
Упрощайте ваши алгоритмы.
Проблема в отсутствии продуманного алгоритма. У вас хаос и костыли.
Вы пишите о помощи в фильтрации. А исходный список, по которому будете фильтровать, не получили.Вывод: задача простая. Но для её решения нужно базовое понимание АПИ и программирования на Питоне. Стандартными нодами Динамо не получится.
В Динамо большие проблемы с фильтрацией и сортировкой. Зато не вижу проблем в Питоне через обычный if, либо через filter по ключу. Я бы с удовольствием помог если бы была проблема с какой-то строчкой кода, а так проблема в подходе.Для решения ВАМ необходимо:
1. Поставить задачу
2. Придумать алгоритм который можно объяснить 4-5 словами
3. Попунктно реализовать алгоритм. Неважно в Динамо или Питоне. -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.