Фильтрация элементов по значению параметра

Главная Форумы Задать вопрос Фильтрация элементов по значению параметра

В этой теме 5 ответов, 4 участника, последнее обновление  ИваСерж 6 мес., 1 неделя назад.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)
  • Автор
    Сообщения
  • #7886 Score: 0

    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”

    #7887 Score: 0

    Шпилька
    Участник
    3 pts

    Олег, приложите файл и скрипт…

    #7888 Score: 2

    ИваСерж
    Модератор
    96 pts

    Не совсем понятно, что вы хотите фильтровать. Речь идет о поиске систем и записи в элементы имени системы? Тогда, возможно, следующее решение для вас:
    Как вы сами говорите, в систему могут входить
    семейства из разных категорий: фитинги, общие модели, смежные объекты…
    Вы начинаете скрипт с поиска элементов. Впринципе, можно выбрать все-все элементы и искать к какой системе они относятся, но это слишком много работы для компьютера. Поскольку элементов тысячи, а инженерных систем не так уж и много, я предлагаю начинать скрипт исходя из инженерных систем. В этом нам поможет скрипт Лукап – иметь его обязательно для каждого программиста в Ревит.
    Насколько я понял, у вас трубы. Значит для начала выберем все трубопроводные системы.
    Итак предлагаю следующий порядок действий:
    1. Выбираем все системы труб
    2. Поочередно из каждой системы извлекаем элементы системы, а также название системы или любой другой необходимый параметр (у вас “Имя системы”)
    3. В каждый элемент системы (не зависимо от категории), записываем в параметр “Группирование” “Имя системы”

    Я набросал рабочий черновик который извлекает имя системы и элементы системы. С записью в параметры, надеюсь, разберетесь.
    https://www.dropbox.com/s/zi4b3jujelroz3f/2018.04.12%20PipeSystemElements.dyn?dl=0
    П.С. Файл у меня на дропбоксе. Лежит там, пока мне не надоест. Если файл не скачивается – значит я его безвозвратно удалил.

    #7889 Score: 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. %-(

    Дальше, как записать нужное значение в другой параметр я разобрался, а вот как фильтровать/группировать – нет.

    #7890 Score: 0

    Oleg
    Участник
    30 pts

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

    #7891 Score: 1

    ИваСерж
    Модератор
    96 pts

    Упрощайте ваши алгоритмы.
    Проблема в отсутствии продуманного алгоритма. У вас хаос и костыли.
    Вы пишите о помощи в фильтрации. А исходный список, по которому будете фильтровать, не получили.

    Вывод: задача простая. Но для её решения нужно базовое понимание АПИ и программирования на Питоне. Стандартными нодами Динамо не получится.
    В Динамо большие проблемы с фильтрацией и сортировкой. Зато не вижу проблем в Питоне через обычный if, либо через filter по ключу. Я бы с удовольствием помог если бы была проблема с какой-то строчкой кода, а так проблема в подходе.

    Для решения ВАМ необходимо:
    1. Поставить задачу
    2. Придумать алгоритм который можно объяснить 4-5 словами
    3. Попунктно реализовать алгоритм. Неважно в Динамо или Питоне.

Просмотр 6 сообщений - с 1 по 6 (из 6 всего)

Для ответа в этой теме необходимо авторизоваться.